Product Documentation
Dracula Reference
Product Version IC23.1, September 2023

5


Compiling Network Descriptions (LOGLVS)

The main focus of Chapter 5 is on LOGLVS in Dracula. It covers the following:

Overview

To run an LVS comparison, you must convert a schematic netlist into a transistor-level network data file. You can use LOGLVS to convert many different database formats, as shown in the LVS flow diagram on the following page.

LOGLVS compiles the logic network data, expands the macros, and integrates the circuit definition with the logic network data.

A logic schematic is concerned only with an element’s logical function–NAND, NOR, AND, OR, and so forth—not with how this function is implemented in transistors. Therefore, the schematic does not provide enough information to perform a consistency check on gates that have the same logic function but different implementations. To solve this problem, Dracula reads a subcircuit description data file you create with the Circuit Description Language (CDL) described in the “Preparing Netlists” section in this chapter. Use CDL to modify an existing circuit simulator input data file, such as a SPICE™ file.

When LOGLVS integrates a circuit definition with logic network data, it produces transistor-level network data. Each type of primitive logic element must have a corresponding subcircuit description definition. Logic elements with the same name and the same number of inputs and outputs, but with different implementations, require different CDL definitions. CDL uses the name extension to accomplish this. If a logic element does not have a CDL description, it is treated as a box with a logic meaning.

Dracula compares the elements in the logic schematic with the elements in the circuit library. If both name extensions and I/O counts match, Dracula expands the logic element into transistors. After checking and expanding all logic elements in the schematic, Dracula creates an LVS logic file. This file is also known as the transistor-level network file, although it can contain a non-transistor box.

Dracula also expands SPICE data files into transistor-level network files for LVS comparison. The line length is limited to 128 characters, and the module/signal/instance name length is limited to 80 characters.

Note:

Initial Correspondence Nodes

LVS requires some initial correspondence node pairs for comparison. Dracula checks the names from the layout and the network to find the initial correspondence pairs. Each network description language has its own way of specifying initial correspondence nodes. The following table summarizes the node names for each data description format.

Internal correspondence pairs are not required when you use the AUTOMATCH command in the Description block.

Node names Definitions

SPICE

GLOBAL

I/O list in .SUBCKT or .MACRO

VCC and VDD are keywords for power
VSS and GND are keywords for ground
Node names defined as the highest level .SUBCKT or .MACRO are I/O for the entire chip

Verilog

supply1
supply0
input
output

POWER
GROUND
INPUT
OUTPUT

Node Names

After macro expansion, each node has a new name inside the macro. LOGLVS uses the following format for a node name or cell designator in a logic-level or circuit-level network:

name1-name2-name3...-namen

name1

Highest level module designator

namen

Lowest level node name or designator

LOGLVS uses the following format for the expansion of a SPICE element name:

Mnum1Xnum2...Xnumn 

Mnum1

Lowest level element name

Xnum2...Xnumn

Subcircuit element names of the subcircuit call listed in the reverse order of the hierarchy

For example, the logic network has an element A1-1 as follows:

Dracula expands the node name P1 in BOX3 as follows:

A1-1-Q1-P1

If the preceding figure is a SPICE subcircuit, Dracula expands the name of the element MP1 as follows:

MP1X02X01

The LVS error report uses the schematic node name. LOGLVS creates the IMAGE.LIS file, which stores the node name directory.

Preparing Netlists

LVS can use a variety of netlists. However, a logic simulator netlist describes only an element’s logical function (NAND, NOR, and so forth) and not the transistors that make up the logic symbol. Therefore, you must also provide a SPICE or CDL file that describes, at the transistor level, what comprises the logical elements (primitives). LOGLVS uses both of these files to create a transistor-level netlist for LVS.

Every type of primitive logic element called by the schematic netlist must have a corresponding subcircuit definition in SPICE or CDL format. Logic elements with the same name and the same number of inputs and outputs, but with different implementations, must have different subcircuit definitions. You can either use a different name or use the name extension feature available in CDL.

LOGLVS accepts CDL netlist files in random .SUBCKT order.

The CDL format is a subset of the SPICE format but differs from it in the following ways:

To run LVS successfully, you must make minor additions to the basic SPICE or CDL subcircuit netlist.

LOGLVS For Analog or RF Designs

In this release and subsequent releases, LOGLVS can read the netlist with primitive devices defined in instance forms and LOGLVS can also store parameters for box elements. You usually use these two features in Analog or Radio Frequency (RF) designs. You can use box elements to specifically describe the inductor or other design components in the netlist.

Instance Primitive Device Example

Given below is an example netlist with instance primitive devices.

.SUBCKT nmos_rf d g s b
.ENDS
.SUBCKT TEST1_N S_B D G
X1 D G S_B S_B nmos_rf wr=2.5e-06 lr=1.8e-07 nr=4
.ENDS

The subckt nmos_rf represents an NMOS device in the RF design. You use an empty .SUBCKT to define the NMOS device. You use a .SUBCKT call (X1) to instantiate an instance of this device. Refer to the Running LOGLVS section for the DEVMAPcontrol command to find out how LOGLVS reads this kind of netlist.

Box Element Example

The following shows an example to define a box element (an inductor element) in the CDL netlist.

.SUBCKT spiral_rad T1 T2
.ENDS
.SUBCKT TEST1 P1 P2 P3 P4
X2 P1 P2 spiral_rad nr=4.5 rad=6e-05 w=1.5e-05 s-1.5e-06
.ENDS

You use an empty .SUBCKT definition to define a box element. You use an empty .SUBCKT call (X2) to instantiate an instance of the element. You can specify parameters for instances of a box element. In the above example, nr, rad, w, and s are parameters.

The box element should be defined with an empty .SUBCKT statement before it is instantiated.

LOGLVS can store parameters of a box element instance for the Dracula LVS parameter comparison. The order of the parameters and the number of parameters for instances of the same primitive device types need not be the same. However, the number and order of the parameters for box elements should be the same. The maximum number of parameters is limited to 5.

For the parameter comparison of box elements, refer to the PAR-COMPARE command in the “Description Block Commands” chapter.

LOGLVS Command Sequence

This section describes the LOGLVS commands and shows examples for using them in different types of netlists.

LOGLVS commands can be grouped into the following categories:

For some commands, the order is important. If you specify commands in the wrong order, Dracula issues a warning message.

Control Commands

Control commands are optional and must appear at the beginning of the netlist.

CASE

Turns on case sensitivity. You must specify this command to invoke case sensitivity.

TRANSISTOR

Allocates virtual memory

RESISTOR

Allocates virtual memory for resistor shortages

FPIN

Turns on explicit pin assignment and implicit floating pin handling.

KFPIN

Suppresses the filtering of floating nodes in cell instances when running in composite mode.

DATAFORMAT

Turns on 4.2 data compression

DXF

Generates EXPELE.LIS/EXPELE.CEL

HTV/DRE

Generates Dracula Interactive files

NO_WARNING

Turns off connection checking

NO_WARNING EQUIV_CHK

Suppresses warning messages from LOGLVS on non-global names which are "re-equived", for example *.EQUIV P=pch P=p5v.

PINORDER

<filename>    Generates pin order file to be used in QRC. Default filename is PINORDER.TXT but you may change the name by specifying filename. For example, PINORDER my_pin_ord

Parse Commands

To parse the netlist, you must specify parse commands.

NVER

Compiles library produced by VAN (Verilog Analyzer)

CIRCUIT

Compiles SPICE or CDL netlist

CELL/BBOX

Drops netlist statements from all Hcells. Works only in composite mode for SPICE files.

Expand or Flatten Commands

Expand or flatten commands are required and let you expand or flatten the netlist from the parsed result for the primary cell.

GENPAD

Generates a 6GPADS.DATA file and must precede the CONV command

LINK

Expands the logic network. For VERILOG netlists only.

CONVERT

Converts logic network into a LVSLOGIC.DAT file.

SUMMARY

Prints the ELEMENT summary by types and must follow the CONV command

EXIT

Exits the program

LOGLVS Examples

CDL example:

LOGLVS !<<
TRANS 200000
RESI 30000
DXF
CELL cell.tab ;necessary if running cell mode. Use the
;CELL/bbox command if running composite
;mode.
CIR cdl ;parse CDL netlist first
CON top
X
!

Verilog example (Assuming that line "define mylib lib_dir" exists in file cds.lib and directory lib_dir exists):

van -lib mylib Verilog.net
LOGLVS !<<
CASE ;VAN is case-sensitive
CELL cell.tab ;necessary if running cell mode. Use the
;CELL/bbox command if running composite
;mode.
CIR cdl ;parse CDL netlist
NVER mylib top_cell ;parse Verilog netlist
CON
SUM
X
!

CDL Control Commands

You can add commands to the CDL netlist that can be read by Dracula software but not by the simulator.

*.BIPOLAR

*.BIPOLAR

Description

Preserves and compares any analog elements coded in the netlist (capacitors, diodes, and resistors). If you do not use the *.BIPOLAR command, LOGLVS ignores all resistors, capacitors, and diodes.

When you use *.BIPOLAR, use the *.CAPA command to tell Dracula to ignore capacitors. Use *.DIODE to tell Dracula to ignore diodes.

To cause Dracula to ignore resistors, use the *.RESI command and specify a threshold resistance below the resistors you want Dracula to ignore. This effectively “shorts” the resistor nodes.

When you use the *.BIPOLAR command, Dracula checks only the connectivity of capacitors, diodes, and resistors. Dracula does not check their size parameters unless you specify in the netlist, respectively,

*.RESVAL or *.RESSIZE *.CAPVAL or *.CAPAREA *.DIOAREA *.DIOPERI

If you use the RESVAL command in the netlist file, you cannot also use the RESSIZE command in the netlist. Likewise, if you use the CAPVAL command, you cannot also use the CAPAREA command.

Be sure your rules file checks for parameter mismatches for each device. Dracula either checks for all resistance mismatches or for width/length mismatches. However, Dracula cannot check for both of these simultaneously.

Make sure that every element in the CDL file corresponds to an element in the layout.

*.BUSDELIMITER

*.BUSDELIMITER delimiterChar

Description

Specifies delimiter characters for pins in a bus in CDL. Pins in a bus must be grouped together in ascending or descending order in CDL. The order of the net connection to its corresponding pin is determined by its position in the .SUBCKT statement. For example, a RAM cell is defined in CDL as follows:

.SUBCKT RAM A[0] A[1] B C[8] C[7]

The reference for the RAM cell in Verilog is as follows:

MODULE TOP (CLK,IN,...
INPUT [1:2] CLK;
INPUT [1:0] IN;
...
RAM XR1 (.B(net78), .C(CLK), .A(IN));

The pin C[8] of instance XR1 is connected to CLK[1].
The pin C[7] of instance XR1 is connected to CLK[2].
The pin A[0] of instance XR1 is connected to IN[1].
The pin A[1] of instance XR1 is connected to IN[0].

The *.BUSDELIMITER command tells LOGLVS what bus delimiter to look for in CDL files so that LOGLVS correctly matches the CDL definition and its corresponding Verilog reference.

Arguments

delimiterChar

The delimiter can be one of the following: a bracket ([), a less than sign (<), a curly bracket ({), or an underscore (_). Specify only the leftmost character with the *.BUSDELIMITER command.

Example

The following example specifies a bracket ( [ ) as the delimiter character.

*.BUSDELIMITER [

*.CAPA

*.CAPA

or

*.CAPA model-name1 model-name2 ...

Description

Use the *.CAPA command only when you specify *.BIPOLAR but do not want the capacitors from the SPICE file to be included in the LVS check.

If you specify model names, LOGLVS drops capacitors with the specified model names. LOGLVS also drops capacitors that do not specify model names. You can specify wildcards with the following exceptions:

Arguments

model-name1 ...

LOGLVS drops capacitors with the model names you specify.

Example

In the following example, LOGLVS drops C1 and C2.

*.global vdd vss
*.BIPOLAR
*.RESI=150 [ry] [rx]
*.CAPA PA
.param
.subckt tlow in out
C1 in out 3 $.MODEL = PA
.ends tlow
.SUBCKT inv Z / A WN=1 LN=1 WP=4 LP=2
* INVERTER
MP1 Z A vdd vdd P WP LP
MN1 vss A Z vss N WN LN
.ends inv
.subckt top out1 in1 V=1K
x1 o1 i1 /inv WN=13 LN=3
x2 i1 in1 /inv WN=13 LN=3
x3 out1 o1 /inv WN=13 LN=3
x4 o1 vss /tlow
C2 i1 vss 3.53898E-02
C3 i1 vss 3.53898E-02 $.MODEL = PB
.ends

*.CAPAREA

*.CAPAREA

Description

Use this command to specify the area of the capacitor.

Example

C0 NET2 GND 4.5 $[MP]

indicates that the area of the capacitor body is 4.5 squares.

To have LVS compare the area of the capacitors between the schematic and layout, specify the CAPAREA option in the LVSCHK command.

*.CAPVAL

*.CAPVAL

Description

Use this command to specify the capacitance value of the capacitor.

Example

C0 NET2 GND 4.5p $[MP]

indicates that the capacitance value of the capacitor is 4.5 picofarads.

To have LVS compare the area of the capacitors between the schematic and layout, specify the CAPVAL option in the LVSCHK command.

*.DEFAULT

*.DEFAULT {W=width L=length} {QW=qwidth QL=qlength} 
{RW=rwidth RL=rlength} 

Description

Assigns a default width and length to all transistors and resistors in the netlist that have no width and length specification.

Arguments

width

Width of transistors.

length

Length of transistors.

qwidth

Width of BJTs.

qlength

Length of BJTs.

rwidth

Width of resistors.

rlength

Length of resistors.

Specify both width and length. If you specify only one, the other defaults to zero.

*.DIOAREA

*.DIOAREA

Description

Use this command to specify the area of the diode.

Example

D10 NET2 NET7 DP 21 20

indicates that the area of the diode body is 21 squares.

To have LVS compare the area of the diodes between the schematic and layout, specify the DIOAREA option in the LVSCHK command.

*.DIOPERI

*.DIOPERI

Use this command to specify the perimeter of the diode.

Example

D10 NET2 NET7 DP 21 20

indicates that the perimeter of the diode body is 20.

To have LVS compare the perimeter of the diodes between the schematic and layout, specify the DIOPERI option in the LVSCHK command.

*.DIODE

*.DIODE

Description

Use the *.DIODE command only when you specify *.BIPOLAR but do not want the diodes from the SPICE file to be included in the LVS check.

*.EQUATION

*.EQUATION

Description

Specifies that LOGLVS evaluates and passes parameter expressions down through the netlist hierarchy. You must also specify the .PARAM command.

Note:

Example

*.BIPOLAR
*.GLOBAL GND gnd vdd
*.PIN GND gnd vdd
*.EQUATION
*.RESI
*.RESVAL
.PARAM
.subckt zinv zoutp zinp pl=2.0 pp=5.2
MQ1 zoutp zinp vdd vdd P W=pl*2+(pp-1) L=LOG(pp) ...
R2 zoutp zinp (2000
+ +
+ pp) $W=MAX(pl,pp) $L=MIN(pl,pp)
.ends zinv
.subckt ztest ztout ztin S1=10 S2=90
XI1 ztout net2 zinv pl=4*2 pp=(S1*10)
XI0 net2 ztin zinv pl=EXP(S1-9)/2 pp=(S1+S2)
.ends ztest

After expansion, for the devices of instance XI1:

MQ1 width=115 and length=4.61
MQ0 width=10.49 and length=10.49
R2 resistance value=2100, width=100, and length=8

For the devices of instance XI0:

MQ1 width=101.72 and length=4.61
MQ0 width=10.49 and length=10.49
R2 has resistance value=2100, width=100, and length=1.35

*.EQUIV

*.EQUIV new-name = old-name
*.EQUIV new-model = old-model

Description

The *.EQUIV command works in one of three ways:

 *.EQUIV N=NMOS_RF
 .SUBCKT nmos_rf d g s b
 .ENDS
 .SUBCKT TEST1_N S_B D G
 X0 D G S_B S_B nmos_rf wr=2.5e-06 lr=1.8e-07 nr=4
 .ENDS
This equates the instance primitive device NMOS_RF in the schematic to the N type of MOS device in the layout (ELEMENT MOS[N]). You use this information for the LVS comparison, that is, you can compare the layout instances of MOS[N] with the schematic instances of NMOS_RF.
 *.EQUIV IN1=spiral_rad
 .SUBCKT spiral_rad T1 T2
 .ENDS
 .SUBCKT TEST1 P1 P2
 X0 P1 P2 spiral_rad nr=4.5 rad=6e-05 w=1.5e-05 s=1.5e-06
 .ENDS
The corresponding schematic box element for layout box element IN1 is spiral_rad. The above example compares the instances of the layout box element, IN1 with the instances of the schematic box element, spiral_rad.

In an LVS comparison, all the layout text names must start with an alphabetic character and must match the netlist I/O names. The *.EQUIV command can assign a new name to a number in the SPICE netlist. The order in which you enter these parameters is important.

You can also use the *.EQUIV command to equate an element subtype to a model name or subckt name of an instance primitive device or a box element. Dracula reads the first two characters of the model name, and if they are not the same as the subtype of the element defined, it looks for an *.EQUIV command.

If your *.EQUIV command extends to more than one line, use an asterisk-plus sign (*+) at the beginning of each additional line to indicate continuation of the previous line.

You cannot use the *.EQUIV command in the following ways:

Arguments

new-name

Layout text.

old-name

Schematic node name or SPICE or CDL node number.

new-model

Element subtype.

old-model

SPICE/CDL model name.

In this version and subsequent versions you can use the EQUIV command (from CDL) also as a LOGLVS command and it works similar to the GLOBAL command. And, you do not have to edit your netlist when you use this command in this way, but you have to limit your command length by 78 characters. When you use EQUIV as a LOGLVS command, it overrides subsequent *.EQUIV statements in your CDL files (without changing them). Refer to the “Running LOGLVS” section for the control command.

Example: Equating Node Names with Node Numbers

The following example equates node numbers in a SPICE file (99, 0, 43) to text names in a layout (VSS, VCC, AIN).

Layout text:

VCC VSS AIN 

SPICE:

*.EQUIV VCC=99 VSS=0 AIN=43 
M1 99 43 8 0 NC W=20 L=5

Example: Equating Subtype Elements with Model Names

In the following example, for each model name N15L in the netlist, the layout database must contain a MOS[N] subtype element. Also, for each MOS[N] element in the layout, a corresponding model name N15L must be coded in the netlist.

Dracula:

ELEMENT MOS[N] 

SPICE:

*.EQUIV N=N15L 
M1 D G S B N15L W=10 L=1.5

Example: Using Node Numbers in a SPICE File

The following is a correct SPICE file:

*.SPICE
*.GLOBAL 99:P 0:G
*.EQUIV VCC=99 VSS=0 A=8 B=7 C=98
.SUBCKT TOP 8 7 98
M1 99 8 7 99 P 20 5
M2 0 8 7 0 N 10 5
M3 7 98 9 99 P 10 5
M4 7 98 9 0 N 5 5
.ENDS

Here is an example of an incorrect SPICE file:

*.SPICE
*.EQUIV  A=8  B=7  C=98  VCC=99  VSS=0
.SUBCKT  TOP  A  B  C
M1 99 8 7 99 P 20 5
M2 0 8 7 0 N 10 5
M3 7 98 9 99 P 10 5
M4 7 98 9 0 N 5 5
.ENDS

The SPICE file is incorrect because the I/O’s (A, B, and C in the .SUBCKT command) should be 8, 7, and 98. The *.EQUIV command does not equate names and numbers within the SPICE file.

The incorrect SPICE file can also be changed to a correct CDL file as follows:

*.GLOBAL  VCC  VSS
.SUBCKT TOP A B C
M1 VCC A B VCC P 20 5
M2 VSS A B VSS N 10 5
M3 B C 9 VCC P 10 5
M4 B C 9 VSS N 5 5
.ENDS

No *.EQUIV command is needed because this is a CDL file. The .SUBCKT I/O names assign node names to the layout text I/O names for initial correspondence in LVS.

When you use your SPICE or CDL data to run LVS, the *.EQUIV command assigns a name to a node number. It cannot connect two nodes. For example, node 1 and 2 are two nodes in the SPICE data file. If you specify *.EQUIV VCC=1, VCC=2, Dracula assigns the name VCC to both node 1 and node 2. These nodes are still two different nodes. For an example of an exception to this global node handling, see the following example.

Example: Equating Different Power Nodes in a SPICE File

*.GLOBAL VDD, VSS, VDD1:P, VDD2:P, VSS1:G, VSS2:G
*.PIN VDD VSS
*.EQUIV VDD=VDD1 VDD=VDD2 VSS=VSS1 VSS=VSS2
.SUBCKT NA2 Z A B
* 2 INPUT NAND
MP1 Z A VDD1 VDD P WP=21.0 LP=21.0
MP2 Z B VDD VDD P W=1.0 L=1.0
MN1 Z A 5 VSS2 N W=1.0 L=1.0
MN2 5 B VSS VSS N W=1.0 L=1.0
.ENDS NA2
.SUBCKT NA3 Z C B A * 3 INPUT NAND *.SWAP A B C MP1 Z A VDD2 VDD P W=21.0 L=21.0 MP2 Z B VDD VDD P W=1.0 L=1.0 MP3 Z C VDD VDD P W=1.0 L=1.0 MN1 Z A 6 VSS1 N W=1.0 L=1.0 MN2 6 B 7 VSS N W=50.62 L=4.53 MN3 7 C VSS VSS N W=1.0 L=1.0 .ENDS NA3

*.GNONSWAP

*.GNONSWAP mname

Description

Declares all MOS devices with a specific model name as *.NONSWAP devices.

Argument

mname

The model name reference. Must be one or two characters.

Example

*.GLOBAL VDD VSS
*
*.GNONSWAP P
*
.SUBCKT NA2 Z / A B
MP1 Z A VDD VDD    P WP=12 LP=14
MN1 Z B VDD VDD    N WN=12 LN=14
MP2 Z 5 VSS VSS     P WP=12 LP=14
MN2 5 B VSS VSS     N WN=12 LN=14
.ENDS

*.LDD

*.LDD

Description

Checks LDD devices. You must place this command at the beginning of your CDL file. For more information, refer to the MOSFET description in the “CDL Element Definition” section of this chapter.

Example

*.GLOBAL VDD VSS
*.LDD
.
.SUBCKT TOP A B
.
M1 A B VSS NLDD L=2.0 W=10.0 $LDD[N]
.
.
.ENDS

*.MEGA

*.MEGA

Description

You specify *.MEGA to invoke case sensitivity for m (milli) and M (mega). If you do not specify *.MEGA, both m and M mean “milli.” The *.MEGA command works only if you specify the *.SCALE command in the CDL netlist and set the case sensitivity in LOGLVS using the CASE command in LOGLVS.

When you do not use the CASE command, uppercase is the default. Specify the CASE command prior to lines that affect parsing.

If you specify the *.MEGA command, 53m means 53*10e-3, and 53M means 53*10e6. If you do not specify *.MEGA, 53m and 53M both mean 53*10e-3.

Example

*.BIPOLAR
*.RESI = 0
*.RESVAL
*.CAPVAL
*.DIODE
*.EQUATION
*.SCALE METER
*.mega
.PARAM
*.GLOBAL vdd! 
*.PIN vdd 
.SUBCKT px A Z
MM0 Z A vdd! vdd! PM W=Wx L=1.5u M=1
.ENDS px
.SUBCKT TOP IN OUT VM VP
RR9 OUT VP 53K $[RP]
RR11 IN VM 53M $[RP]
XI0 IN OUT / px Wx=12u
.ENDS TOP

*.NONSWAP

*.NONSWAP mname

or

Mxxx drain gate source bulk mname {W=width L=length} {m=multiplier} {$LDD[type]} $NONSWAP

Description

Specifies all logic gate, series, and parallel structures are swappable by default. The *.NONSWAP command lets you control the swappability in different applications.

This command applies to MOS devices only.

Arguments

mname

The model name reference. Must be one or two characters.

Mxxx

The MOSFET element name. The name must begin with M.

drain

The drain terminal node number/name.

gate

The gate terminal node number/name.

source

The source terminal node number/name.

bulk

The bulk terminal node number or name.

width

The width. If you specify W=, it indicates a width specification. Dracula does not check the width if you do not include this argument.

length

The length. If you specify L=, it indicates a length specification.

multiplier

Specifies multiple device.

type

The LDD designator, specified as a comment. Declares that the source and drain terminals have different characteristics and cannot be swapped.

Examples

Specify non-swappable devices in device statements for a SPICE or CDL file as follows:

.SUBCKT TOP N1 N2
.....
.....
MD1 out N1 10 VSS MN L=10 W=20 $NONSWAP
MD2 10 N2 20 VSS MN L=10 W=20 $NONSWAP
MD3 20 N3 VSS VSS MP L=10 W=20
.....
.....
.ENDS

Specify non-swappable devices by subtype in a SPICE or CDL file as follows:

.SUBCKT TOP N1 N2
*.NONSWAP MN
.....
.....
MD1 out N1 10 VSS MN L=10 W=20
MD2 10 N2 20 VSS MN L=10 W=20
MD3 20 N3 VSS VSS MP L=10 W=20
.....
.....
.ENDS

You must specify the *.NONSWAP command after the .SUBCKT command.

*.NOPIN

*.NOPIN signalName ...

Description

Specifies the exclusion of global pins that were listed in *.PIN command from HCELL subcircuit. The *.NOPIN command can only be used inside the .SUBCKT statement, immediately following the header of the .SUBCKT statement.

Arguments

signalName

The name of the net for the pin.

*.NOSUB_M

*.NOSUB_M

Description

Ignores substrate terminal for MOS in the LOGLVS schematic side.

*.PIN

*.PIN signalName ...

Description

Specifies the insertion of pins that are not in the I/O list to the primary cell or Hcell instances. The *.PIN command specifies global pins if you specify it outside the .SUBCKT statement. If you specify the *.PIN command inside a .SUBCKT statement, *.PIN specifies local pins. See Using Hierarchical LOGLVS for more information.

Arguments

signalName

The name of the net for the pin.

Example

The following example adds a pin A to the subcircuits:

*.PIN A

When *.PIN A is used outside of the .SUBCKT block, it adds pin A to all subcircuits except those defined with *.NOPIN A. When *.PIN A is used inside the .SUBCKT block, it adds pin A to the current subcircuit only. Node A should be defined as a global node to be used in *.PIN.

*.PININFO

*.PININFO signalName:pinType ...

Description

Specifies which pins act as drivers (outputs) and which pins act as loads (inputs). This command adds pin types to pins listed in the .SUBCKT statement only and should be placed after the .SUBCKT statement. Global nodes are ignored if they are listed in the *.PININFO statement.

By default, if a “/” appears in the .SUBCKT header:

If no “/” exists or you specify an unknown pin type, the first pin is an output node and the others are input nodes.

When running LVS, pin types are ignored, except for power or ground pads. Pin type is very important in DSPF (an output of HPRE). Refer to “Overview of Parasitic Resistance Extraction” for more details.

Arguments

signalName

The name of the net for the pin.

pinType

Specifies one of the following pin types:

B

Input/Output (bi-directional)

C

Clock

E

Enable

G

Ground

I

Input

J

Jumper

O

Output

P

Power

S

Switch

U

Unused

Example 1

In the following example, Y is an output signal. A is bi-directional. Pins B and C are input signals.

*.PININFO Y:O A:B B:I C:I

Example 2

In the following example, if you do not specify power and ground, they are treated as input.

.SUBCKT TOP A1 A2 A3 A4 T1 T2 T3 T4 ANA_VDD ANA_VSS  DIG_VDD 
+ DIG_VSS
*.PININFO ANA_VDD:P ANA_VSS:G DIG_VDD:P DIG_VSS:G
XNA2 A1 A2 A3 ANA_VDD ANA_VSS NA2
XNA4 A1 A2 A4 DIG_VDD DIG_VSS NA2
XNA3 T1 T2 T3 T4 DIG_VDD DIG_VSS NA3
.ENDS

Example 3

For a .SUBCKT with long list of signals, the syntax is:

*.PININFO O14:O O13:O O12:O O11:O O10:O O9:O O8:O O7:O
*.PININFO O6:O O5:O O4:O O3:O O2:O O1:O B10:B B9:B B8:B B7:B
*.PININFO B6:B B5:B B4:B B3:B B2:B B1:B I10:I I9:I I8:I I7:I
*.PININFO I6:I I5:I I4:I I3:I I2:I I1:I

or

*.PININFO O14:O O13:O . . . O O7:O
*.PININFO O6:O O5:O . . . B7:B
*.PININFO B6:B B5:B . . . I7:I
*.PININFO I6:I . . . I1:I

*.RESI

*.RESI { = value} {[modelName] ... }
*.RESI {value} {[modelName] ... }
*.RESI {[modelName] ... }

Description

You must also specify the *.RESVAL command when using the *.RESI command. However, do not specify the *.RESSIZE command when using the *.RESI command as it may result in unpredictable behavior.

Specifies the threshold value of the shorted resistors. If the resistance between any two nodes in the resistor statement is less than or equal to the threshold value, Dracula connects the two nodes.

You can also short a resistor by specifying its model name. Dracula treats all resistors with the same model name as shorts.

You cannot short two global nodes together.

You can use resistors in SPICE format for simulating both intentional and parasitic resistors. For LVS purposes, you must short the parasitic resistors.

You must include a *.BIPOLAR command. Otherwise, Dracula ignores *.RESI and all resistors. You must include *.RESI before any SPICE element statement.

If multiple *.RESI lines are specified, LOGLVS will use the value of the last *.RESI line (this includes the default value of 2000).

Arguments

value

The threshold value of the resistors to be shorted. You can indicate the units with a K or an M, or you can type the full number. You can use the SPICE scale factor for value. The default is 2K.

modelName

The model name of the resistors you want to short. The modelName can be a maximum of two characters. LOGLVS always truncates modelNames on a *.RESI line if they are longer than four characters. Do not put spaces between the square bracket and the model name.

Example 1

In the following example, Dracula shorts both R1 and R2.

*.Global VDD VSS
*.Bipolar
*.RESI=3K [RA]
.SUBCKT TOP A B C M1 A B VDD VDD P R1 C A 5K $[RA] R2 A B 2.5K .ENDS

Example 2

In the following example, the X4 placement of SHI1 shorts the internal net 01 to VSS. The X5 placement of SHI2 shorts its two input terminals, OUT1 and IN1, together. The short effect propagates through the network.

*.GLOBAL VDD VSS
*.BIPOLAR
*.RESI
.PARAM
.SUBCKT INV Z / A WN=1 LN=1 WP=4 LP=2
* INVERTER
MP1 Z A VDD VDD P WP LP
MN1 VSS A Z VSS N WN LN
.ENDS INV
* SHORT INPUT TO VSS
.SUBCKT SHI1 PORTA
R1 PORTA VSS 1.5K
.ENDS
* SHORT TWO I/Os
.SUBCKT SHI2 A B
R1 A B 1K
.ENDS
.SUBCKT TEST OUT1 IN1
X1 I1 IN1 /INV WN=13 LN=3
X2 O1 I2 /INV WN=13 LN=3
X3 OUT1 O1 /INV WN=13 LN=3
X4 O1 VSS /SHI1
X5 OUT1 IN1 /SHI2
.ends

*.RESSIZE

*.RESSIZE

Description

Do not use the *.RESVAL and *.RESSIZE commands simultaneously in the netlist. If both commands are specified and *.RESVAL is the last command, it will be used and can result in unpredictable behavior.

Use this command to specify the body size of a resistor as the number of squares in the resistor, or to specify the width and length of the resistor body.

Example 1

*.RESSIZE
R3 NET2 OUT 2.4 $[S]

indicates the body size is 2.4 squares.

To have LVS compare the resistor’s body size between the schematic and layout, specify the RESSIZE option in the LVSCHK command.

Example 2

*.RESSIZE
R3 NET2 OUT $[S] $W=5 $L=12

indicates the width of the resistor is 5 microns and the length is 12 microns.

To have LVS compare the width and length of a resistor body between the schematic and layout, you need to specify the RESWPERCENT and RESLPERCENT options respectively in the LVSCHK command.

*.RESVAL

*RESVAL

Description

Do not use the *.RESVAL and *.RESSIZE commands simultaneously in the netlist. If both commands are specified and *.RESSIZE is the last command, it will be used and can result in unpredictable behavior.

Use this command when specifying the resistance value of the resistor.

Example

*.RESVAL
R3 NET2 OUT 2.4 $[S]

indicates the resistance value is 2.4 ohms.

To have LVS compare the resistance value between the schematic and layout, specify the RESVAL option in the LVSCHK command.

*.REVERSE

*.REVERSE

Description

Swaps MOS width and length in the SPICE netlist. The standard SPICE MOS statement specifies width in the first field and length in the second field. If these two fields are swapped, you must use *.REVERSE to ensure correct device size checking.

Example

In the following example, the width and length are swapped in the MOS statements, and *.REVERSE alerts LOGLVS of this. If you specify W= and L= in the MOS statements, *.REVERSE has no effect.

***TRUE SPICE FILE*** 
*.SPICE
*.REVERSE
*.GLOBAL 99 0
*.EQUIV IN=1 OUT=2 VCC=99 VSS=0
.SUBCKT INV 1 2
M1 99 1 2 99 P 2 20
M2 0 1 2 0 N 2 10
.ENDS

*.SCALE

*.SCALE [meter]

Description

Specifies that Dracula read scales in the CDL netlist, including scales for all parameters. If you do not specify this command, scales in the CDL netlist are read only for values of resistor and capacitor instances (note that this is not the case when you use named parameters to set them).

Dracula ignores all units in the subcircuit headers and instance invocations. For the expression w=2.4um, u is the scale and m is the unit. When *.scale is used without “meter”, 0.25u becomes 0.25e-12 meter, which is correct “by rule”, but too small to be an intended value. Dracula issues a warning and scales by 1.0e6. The final value is equal to 0.25e-6 meter.

The following table lists the scaling factors.

Character (case-insensitive) Name Multiplier

T

Tera

1012

G

Giga

109

MEG

Mega

106

K

Kilo

103

M

Milli

1e-3

U

Micro

1e-6

N

Nano

1e-9

P

Pico

1e-12

F

Femto

1e-15

Arguments

meter

Changes the default database unit from microns to meters. Parameters that represent distance, such as those for diode, MOSFET, BJT, and function MOSFET instances, are multiplied by E+6 internally to change the unit back to micron. Parameters for resistor and capacitor instances are not adjusted if they do not represent distance.

Example 1

This example represents default behavior.

*.BIPOLAR
*.CAPVAL
.PARAM
*.GLOBAL GND:G VDD:P
.SUBCKT INV IN OUT
C1 IN GND 59K             * 59000
M1 OUT IN VDD VDD P w=.5u l=.25u * .5 .25
M2 OUT IN GND GND N w=.5u l=.25u * .5 .25
.ENDS

Example 2

In the following example, *.SCALE is specified.

*.BIPOLAR
*.CAPVAL
*.SCALE
.PARAM
*.GLOBAL GND:G VDD:P
.SUBCKT INV IN OUT
C1 IN GND 59K * 59000
M1 OUT IN VDD VDD P w=500000u l=.25 * .5 .25
M2 OUT IN GND GND N w=500000u l=.25 * .5 .25
.ENDS

Example 3

In the following example, *.SCALE [meter] is specified.

*.BIPOLAR
*.CAPVAL
*.SCALE meter
.PARAM
*.GLOBAL GND:G VDD:P
.SUBCKT INV IN OUT
C1 IN GND 59K * 59000
M1 OUT IN VDD VDD P w=.5e-6 l=.25u * .5 .25
M2 OUT IN GND GND N w=.5e-6 l=.25u * .5 .25
.ENDS

*.SPICE

*.SPICE 

Description

Indicates a standard SPICE file. This command lets you use an unmodified SPICE file that contains only node numbers instead of node names. When you use a *.SPICE command, Dracula assumes all node names in the CDL or SPICE commands use numbers instead of names. Dracula issues a warning when it encounters a node name instead of a number.

You must use this command before using a SPICE element statement. If you omit the *.SPICE command, you must place a backslash before the name of the subcircuit being called. Without the backslash, Dracula assumes that the subcircuit is defined in CDL format.

*.UNSPEC

*.UNSPEC

Description

When you use the *.UNSPEC command in your SPICE or CDL netlist, LOGLVS detects devices that do not have a width or length definition. Dracula issues a warning in the PRINT.OUT file.

In Dracula 4.9 version, when *.UNSPEC and *.BIPOLAR are set, BJTs are checked for the emitter area value only, and not for width of length (as before).

Use this command to check RES, BJT, JFET, and MOS devices.

Examples

Example 1

*.GLOBAL VDD, VSS
*.PARAM WP=2 WN=2
*.UNSPEC
.SUBCKT NA2 Z / A B * 2 INPUT NAND MP1 Z A VDD VDD P MP2 Z B VDD VDD P WP=12 LP=14 MN1 Z A 5 VSS N MN2 5 B VSS VSS N WN=12 LN=14 .ENDS NA2

When you place the *.UNSPEC command in the SPICE or CDL file before the .SUBCKT command, you get warning messages for the devices MP1 and MN1 as follows:

***WARNING: MOS HAVE WIDTH OR LENGTH WITH 0
LINE 7 : MP1 Z A VDD VDD P
***WARNING: MOS HAVE WIDTH OR LENGTH WITH 0 LINE 9 : MN1 Z A 5 VSS N

Example 2

*.GLOBAL VDD, VSS
*.BIPOLAR
*.UNSPEC
.SUBCKT ENET D G S SUB C B E
***
M1 D G S SUB MP
Q1 C B E PNP
.END

When you place the *.UNSPEC and *.BIPOLAR commands in the SPICE or CDL file before the .SUBCKT command, you get warning messages for the device M1 as follows:

PROCESSING INPUT FILE: ./test.cdl
 *** WARNING: ELEMENT HAS WIDTH OR LENGTH WITH 0
 LINE      8:M1 D G S SUB MP
 *** WARNING: BJT HAS EAREA EQUAL 0
 LINE      9:Q1 C B E PN
 *** WARNING: ELEMENT HAS WIDTH OR LENGTH WITH 0
 NUMBER          1:M1                    0          0
 *** WARNING: BJT HAS EAREA WITH 0
 NUMBER          2:Q1

*.UNSPEC-MOS

*.UNSPEC-MOS

Description

When you use the *.UNSPEC-MOS command in your SPICE or CDL netlist, LOGLVS detects devices that do not have a width or length definition. Dracula issues a warning in the PRINT.OUT file.

You use this command only for checking MOS transistors.

Example

*.GLOBAL VDD, VSS
*.UNSPEC-MOS
.SUBCKT ENET D G S SUB C B E
***
M1 D G S SUB MP
Q1 C B E PNP
.END

When you place the *.UNSPEC-MOS command in the SPICE or CDL file before the .SUBCKT command, you get warning messages for the device M1 as follows:

 *** WARNING: ELEMENT HAS WIDTH OR LENGTH WITH 0
 LINE      7:M1 D G S SUB MP
 *** WARNING: ELEMENT HAS WIDTH OR LENGTH WITH 0
 NUMBER          1:M1  

SPICE and HSPICE Commands

This section describes the HSPICE™ and SPICE commands you can use in a netlist file.

.ENDS or .EOM

.ENDS / .EOM 

Description

Terminates a subcircuit definition.

The .SUBCKT or .MACRO commands begin a subcircuit definition. A subcircuit definition that begins with .SUBCKT must end with .ENDS. A subcircuit definition that begins with .MACRO must end with .EOM.

.GLOBAL

.GLOBAL name... {:P/G} 

Description

Defines global node names such as power, ground, clock, or any node not passed in and out of subcircuits through the subcircuit I/O. If your version of the SPICE format does not have a .GLOBAL command, you can use *.GLOBAL. However, even with *.GLOBAL, any continuation lines must begin with a plus sign (+), not an asterisk-plus sign (*+).

Arguments

name

Specifies a list of global node names. The names that appear here must be the node names in the logic network.

:P/G

You can assign a pad type to a global name by adding :P or :G to the name. P stands for power, and G stands for ground.

The pad type must always attach to a global name or number even though this global name or number is later replaced by a new name with an *.EQUIV command.

Examples

In this example, VBB is a power pad.

.Global  VSS, VDD, VBB:P 

Two ground and power pads have unique names. In this application, VBB is a ground pad.

*.GLOBAL 1:P  0:G  99:G  2:P 
*.EQUIV  VSS1=0,  VDD1=1,  VDD2=2, VBB=99

.INCLUDE

.INCLUDE filename

Description

Includes a file in the SPICE or CDL netlist. This is a standard SPICE statement.

Argument

filename

The name of a file to be included in the netlist.

Examples

**CDL/SPICE FILE
.INCLUDE MODEL.SPI
.INCLUDE QUAD1.SPI
.INCLUDE QUAD2.SPI
.INCLUDE QUAD3.SPI
.INCLUDE QUAD4.SPI

.PARAM

.PARAM parameter = value...

Description

LOGLVS supports HSPICE parameter usage. You must use this command with parameters in the HSPICE file even if you do not declare any global parameters.

LVS compares the following parameters only:

Do not place an asterisk (*) in front of the .PARAM command. If you use an asterisk, Dracula ignores this command. To use the .PARAM command, set local parameters in the .SUBCKT command as shown below:

.SUBCKT  AND  3  1  2  PA1=10, PA2=5 

PA1 and PA2 assign a default value to the parameters inside the subcircuit in case a global assignment is not made. You can use only numbers in the I/O listing. You can also set the parameters in the subcircuit call as follows:

X1  3  1  2  AND  PA1=20  PA2=10 

The value of PA1 and PA2 overrides a value assigned in the .SUBCKT command but does not override a globally set value.

You can use the parameters to replace the width and length specification in an MOS statement as follows:

.MAC  NAND  1   2  3  WP=10 LPn=5
M1 3 1 99 0 P WP LPn
.
.
.
.EOM

Note

If a parameter value is missing, LOGLVS issues an error message. In the following example the parameter value is missing in the subcircuit definition:

.PARAM
.SUBCKT TOP A B PW=
...
.ENDS

In this case the PRINT.OUT file contains the message:

     2:.SUBCKT TOP A B PW= 
 *** ERROR: SYNTAX ERROR IN EQUATION

In other words, in the case where an undefined parameter is used in an expression, the value of the undefined parameter defaults to zero.

Arguments

parameter

Parameter names. Names must begin with an alphabetic character. There is no limit to the length of parameter names, but only the first four characters in a parameter name determine its uniqueness. For example, ABCDE is considered the same as ABCDF because the first four characters in both names are identical. If a parameter name over four characters appears more than once in the netlist, it is still counted only once.

When the parameter name begins with a W or L character, it has special meaning as shown in the following example:
.PARAM
.SUBCKT A X Y Z WL=1 LW=2
M1 X Y X Y P WL LW
M2 Z Y Y Z N WL LW
.ENDS

In this case, both MOS M1 and M2 get Width=1 and Length=2.

value

Real numbers. The units of these numbers are ignored. To have the scale taken into consideration, specify the *.SCALE command.

Example

The following example shows a CDL netlist with parameter passing:

*TWO-SOME  THREE-SOME  INVERTER  CHAIN
.PARAM
*.GLOBAL VDD VSS
.SUBCKT INV OUT IN pw=10 pl=2 nw=5 nl=2
M1 VDD IN OUT VDD P pw pl $ or w=pw l=pl
M2 OUT IN VSS VSS N nw nl $ or w=nw l=nl
.ENDS
.SUBCKT CHAIN OUT IN pw1=l0 nw1=5 pw2=30
+ nw2=15 pw3=90 nw3=45 nl1=2
X1 OUT SIG2 INV pw=pw3 nw=nw3 nl=nl1
X2 SIG2 SIG1 INV pw=pw2 nw=nw2 nl=nl1
X3 SIG1 IN INV pw=pw1 nw=nw1 nl=nl1
.END
.SUBCKT TOP OUTA OUTB INA INB
XA OUTA INA CHAIN
XB OUTB INB CHAIN pw1=15 nw1=7.5 pw2=15
+ nw2=7.5 pw3=15 nw3=7.5 nl1=2.5
.ENDS

In the previous example, OUTA, OUTB, INA, INB, VDD, and VSS are the names for initial correspondence in LVS.

In inverter chain A, the output instance P device is 90/2 (W/L) and the N device is 45/2. The middle instance P device is 30/2 and the N device is 15/2. The input instance P device is 10/2 and the N device is 5/2.

In the inverter instance B, the three instances of P device and N device are 15/2 and 7.5/2.5, respectively. The parameter passing feature lets you specify the device size without many unique subcircuit definitions.

.SUBCKT or .MACRO

.SUBCKT/.MACRO subname[#ext] output-node... {/} 
input-node...

Description

Begins a subcircuit definition. The two commands are equivalent.

The .ENDS or .EOM command ends a subcircuit definition. A subcircuit definition that begins with .SUBCKT must end with .ENDS. A subcircuit definition that begins with .MACRO must end with .EOM.

Any subcircuit that does not contain a device is considered an element box and must have a corresponding element box definition in your Dracula rules file.

If you want to use your original SPICE data to run LVS, note the following:

Arguments

subname

The element name.

#ext

The extension associated with this element. The pound sign (#) indicates that an extension follows. The extension is alphanumeric and can be up to eight characters long. It distinguishes elements that have the same name and I/O count but different implementations. The output node name of a device must have the same #ext string appended at the end.

output-node

The output node names of the element. For single output devices, only the first name is considered output. The rest is considered input.

/

Separates output names from input names.

When parsing .SUBCKT names, LOGLVS treats “/” as a normal character instead of as a separator.

input-node

Input node names.

Example

.SUBCKT  NAND#1  OUT / IN1 IN2 

To specify a node as input or output, use the backslash (/) delimiter. LVS does not use of this information, but LPE does.

.SWAP and Special Elements

.SWAP pin-name...
.SWAP (f/p {(f/p pin-name...)} pin-name... )... 

Description

LOGLVS lets you specify a special element as a box. The .SWAP command specifies which I/O pins can be swapped.

In composite mode, the netlist for LVS, whether compiled from your schematic netlist or extracted from the layout database, contains a list of interconnected Hcell placements and a list of composite-level pins. The .SWAP command determines whether pins can be swapped on the Hcell placements.

Use the first syntax shown above for a one level swap. Use the second syntax line for a multiple level swap.

In a one-level swap, a group of pins can be interchanged among themselves, meaning that LVS processes all pins in the group the same way.

In a two-level swap, two groups of pins are interchangeable. The pins within each group can be interchangeable.

In a multiple level swap, two subtrees of pins are interchangeable. A subtree is a branch of a tree that represents how pins are grouped. Subtrees within each subtree can be interchangeable.

The following limitations apply to multiple level swappability:

Argument

pin-name...

I/O names of the subcircuit. You must enclose the .SWAP specification by the .SUBCKT and .ENDS or .MACRO and .EOM commands.

You must designate whether the pin order is fixed (f) or permutable (p). If you do not want the pin order to change in processing, specify f before the list of pin names. If the pin order can change during processing, specify p before the list of pin names.

There can be no element specification other than another .SWAP. A plus sign (+) indicates continuation to the next line. If you use a .NOPIN statement, it must precede the .SWAP statement.

Examples: One-Level Swap

More than one .SWAP:

.SUBCKT AX1 1 2 3 4 
*.NOPIN pin1 pin2
.SWAP 1 2
.SWAP 3 4
.ENDS

Nodes 1 and 2 are class 1 terminals. Nodes 3 and 4 are class 2 terminals.

The following specification is illegal. The MOS element specification M1 is not recognized when you use .SWAP.

.SUBCKT A1 OUT I1 I2 I3
M1 OUT1 I1 I2 O N
*.NOPIN pin1 pin2
.SWAP I1 I2 I3
.ENDS

Examples: Multi-Level Swap

The circuits in the following examples use this .SUBCKT definition:

.SUBCKT SAMPLE A B C D E F G H I J K L

In the following example, pins A and B are not swappable. Pins C and D are not swappable. However, groups (A B) and (C D) are swappable. Pin A is at the same position as pin C, so they are swappable. Pins B and D are swappable.

CIR1:
.SWAP (p (f A B) (f C D))

In the following example, pins A and B are swappable, pins C and D are swappable, and groups (f (p A B) E) and (f (p C D) F) are swappable.

CIR2:
.SWAP (p (f (p A B) E) (f (p C D) F))

Subcircuit Calls

Xyyy name... {/} subname

Description

A description of the input and output pins of a circuit followed by the subcircuit name.

The .SUBCKT or .MACRO command begins a subcircuit call. The .ENDS or .EOM command ends a subcircuit call.

If the netlist file does not define the subcircuit, Dracula generates a warning message in the PRINT.OUT file that includes the cell name and its corresponding line number.

Arguments

Xyyy

The subcircuit call reference beginning with an X.

name

Lists the external reference node names. Dracula does not distinguish between input and output node names. Dracula refers to the names in the order you define in the subcircuit definition.

/

Indicates the end of the external node name specification.

subname

The subcircuit element name. If the original definition uses an extension, subname must include that extension. You do not need to define the subcircuit before listing it. LOGLVS accepts randomly ordered netlists.

Examples

The following example shows subcircuit definitions in a SPICE netlist file.

*.SPICE
.
.
.SUBCKT GRAYCODE  3  4  5  6  7  
.
.
X1    14    8    INV
X2    16    9    INV
.
.
.ENDS

The following netlist file has missing subcircuit definitions:

*.GLOBAL VDD
.SUBCKT sub0 o i
M1 I O VDD VDD P L=5 W=10
.ENDS
.SUBCKT sub1 ao1 ai1
M1 VDD Ao1 1 VDD P L=5 W=10
M2 VDD Ai1 1 VDD P L=5 W=10
.ENDS
.SUBCKT sub2 bo1 bi1
M3 1 bo1 PP VDD P L=5 W=10
M4 1 bi1 2 VDD P L=5 W=10
Xsub12 PP 2 /subxxxxx
.ENDS
.SUBCKT TOP t1 t2
Xsub1 T1 ii /sub1
Xsub98790 t2 ii /sub9999999
.ENDS

The PRINT.OUT file contains the following error messages:

*** ERROR: SUBCIRCUIT :SUBXXXXX     NOT DEFINED at LINE: 12
*** ERROR: SUBCIRCUIT :SUB9999999   NOT DEFINED at LINE: 16
1) *** UNDEFINED ELEMENT SUB9 : XSUB98790

Pin Count Discrepancies

If the pin count in the .SUBCKT call is different than the number of pins in the subcircuit, LOGLVS outputs the following error in the PRINT.OUT file:

** ERROR : DEVICE TYPE JKFF1/GA IS DEFINED WITH 7 PINS, NOT 8 PINS
** ERROR ** DEVICE TYPE : JKFF1 OF ELEMENT N1A IS NOT DEFINED

If you ignore this error message, LVS might fail in LVSCHM.

CDL Element Definition

The CDL defines the following elements:

To define these elements, CDL uses the formats described in this section. Dracula ignores other elements.

Capacitor Syntax

Cxxx npositive nminus {{mname} value} {/mname} {M=multiplier} {$[mname]} {$.MODEL=mname} {$SUB=substrate}
C= and AREA= parameters are not supported.

Arguments

Cxxx

    The capacitor element. Must begin with the letter C.

npositive

The positive terminal node number/name.

nminus

The negative terminal node number/name.

mname

Specifies the model name reference. The name must be one or two characters. If you want model/subtype checking, you must specify the mname in the CDL netlist and specify the ELEMENT CAP subtype option in your rules file.

value

The capacitance value or the area, depending upon *.CAPVAL or *.CAPAREA commands. Dracula does not check the value if this specification is missing.

multiplier

The number of elements expressed as an integer greater than or equal to one.

substrate

Specifies substrate terminal or node name.

If you require a polarity check, you cannot swap the npositive and nminus terminals with the ELEMENT CAP layer-b and layer-c. You must specify the LVSCHK[P] command in your rules file. If the CDL netlist contains capacitors to be checked by LVS, you might want to use the *.BIPOLAR command. From the 4.7 release, Dracula will support multiplier for Capacity. If you specify multiplier Capacity in the CDL netlist and do not want to check M-Factor in LVSCHK, the parameters of these devices will be recalculated so that the effective values will be processed in the LVS flow.

Example

C23  neta netb 3.5p M=2 $.MODEL=CX

Diode Syntax

Dxxx npositive nminus mname {area {periphery}} {AREA=area} {PJ=periphery} {M=multiplier} {$SUB=substrate}
AREA and PJ are read only when *.DIOAREA and *.DIOPERI keywords are used.

Arguments

Dxxx

The diode element name. Must begin with the letter D.

npositive

The positive terminal node number/name.

nminus

The negative terminal node number/name.

mname

The model name reference. The name must be one or two characters. For model/subtype checking, you must specify the mname in the CDL netlist and specify the ELEMENT DIO subtype option in your rules file. You cannot swap npositive and nminus terminals.

area

The diode area specification.

periphery

The periphery of junction.

multiplier

The number of elements expressed as an integer greater than or equal to one.

substrate

The substrate terminal or node name.

Note: If the CDL file contains diodes to be checked by LVS, you might want to use the *.BIPOLAR command. In the 4.7 release, Dracula will support multiplier for Diode. If you specify multiplier Diode in the CDL netlist and do not want to check M-Factor in LVSCHK, the parameters of these devices will be recalculated so that the effective values will be processed in the LVS flow.

Example

D100 net_plus net_minus DD

Resistor Syntax

Rxxx term1 term2 {{mname} value} {/mname} {M=multiplier} {{$}W=width} {{$}L=length} {$[mname]} {$.MODEL=mname} {$SUB=substrate}

Arguments

Rxxx

The resistor element name. Must begin with the letter R.

term1

The first terminal node number/name.

term2

The second terminal node number/mname.

mname

The model name reference. The name must be one or two characters. For model/subtype checking, you must specify the mname in the CDL netlist and specify the ELEMENT RES command with a subtype option in your rules file.

value

The resistance value or the size, depending upon *.RESVAL or *.RESSIZE commands. Dracula does not check the value if this specification is missing.

multiplier

The number of elements expressed as an integer greater than or equal to one.

width

The width of the resistor.

length

The length of the resistor.

substrate

The substrate terminal or node name.

If the CDL file contains resistors to be checked by LVS, you can use the *.BIPOLAR command. From the 4.7 release, Dracula will support multiplier for Resistor. If you specify multiplier Resistor in the CDL netlist and do not want to check M-Factor in LVSCHK, the parameters of these devices will be recalculated so that the effective values will be processed in the LVS flow.

Example

R11 net3 net7 5.9 M=3 $[RX]

Transistor (BJT) Syntax

Q{name} coll base emitter {nsub} {/}mname {M=multiplier} {$SUB=substrate} {$EA=value} {$L=length} {$W=width}
$EA value may be set using AREA parameter or inline when *.SPICE command is used:
Q{name} coll base emitter {nsub} {/}mname {{AREA=}value} {M=multiplier} {$SUB=substrate} {$EA=value} {$L=length} {$W=width}

Arguments

Qxxx

The BJT element name. Must begin with the letter Q.

coll

The collector terminal node name.

base

The base terminal node number/name.

emitter

The emitter terminal node number/name.

nsub

Substrate terminal node name or number.

mname

The model name reference. The name can be one or two characters.

multiplier

Specifies an integer greater than or equal to one. You must place multiplier in the description before you specify any value.

value

Specifies an emitter size, coded as a comment.

length

The length of the BJT.

width

The width of the BJT.

substrate

The substrate terminal or node name.

M-factor commands define multipliers globally. The information here lets you specifically define multipliers for different circuit elements. See Chapter 11, “Description Block Commands,” for information about M-factor commands.

Example

.PARAM
*.GLOBAL VCC VSS
*.BIPOLAR
.SUBCKT TOP A B AB
....
Q1 2 5 1 LP M=4 $EA=30 $W=10 $L=3
....
....
.ENDS

Transistor (JFET) Syntax

Jxxx drain gate source {/}mname {M=multiplier} {W=width} {L=length}

Arguments

Jxxx

The JFET element name. Must begin with the letter J.

drain

The drain terminal node number/name.

gate

The gate terminal node number/name.

source

The source terminal node number/name.

mname

The model name reference. The name can be one or two characters.

multiplier

Specifies an integer greater than or equal to one. You must place multiplier in the description before you specify any value.

width

The width. Width is a real number. Dracula does not check the width if it is not specified. W= is optional.

length

The length. Length is a real number. Dracula does not check the length if it is not specified. L= is optional.

You can specify the width and length with two real numbers following the model name. The first real number is width, the second number is length.
To use parameters as discussed in HSPICE format, use the .PARAM command.

M-factor commands define multipliers globally. The information here lets you specifically define multipliers for different circuit elements. See Chapter 11, “Description Block Commands,” for information about M-factor commands.

Example

J01  net0 net1 net  JP W=11 L=2

Transistor (MOSFET) Syntax

Mxxx drain gate source bulk {/}mname {width {length}} {W=width} {L=length} {M=multiplier} {$LDD[type]} {$NONSWAP}

Arguments

Mxxx

The MOSFET element name. It must begin with the letter M.

drain

The drain terminal node number/name.

gate

The gate terminal node number/name.

source

The source terminal node number/name.

bulk

The bulk terminal node number/name.

mname

The model name reference. Must be one or two characters.

multiplier

Specifies an integer greater than or equal to one. You must place multiplier in the description before you specify any value.

width

The optional width. Dracula does not check the width if this specification is missing.

length

The optional length. Dracula does not check the length if this specification is missing.

type

The LDD designator, specified as a comment. Declares that the source and drain terminals have different characteristics and cannot be swapped.

M-factor commands define multipliers globally, while the information here lets you specifically define multipliers for different circuit elements. For more information about M-factor commands, refer to Chapter 11, “Description Block Commands.”

Example 1

*.GLOBAL VCC VSS
*.BIPOLAR
.SUBCKT TOP A B AB
.....
M1 A B AB LP N M=4 W=10 L=3

Example 2

M1  A  B  VSS  N    LDD  L=2.0  W=10.0  $LDD[N] 

You can stop generating pseudo gates when running an LVS check by using model name type X-. Dracula prevents any model name (mname) with an X as its first character from forming pseudo gates. This lets LVS locally stop the formation of pseudo gates in the schematic and allows LVS checking of mixed analog and digital circuits. This special model type works with the ELEMENT MOS[X-] command.

CDL Macro Expansion

CDL has its own macro expansion capability. Although LOGLVS allows more than 30 levels of macro expansion, it stores element names up to 125 characters and truncates characters over the limit.

Dracula expands macros as follows. A .SUBCKT command defines element X00l as Box1. In Box1 there is another subcircuit called Box2 with the element name X002. In Box2 there is a third subcircuit called Box3 with the element name X003. The name of the transistor in Box3 is given in reverse order, from the lowest to the highest level:

J001X003X002X001 

In addition to the element name-- JXXX, MXXX, QXXX, or XYYY-- every node in the subcircuit definition has a node name or a node number. Dracula expands the node name differently. If the subcircuit is called A1 in the logic network, the name of node 1 inside Box 3 is given from the highest to the lowest level:

A1-X001-X002-X003-1 

This node name expansion is consistent with the name expansion in the logic network.

Macro Expansion

CDL File Example

Here is a partial example of a CDL file. Remember that in CDL you must list all four terminals (drain, gate, source, and body) when you define MOS devices.

*.GLOBAL VDD,VSS
*
* NA2
.SUBCKT NA2 Z / A B
* 2 INPUT NAND
*TRANSNAME DRAIN GATE SOURCE BODY MODEL
MP1 Z A VDD VDD P WP=12 LP=14
MP2 Z B VDD VDD P WP=12 LP=14
MN1 Z A 5 VSS N WN=12 LN=14
MN2 5 B VSS VSS N WN=12 LN=14
.ENDS NA2
*
*
* NA3
.SUBCKT NA3 Z / A B C
* 3 INPUT NAND
MP1 Z A VDD VDD P
MP2 Z B VDD VDD P
MP3 Z C VDD VDD P
MN1 Z A 6 VSS N
MN2 6 B 7 VSS N
MN3 7 C VSS VSS N
.ENDS NA3
*
*
* NA4
.SUBCKT NA4 Z / A B C D
* 4 INPUT NAND
MP1 Z A VDD VDD P
MP2 Z B VDD VDD P
MP3 Z C VDD VDD P
MP4 Z D VDD VDD P
MN1 Z A 7 VSS N
MN2 7 B 8 VSS N
MN3 8 C 9 VSS N
MN4 9 D VSS VSS N
.ENDS NA4
* NOR
.SUBCKT NOR Z / A B
* 2 INPUT NOR
MP1 5 B VDD VDD P WP=22 LP=24
MP2 Z A 5 VDD P WP=22 LP=24
MN1 Z A VSS VSS N WN=12 LN=14
MN2 Z B VSS VSS N WN=12 LN=14
.ENDS NOR
*
* IV
.SUBCKT INV Z / A
* INVERTER
MP1 Z A VDD VDD P WP=12 LP=14
MN1 Z A VSS VSS N WN=12 LN=14
.ENDS INV
*
.SUBCKT JKFF1 Q QN / CL J K S R
MP1 6 CL VDD VDD P WP=12 LP=14
MN2 6 CL VSS VSS N WN=12 LN=14
MP3 5 6 VDD VDD P WP=12 LP=14
MN4 5 6 VSS VSS N WN=12 LN=14
MP5 9 6 7 VDD P WP=12 LP=14
MN6 9 5 7 VSS N WN=12 LN=14
MP7 44 5 7 VDD P WP=12 LP=14
MN8 44 6 7 VSS N WN=12 LN=14
MP9 8 7 VDD VDD P WP=12 LP=14
MP27 8 R VDD VDD P WP=12 LP=14
MN10 8 7 17 VSS N WN=12 LN=14
MN28 17 R VSS VSS N WN=12 LN=14
MP11 9 8 VDD VDD P WP=12 LP=14
MN12 9 8 10 VSS N WN=12 LN=14
MP13 9 S VDD VDD P WP=12 LP=14
MN14 10 S VSS VSS N WN=12 LN=14
MP15 QN 5 11 VDD P WP=12 LP=14
MN16 QN 6 11 VSS N WN=12 LN=14
MP17 8 6 11 VDD P WP=12 LP=14
MN18 8 5 11 VSS N WN=12 LN=14
MP19 Q 11 VDD VDD P WP=12 LP=14
MN20 Q 11 13 VSS N WN=12 LN=14
MP21 Q S VDD VDD P WP=12 LP=14
MN22 13 S VSS VSS N WN=12 LN=14
MP23 QN Q VDD VDD P WP=12 LP=14
MP25 QN R VDD VDD P WP=12 LP=14
MN24 QN Q 18 VSS N WN=12 LN=14
MN26 18 R VSS VSS N WN=12 LN=14
MP37 39 J VDD VDD P WP=12 LP=14
MP38 39 QN VDD VDD P WP=12 LP=14
MP39 44 39 VDD VDD P WP=12 LP=14
MP40 43 QN VDD VDD P WP=12 LP=14
MP41 44 K 43 VDD P WP=12 LP=14
MN42 39 QN 42 VSS N WN=12 LN=14
MN43 42 J VSS VSS N WN=12 LN=14
MN44 44 39 45 VSS N WN=12 LN=14
MN45 45 QN VSS VSS N WN=12 LN=14
MN46 45 K VSS VSS N WN=12 LN=14
.ENDS JKFF1
*

Preparing Data Files

This section explains how to use the following data formats to describe your network:

Preparing SPICE Files

To use the original SPICE data (no logic-level description) to run LVS, follow these guidelines:

SPICE File Example

The .GLOBAL command declares power and ground nodes.

The .SPICE command indicates that this is a pure SPICE file and nodes can only be represented by a number. Use the .EQUIV command to assign a name to a node number.

The power node must be VCC or VDD. A ground node can be either VSS or GND. Nodes on the I/O listing of a .SUBCKT command are used as initial correspondence nodes.

NETLIST FOR GRAYCODE IN SPICE
*FILE NAME = GRAYCODE.SPI
*.SPICE
.GLOBAL 1 0
*.EQUIV Q1B=3 Q2B=4 Q3B=5 Q4B=6 CO=7
*+CA=8 MC1=9 SCT1=10 SCT2=11 SCT3=12 *+SCT4=13
.SUBCKT GRAYCODE 3 4 5 6 7
+8 9 10 11 12 13
X1 14 8 INV
X2 16 9 INV
XN1A 17 3 14 1 1 17 16 JKFF1
X3 17 10 INV
X4 18 11 INV
XN1B 19 4 14 17 17 18 16 JKFF1
X5 20 17 19 NA2
X6 21 20 INV
XR1A 22 5 14 21 21 23 16 JKFF1
X7 23 12 INV
X8 24 17 19 22 NA3
X9 25 24 INV
XR1B 26 6 14 25 25 27 16 JKFF1
XGH3D 27 13 INV
XTU2 28 17 19 22 26 NA4
X10 29 28 8 NOR
XRS2C 7 29 INV
.ENDS

Preparing Verilog Files

LOGLVS does not read Verilog directly (obsolete VER command is disabled). LOGLVS can read CIR (Common Interface Representation data) format produced by VAN (Verilog analyzer) program. An example of preparing CIR data:

  1. Create a directory for a library (mkdir <lib_name>):
    $ mkdir mylib
  2. Create or edit the cds.lib file to add the new library: ("DEFINE <lib_name> <lib_dir_name>")
    DEFINE mylib ./mylib
  3. Run VAN to create the design library: (van -lib <lib_name> <verilog_netlist>)
    $ van -notienamed -lib mylib ../top.v

The following is an example of running LOGLVS ("NVER <lib_name> <top_cell>"):

:case 
:cir sub.cdl /* CDL/SPICE netlist files should be imported first */
:nver mylib top /* Verilog netlist files
:con
:x

For composite mode, the command script is as follows:

:case 
:cell/bbox cell.tab /* Use the box option for composite mode jobs */
:cir sub.cdl /* CDL/SPICE netlist files should be imported first */
:nver mylib top /* Verilog netlist files */
:con
:x
VAN is case sensitive by default. You should either use the -caseinsensitive option of VAN, or use the CASE command of LOGLVS and names in netlists should correspond considering case. Specify the CASE command prior to lines that affect parsing.

When running a Verilog netlist in LOGLVS, you must supply a SPICE or CDL netlist with the Verilog file even if the Verilog netlist has transistor-level definitions. The SPICE or CDL netlist supplies the p-transistor and n-transistor level definitions. When preparing your Verilog files, take the following precautions:

For example, if the Verilog file is

FF2 A1 (Q1,Q2,I1,I2,I3)

the subcircuit definition is

.SUBCKT FF2 Q QB R S C 
.....
.ENDS

The results include the following connections:

Q1 to Q
Q2 to QB
I1 to R
I2 to S
I3 to C

If you specify pin names, LOGLVS checks that the pin names match between the Verilog description and the CDL or SPICE description. For example,

FF2 A1 (.Q(Q1),.QB(Q2),.C(I3),.R(I1),.S(I2));

Regardless of the sequence you define in the subcircuit, the connections are the same as in the Verilog file.

By default, VAN maps all power definitions to a global signal "tie1" and all ground definitions to a global signal "tie0".

If there is only one power/ground pair, VAN can be used in this mode. To get the correct connectivity, these signals need to be assigned to the corresponding Verilog names using *.EQUIV command:

*.GLOBAL VSS VDD $ CDL globals
*.GLOBAL tie0:G tie1:P $ true Verilog globals
*.EQUIV VSS=tie0 VDD=tie1 $ equating globals

To process a netlist with multiple power/ground signals, run VAN with the -notienamed option:

van -lib <lib_name> -notienamed <verilog_netlist>
When -notienamed is specified, VAN treats all supply signals as internal wires. To make LOGLVS treat these signals as global signals, they must be defined in CDL as global by *.GLOBAL command:
*.GLOBAL VSS VDD1 VDD2

Nets assigned to 1’b0 and 1’b1 will be tied to global nets "tie0" and "tie1" even when the -notienamed option is used:

module top ;
wire a, b ;
bufd1 I0 ( .A(1’b1), .X(a) );
bufd1 I1 ( .A(1’b0), .X(b) );
endmodule

These global signals must still be reassigned by *.EQUIV command to the corresponding global node names.

Limitations:

Running LOGLVS

The Network Compiler, LOGLVS, runs interactively to compile schematic netlist data and combine it with circuit description data to create a transistor-level network description that Dracula can use for LVS comparison.

After loading both the schematic netlist and the circuit description files on the system, you are ready to run LOGLVS. To start running LOGLVS, type

LOGLVS

During a LOGLVS run, you can use the commands described in this section to control the run. You need to type only the first three characters of the command. You can type a maximum of 128 characters on each command line.

When LOGLVS finishes, it returns one of the following three status codes in the PRINT.OUT file:

0   no errors or warnings
1 warnings, but no errors
2   errors

If you want the status code to appear on the screen, use the following script:

LOGLVS <<!
lib ecad.teg
cir ecad.cir
link
con
exit
!
set $status2 = $status
if ($status2 = 1) then
echo "LOGLVS WARNING ****** exit $status2 ******"
elseif ($status2 = 2) then
echo "LOGLVS ERROR ****** exit $status2 ******"
exit
endif

CASE

CASE

Description

Turns on case sensitivity for the netlist processing.

By default, Dracula converts all input files to uppercase before processing.

CELL

CELL{/option} filename... {1}

Description

Identifies the file that specifies Hcells. This file must contain the Hcell subcircuit names as well as the Hcell layout cell names. See the HCELL-FILE command description in Chapter 11, “Description Block Commands,” for information on this file.

The CELL command works only in the hierarchical modes; it does not work in flat mode.

Arguments

option

Directs the command output. Type one of the following:

/print

Directs output to the PRINT.OUT file.

/type

Directs output to the terminal, assuming that the terminal defaults to file unit 6.

/store

Directs output to the IMAGE.LIS file.

/auto

Automatically updates Hcell table files. If Hcells do not have a placement number and are not found in the logic-level or circuit files, the Hcell table files are added with a semicolon (;) comment character in column 1.

/bbox

Ignores netlist statements for all Hcells when compiling the LOGLVS netlist. Use this option for composite mode only.

LOGLVS still supports the /box option, which is compatible with the previous versions of Dracula.

filename

Names of files containing Hcell table files. Each file name can have up to 80 characters, including the full path name.

1

    Indicates that the first cell is to be considered a schematic cell name. You must include the “1” to compile a netlist that will be treated as the layout netlist in a Schematic Versus Schematic (SVS) check in either cell or composite mode.

Examples

In the following example, LOGLVS reads in Hcells from three files: file-1, file-2, and file-3.

CELL/type file-1 file-2 file-3
CELL hcell.tab 1

Dracula treats the first cell listed in HCELL.TAB as a schematic cell and performs an SVS check.

cell/bbox   hcell.tab
cir files
con cell-name
x

Dracula drops the netlist statements from all Hcells.

CIRCUIT

CIRCUIT{/option} filename...

Description

Reads the circuit library file. The CIRCUIT command also compiles SPICE data files.

LOGLVS accepts circuit files in random .SUBCKT order.

Arguments

option

Directs the command output. Type one of the following:

/print

Directs output to the PRINT.OUT file.

/type

Directs output to the terminal, assuming that the terminal defaults to file unit 6.

/store

Directs output to the IMAGE.LIS file.

/nodrop

Does not drop any devices that do not have I/O pins. This option applies to all netlists compiled with the CIRCUIT command from the point you specify nodrop.

filename

Names of files containing the circuit library. If a subcircuit is defined twice, the second subcircuit definition overrides the first. Each file name can have up to 32 characters.

CONVERT

CONVERT{/option}/notop {cellname} 

Description

Converts the logic network data into LVS format and saves it to disk. LOGLVS compares the elements in the logic schematic with the elements defined in the circuit library. If the names, extensions, and I/O counts match, LOGLVS expands the logic elements into transistors. After it checks and expands all logic elements in the schematic, it creates the LVSLOGIC.DAT file.

Arguments

option

Directs the command output. Type one of the following:

/print

Directs output to the PRINT.OUT file.

/type

Directs output to the terminal, assuming that the terminal defaults to file unit 6.

The default is one output file, LVSLOGIC.DAT.

notop

    Specify this option in Cell mode to specify there is no top-level .SUBCKT. You use this option when verifying a standard library of cells that you have not yet placed in a design hierarchy.

cellname

The name of the top level subcircuit or macro to be converted. Use this option only when you use a SPICE data file with no logic network. When the cell name is absent, the logic network is converted.

DATAFORMAT

DATAFORMAT 4.2/ZLIB { LEVEL }

Description

Turns on the database compression algorithm. Dracula can take D3, 4.2, and ZLIB input files for the same module. D3 is the default.

You must also specify this command in the Description block for LVS and non-LVS jobs.

Arguments

4.2

Database compression algorithm introduced in Dracula 4.2.

ZLIB

Zlib database compression algorithm. It has about 2 times better data compression ratio compared to 4.2 and up to 6 times better compared to the default compression method, depending on the testcase.

LEVEL

Zlib compression level. Set this value between 1 and 9. 9. 9.9 is the maximum compression ratio and has less performance. 1 is the minimum compression ratio and has more performance. The default value is 6.

The LOGLVS data compression algorithm is defined for LOGLVS output only and has no effect on jxrun.com run.

Example

DATAFORMAT = ZLIB

DELCKT

DELCKT filename

Description

Specifies that LOGLVS drops the .SUBCKT names you specify, whether the .SUBCKT is empty or not. LOGLVS does not create box elements for an empty .SUBCKT.

Argument

filename

Specifies the .SUBCKT names to delete.

Example

delckt delcel.tab
cir cdl
con top
x

The delcel.tab file looks like this.

tlow23   ---> subckt name to be dropped.

DELECEL

DELECEL filename

Description

Removes logic gates in logic netlists such as Verilog. The file format is as follows:

Argument

filename

Specifies the gates and/or cells to delete in the file hierarchy.

Example

N =  ANITA/TPC/DC_10 T = AN4
N = ANITA/TPC/FD_10 T = FDN2P
N = ANITA/INR/IPO_1 T = IV
N = XX3939 T = BUF8A
N = XX3945 T = BUF8A
N = XX3943 T = BUF8A
N =  XX3941 T = BUF8A

DEVMAP

DEVMAP filename

Description

Reads the device map file for instance primitive devices.

Argument

filename

A user-defined text file.

Each line in the map file contains the following mapping information:

Given below is the syntax for each line in the map file.

subckt_name=primitive_device, {MODEL=layout_subtype,} {PARAMETER=
{user_defined_name1/pre-defined_parametername1,user_defined_name2/pre-defined_parameter_name2, ... user_defined_nameN/pre-defined_parameternameN }

Where the names of the pre-defined parameters for the primitive devices are:

For MOS:   M  W  L
For BJT: M W L EA
For RES: M W L VRV (value) SRV (size)
For CAP: M VCV (value) ACA (area)
For DIO:   M  DA (area) JPERI (periphery)

Example

Here’s a netlist with two instance primitive devices nmos_rf33 and pmos_rf33.

.GLOBAL vss vdd
*.EQUIV N=nmos_rf33 P=pmos_rf33
.subckt nmos_rf33 d g s b
.ends nmos_rf33
.subckt pmos_rf33 d g s b
.ends pmos_rf33
.subckt inv in out vdd vss
XMP0 out in vdd vdd pmos_rf33 lr=0.35u nr=32 wr=2.5u
XMN0  out in vss vss   nmos_rf33 lr=0.30u nr=32 wr=2.5u
.ends inv 

Given below is an example of the device map file for this netlist.

nmos_rf33=MOS, MODEL=N1, PARAMETER=lr/L, nr/M, wr/W
pmos_rf33=MOS, PARAMETER=lr/L, nr/M, wr/W

In the device map file, nmos_rf33 and pmos_rf33 are both MOS devices. The corresponding layout element subtype for nmos_rf33 is N1 which overwrites the subtype N defined by *.EQUIV in the netlist. The corresponding element subtype for pmos_rf33 is P as specified by *.EQUIV. The parameter lr means MOS channel length (lr/L), wr means channel width (wr/W) and nr is m-factor(nr/M).

You need to provide this mapping information and the LVS comparison on instances of these instance devices are the same as the LVS comparison on conventional MOS devices.

You must use this command before any parse command.

DXF

DXF

Description

Generates a cross reference file, EXPELE.LIS, which contains device numbers followed by the full path name for that device.

You must use this command before inputting logic or circuit-level files.

ENV

ENV new_number

Description

Increases the user-defined module name from the default of 1847 to a new value greater than or equal to the new number. The maximum number you can set has been increased from 10,000 to 30,000.

Arguments

new_number

    Number of modules you can set.

Example

ENV 30000

EQUIV

EQUIV new-name = old-name
EQUIV new-model = old-model

Description

The EQUIV command works in one of three ways:

Arguments

new-name

Layout text.

old-name

Schematic node name or SPICE or CDL node number.

new-model

Element subtype.

old-model

SPICE/CDL model name.

Example

In this version and subsequent versions, you can use the .EQUIV command (from CDL) also as a LOGLVS command and it works similar to the GLOBAL command.

EQUIV VDD=TIE1 GND=TIE2
EQUIV VDD=TIE3 GND=TIE4
cir cdl
You do not have to edit your netlist when you use this command in this way, but you have to limit your command length by 78 characters. So when you use EQUIV as a LOGLVS command, the LOGLVS program overrides subsequent *.EQUIV statements in your CDL files without changing the statements.

EXIT

EXIT/X

Description

Stops the LOGLVS program. LOGLVS recognizes both EXIT and X.

When LOGLVS finishes, it returns one of the following three status codes in the PRINT.OUT file:

0   No errors or warnings
1 Warnings, but no errors
2   Errors

Example

The following is a C-shell example:

LOGLVS <<!
lib ecad.teg
cir ecad.cir
link
con
x
!
If ($status ! = 0 ) exit 1

FDELIMITER

*.FDELIMITER string

Description

Specifies delimiter characters for feedthrough pin names on the layout text. This function lets you specify separate feedthrough pin names on the layout and prevents Dracula from shorting all feedthrough pins. You can use *.FDELIMITER only in flat mode. You must specify all feedthrough pin names in the CDL netlist file at the .SUBCKT statement. Specify the *.FDELIMITER command before the input netlist. LOGLVS generates a SCHFPIN.DAT file containing the feedthrough pin information.

When running PRE, the feedthrough pin text must be on the pad layer.

Argument

string

One to four characters. The string cannot contain a space, a colon (:), a semicolon (;), or a question mark (?). If you specify a string longer than four characters, Dracula reports an error.

Example

In the following example, all pins with prefix Z@@10 are shorted together. The resultant pin name is Z@@10.

LOGLVS !<<
FDELIMITER &&
CIR CDL.netlist
CON TOP
X
!
.SUBCKT TOP OUT Z@@10&&86  Z@@10&&87  Z@@13&&88  Z@@13&&89 IP
...

FPIN

FPIN 

Description

Turns on the insertion of missing floating pins in instances when compiling Verilog netlist. The FPIN command is recommended whenever connection by explicit pin name is used in Verilog.

When using connections by explicit pin name in Verilog, an instance pin can be missing if it is floating. For example, in the following module, BUF has pins I1, I2, and 0. When placed in another module, the I1 pin is floating. The Verilog statement looks like this:

BUF X1 ( .I2(NET1), .O(NET2) );  /* instance pin I1 is
floating */
BUF X2 ( .I2(NET2), .O(SET), .I1(TET) )

To ensure the correct connection, use the FPIN command to enable the automatic floating node insertion function.

Use the following command sequence when you use the FPIN command:

  1. Issue the FPIN command.
  2. Compile the CDL or SPICE netlist.
  3. Compile the Verilog netlist.

GENPAD

GENPAD

Description

Generates a special internal schematic initial correspondence file, 6GPADS.DAT, which forces the LVS REDUCE module to use only names that are in both 6PADL.DAT and 6GPADS.DAT. This eliminates additional layout text that would cause REDUCE to form devices differently than the schematic side.

Use GENPAD before using the CONVERT command.

GET

GET data

Description

Retrieves circuit library data or logic network data from disk files created by the SAVE command.

Arguments

data

One of the following three values:

all

Restores both circuit library and logic network data.

circuit

Restores only circuit library data.

logic

Restores only logic network data.

GLOBAL

GLOBAL name1[:[P|G]]  name2[:[P|G]]  ...  nameN[:[P|G]]
GLOBAL pfx1*[:[P|G]]  pfx2*[:[P|G]]  ...  pfxN*[:[P|G]]

Description

Lets you specify power and ground nodes in LOGLVS.

The GLOBAL command accepts multiple usage. All GLOBAL commands are merged into a big *.GLOBAL command internally. The big internal *.GLOBAL command cannot be longer than 1280 characters.

Arguments

name

Specifies a list of global node names. The names that appear here must be the node names in the logic network.

:P/G

You can assign a pad type to a global name by adding :P or :G to the name. P stands for power, and G stands for ground.

The pad type must always attach to a global name or number even though this global name or number is later replaced by a new name with an *.EQUIV command.

Example

POWER-NODE=Vdd* Vcc*
GROUND-NODE=Gnd* Vss*

HELP

HELP command

Description

Displays information on your screen about a specified command.

The HELP command might not display the most recent information about commands.

Arguments

command

The name of a LOGLVS command. You can abbreviate the command name to its first three letters. The commands for which you can get help are

CIRCUIT CONVERT COMMAND-FORM EXIT GET INPUT LIBRARY LINK NET PRINT RESET SAVE STORE TYPE

You must set the DRACHELP4 environment variable to the directory where the LOGLVS.HLP file is located (path/etc/drac_help/).

HTV/DRE

HTV or DRE

Description

Generates files Dracula Interactive LVS needs for cross-probing.

You must use this command before you input logic or circuit-level files.

KCELL

KCELL <kcell_filename>

Description

Keeps cell texts in flat mode to improve LVSCHM performance.

Until the 4.8 release, Dracula kept only the top cell pin texts, but ignored all the pin texts of the cells below the top. This created two problems. The first problem being that without the information of the cell pin text, some of the parallel groups could be matched falsely. Secondly, without the cell pin text, the parallel groups tended to be bigger and slowed down the performance because breaking up of the parallel groups is costly.

In the 4.8 release, this new feature keeps the cell pin text in flat mode LVS thus eliminating false errors and improving performance. This feature is applicable to the flat mode only.

Arguments

kcell_filename

Specifies the name of the file containing the Kcell name tables

Example

KCELL ../myKcell.tab
CIR ../netlist.cdl
CON adder

KFPIN

KFPIN 

Description

Suppresses the filtering of floating nodes in cell instances when running in composite mode. By default, Dracula assigns a floating pin on an HCELL instance a node number of zero. To maintain the original floating node number, you must specify the KFPIN command. When you specify the KFPIN command, LOGLVS assigns non-zero node numbers to the floating pins.

See also the KEEP-INST-FPIN command in Chapter 11 of this manual.

Example

Sample command script:

LOGLVS <<!
KFPIN ;Suppress the filtering of floating
CELL HCELL.TAB ;nodes in cell instances.
CIR lib.cdl
LIB gray.teg
LINK
CONV
X
!

LINK

LINK {top-module-name}

Description

Links and expands the library data into a logic network.

Arguments

top-module-name

You must specify a top module name if you are using a Verilog netlist file.

MOS_EXTENDED_REP

MOS_EXTENDED_REP

Description

Disables the MOS/LDD M-factor/width adjustment.

By default, LOGLVS stores M-factor and width combined in one record. If the M-factor or width values are big enough to be stored unmodified, LOGLVS tries to recalculate their values accordingly and accuracy may be lost. For example, LOGLVS adjusts MOS/LDD M-factor to M=250 (and sets the width accordingly) if it encounters a MOS/LDD value of M>511. In some cases this situation is critical for LVS comparison.

This command must be used before the CONVERT command.

NO_WARNING

NO_WARNING {argument}

Description

Turns off the warnings from LOGLVS on ERC-type checks of the CDL netlist. The error messages are still printed.

To suppress warning messages about non-global names that are "re-equived" by the EQUIV command, specify the EQUIV_CHK argument.

Use NO_WARNING before the CIRCUIT command.

Arguments

EQUIV_CHK

Suppresses the warning messages from LOGLVS on non-global names which are "re-equived", for example *.EQUIV P=pch P=p5v. Otherwise, LOGLVS issues the following warning:

*** WARNING: <...> IS NOT A GLOBAL NAME. IT IS "REEQUIVED" AT LINE xx. IF IT IS A NET NAME, EQUIV WILL CREATE DIFFERENT NETS WITH THIS NAME***

NVER

NVER {/KEEP_BSLASH} library_name top_cell_name

Description

Used to parse Verilog netlists. NVER reads Common Interface Representation (CIR) generated by VAN instead of reading netlists directly.

You do not need to run the LINK command after using NVER.

Arguments

/KEEP_BSLASH

    Prevents Dracula from removing the leading backslash character (‘\’) from Verilog node names.

library_name

    User-specified library name. If you do not specify a library name, LOGLVS uses the default name.

top_cell_name

    User-defined cell name.

mylib

The default library name. If there are only two arguments, LOGLVS assumes mylib to be the default and uses the second argument as top_cell_name. LOGLVS also issues the following warning:
Library name missing. Assuming mylib.

If mylib is the library name, LOGLVS continues after the warning. However, if mylib is not the library name, after the warning LOGLVS issues the following message and stops: Architecture not found in your design library.

Example

case
cir data_mux.cir
nver /KEEP_BSLASH lib_name bad_module
con/print bad_module
x

PRECISION

PRECISION #

Description

Lets you establish the precision by which to specify device parameters. The LVS precision cannot be better than LOGLVS.

Processes device parameters in .001 PRECISION for PRECISION 3, and .0001 for PRECISION 4.

Outputs of this command such as LVSLOGIC.DAT can only be used by versions 4.7 or later. PRECISION 4 is only supported in the June 2005 release and later releases. You should run PDRACULA after LOGLVS., then the PRECISION value can be passed to LVS comparison when you use this command.

Arguments

#

Number of significant digits (2~4) after the decimal point. The   default is 2. The total number of digits before the decimal point and after the decimal point cannot be larger than 6. In other cases Dracula does not guarantee precision for extra digit.

Precision in the DracToRCX Flow

In the case of the DracToRCX flow, the PRECISION command is not directly supported, but instead must be defined using an environment variable:

PRINT

PRINT lib

Description

Directs LOGLVS output to a printer.

Arguments

lib

One of the following values:

CIRCUIT

Acts on a circuit library.

LOGIC

Acts on the logic network.

RESET

RESET data

Description

Resets the circuit library data, logic network data, or the logic library data.

Arguments

data

One of the following values:

all

Resets both circuit library data and logic network data.

circuit

Resets only circuit library data.

logic

Resets only logic data.

RESISTOR

RESISTOR value 

Description

Presets the resistor numbers. LOGLVS obtains swap spaces according to this resistor number.

Argument

value

The maximum number of resistors allowed in the circuit. The default is 10,000. If the resistor number is less than the default, the specified number is ignored.

This command automatically restarts LOGLVS without any warning.

SAVE

SAVE data

Description

Saves the circuit library data or the logic library data files in program-assigned files. The SAVE command provides a reference file for LPEPRO. If you do not plan to run LPEPRO, you do not need to use SAVE.

Arguments

data

Contains one of the following three values:

ALL

Saves both circuit library and logic network data.

CIRCUIT

Saves only circuit library data.

LOGIC

Saves only logic data network. You must issue the SAVE LOGIC command before the CONVERT command.

SET FANIN

SET FANIN value

Description

Specifies the maximum fan-in that an instance can have. If the value that you specify is bigger than the current, Dracula uses as the new value the closest power of 2 that is bigger than the specified value or equal to the specified value. Currently fan-in cannot be set bigger than 2^21 (2097152). The larger the fan-in limit is, the lower the fan-out limit is.

Argument

value

Sets the fan-in value. The default is 215 (32768).

Example

In the following example, the fan-in value is changed to 219 (524,288):

: SET FANIN 300000
*/W* SET MAX FAN-OUT=      4096 MAX FAN-IN=    524288

In the next example, the fan-in value is not changed, because it is not bigger than the default value:

: SET FANIN 30000

SET FANOUT

SET FANOUT value

Description

Specifies the maximum fan-out that an instance can have. If the value that you specify is bigger than the current, Dracula uses the closest power of 2 that is bigger than the specified value or equal to the specified value as the new value. Currently fan-out cannot be set bigger than 2^20 (1048576). The larger the fan-out limit is, the lower the fan-in limit is.

Argument

value

Sets the fan-out value. The default is 216 (65536).

Example

In the following example, the fan-out value is changed to 218 (262,144):

: SET FANOUT 200000
*/W* SET MAX FAN-OUT=    262144 MAX FAN-IN=      8192

In the next example, the fan-out value is not changed, because it is not bigger than the default value:

: SET FANOUT 20000

STOP

STOP {ON} [ ERRORS | WARNINGS | NOTHING ]

Description

This command is provided to better manage running LOGLVS from batch scripts. When new errors or warnings are found, LOGLVS will stop execution and prompt the user if it is “OK” to continue before proceeding. If the user does not specify “OK”, LOGLVS will exit.

Argument

{ON}

    Optional Keyword used only to clarify the purpose of the command. Stop upon finding errors or warnings or nothing.

ERRORS

Stop execution and wait for user input after new errors, but not after new warnings.

WARNINGS

Stop execution and wait for user input after either new errors or new warnings.

NOTHING

Do not stop execution. This is the default value.

Example

LOGLVS << ! > loglvs.log
STOP ON WARNINGS
cir a.cdl
...

STORE

STORE lib

Description

Stores LOGLVS output in a file, or the circuit library.

Arguments

lib

One of the following values:

CIRCUIT

Acts on a circuit library.

LOGIC

Acts on the logic network.

SUMMARY

SUMMARY 

Description

Generates a summary of devices according to the device types and subtypes. Use SUMMARY after the CONVERT command.

TNAME

TNAME

Description

Lets you use top-level names as internal wires in the top cell when your design is composed of Verilog and CDL netlists. If you do not specify this command, LOGLVS does not use the top-level names for internal wires.

TRANSISTOR

TRANSISTOR value 

Description

Presets the transistor numbers. LOGLVS obtains swap spaces according to this transistor number. In order for this command to be effective, you must specify it first in the rules file.

Arguments

value

The number of transistors needed by the circuit. The default is 100,000. If the transistor number you specify is smaller than the default, this value is ignored.

This command automatically restarts LOGLVS without any warning.

TYPE

TYPE lib

Description

Directs LOGLVS output to the terminal.

Arguments

lib

One of the following values:

CIRCUIT

Acts on a circuit library.

LOGIC

Acts on the logic network.

UNLIMIT

UNLIMIT 

Description

This command is no longer supported. By default, LOGLVS creates a cross reference file, CROSREF.LIS, for long texts and their encoded string. If the net names or cell names are long, CROSREF.LIS contains name mapping information. The CROSREF.LIS file is sorted and each entry appears only once.

The PRINT.OUT file no longer contains the cross reference list. A message appears in the PRINT.OUT file referring you to the CROSREF.LIS file for cross reference information.

Example

The following example shows what the cross-reference pair in the CROSREF.LIS file looks like.

*1   = longStringLongerThan12Chars
*2 = Xlevel1InTopCell
*3   = MDeletionDv201

Shell Environment Variables Used By LOGLVS

The following shell environment variables can be set to control specific processes in LOGLVS:

LOGLVS Example

Start LOGLVS by typing

LOGLVS 

Dracula displays the following:

*******************************************************************************
*/N*  LOGLVS   (REV. 4.9.06-2008         / LINUX         /GENDATE: xx-JUN/2008)
                   *** ( Copyright 2008, Cadence ) ***
*/N*  EXEC TIME = 17:17:40    DATE = xx-JUN-2008   HOSTNAME =  mos102
**************************************************************************
current xtrs estimate:       200000
  DRACULA NETWORK COMPILER (LOGLVS) PROGRAM BEGINS ..
                 **** COMMANDS SUMMARY ****
         ---- COMPILE H-CELL TABLE FILE FIRST, -------
         ---- THEN SPICE FILE ----
  1) DATAFORMAT [ZLIB [#]] : Output Compressed DataBase Format
  2) TRANSISTOR # : pre-allocate virtual memory
  3) HTV or DRE   : generate draculaInteractive files
     DXF          : generate EXPELE.LIS/EXPELE.CEL
  4) CASE         : turn case sensitive on
  5) NO_WARNING   : turn connection checking off
  6) GLOBAL       : define global node names
  7) PRECISION #  : set # of dev parameter decimal points
  8) CEL filename : compile H-CELL table file
  CEL/AUTO fn  : AUTO CELL selection
  CEL/BBOX fn  : HCELL becomes an empty SUBCKT (Blackbox) SPICE/CDL only
  9) SET FANIN #  : set maximum # of input pins
 10) SET FANOUT # : set maximum # of output pins
 11) ENVI #       : set max. # of user defined cells/names (>2047)
 12) CIR filename : compile SPICE/CDL netlist file
 13) NVER libname cellname : read EDB compiled by VAN
 14) LINK         : expand logic network
 15) GENPAD       : generate 6GPADS.DAT file
 16) CON          : convert LOGIC NETWORK into XTR file
     CON cellname : convert TOP CELL into XTR file
     CON/NOTOP    : convert CELL into XTR file for DRAC3
                                                       
 17) SUMMARY      : print ELEMENT summary by types
 18) EXIT/X/x     : EXIT
  ENTER COMMAND 
 :

Using Hierarchical LOGLVS

When running LOGLVS for an HLVS run, you must first use the CELL command to input the Hcell file.

When you run hierarchical LOGLVS, a menu of commands appears on the screen. You can use the following commands with hierarchical LOGLVS. The “Running LOGLVS” section describes them in detail.

CASE
CELL
CIRCUIT
CONVERT
EXIT
INPUT
LIBRARY
LINK
NVER

The following examples show how to run hierarchical LOGLVS.

SPICE Examples

Flat mode

:CIR file-a   ; Specifies CDL file.
:CON cell-name
:X

Cell mode

:CEL cell.tab
:CIR file-a ; Specifies CDL file.
:CON/NOTOP ; Indicates that file-a lists
; no top level circuits. This is optional.
:X

Composite mode

:CEL/bbox cell.tab
:CIR file-a ; Specifies CDL file.
:CON cell-name
:X

VERILOG Examples

Flat mode

:CIR file-b                   ; Specifies CDL file.
:NVER library top_cell ; Specifies Library and top_cell.
:CON ; As in flat mode Dracula.
:X

Cell mode

:CEL cell.tab                 ; cell.tab describes Hcells.
:CIR file-b ; Specifies CDL file.
:NVER library top_cell ; Specifies Library and top_cell.
:CON ; As in flat mode Dracula.
:X

Composite mode

:CEL/bbox cell.tab            ; cell.tab describes Hcells.
:CIR file-b ; Specifies CDL file.
:NVER library top_cell ; Specifies Library and top_cell.
:CON ; As in flat mode Dracula.
:X

CDL and SPICE Formats

You can use a SPICE netlist for running cell mode and composite mode HLVS. The first character of each text item on the layout must be an alphabetic character. Because true SPICE format allows only numbers to specify nodes, use a CDL netlist containing names to identify nodes.

You can use the following commands in the CDL or SPICE subcircuit file:

*.PIN VDD VSS .... etc

Place the *.PIN command at the top of the CDL or SPICE subcircuit netlist to indicate that these global I/O terminals exist for each subcircuit.

If the *.PIN command for an HLVS netlist is missing from the CDL or SPICE file, LOGLVS issues a warning. LOGLVS also issues a warning if there are any unused outputs in a .SUBCKT command that contain multiple outputs. Here is an example:

.SUBCKT dff q qbar in clk clkbar set reset

If q is not used in the schematic netlist, Dracula issues a warning that q is used only once in the netlist.

*.NOPIN pin1 pin2 .... etc

This *.NOPIN command overrides the designation of the *.PIN command and specifies that these global I/O terminals are not part of this specific Hcell subcircuit.

HLVS accepts a true SPICE netlist. LOGLVS accepts a local *.EQUIV command in the .SUBCKT command. You must specify the *.EQUIV command before any device commands.

$   TRUE SPICE FILE   $
*.SPICE
*.GLOBAL 0:G 99:P
*.PIN 0 99
*.EQUIV vss=0 vdd=99
*+ d6=11 d5=12 d4=13 d3=14 d2=15 d1=16
*+ g=23 ol=24 o2=25 o3=26 o4=27
*
.SUBCKT inv 3 6
*.EQUIV in=6 out=3
mnl 3 6 0 0 n 5 2
mpl 3 6 99 99 p 10 2
.ENDS inv
.SUBCKT top 11 12 13 14 15 16 23 24 25 26 27
.
.
x1 44 11 inv
x2 . . . . . . . . . .
.
.
.ENDS top

Hcell Definition Examples

This section contains Hcell definition examples. The Hcell is named HCELL1. Its inputs are A, B, and C, and its outputs are D, E, and F.

Example 1

CDL

*.GLOBAL VDD,VSS
*.PIN VDD,VSS
.SUBCKT HCELL1 D E F A B C
(*.NOPIN ..... ) ( optional )
.
. netlist information in CDL format (may be empty).
.
.ENDS

Example 2

**********************************************
** SPICE LIBRARY FOR GRAYCODE ***
**********************************************
*.GLOBAL VDD,VSS
*.PIN VDD VSS
.SUBCKT NA2 Z A B
* 2 INPUT NAND
MP1 Z A VDD VDD P
MP2 Z B VDD VDD P
MN1 Z A 5 VSS N
MN2 5 B VSS VSS N
.ENDS NA2
*
.SUBCKT NA3 Z A B C
* 3 INPUT NAND
.SWAP A B C
MP1 Z A VDD VDD P
MP2 Z B VDD VDD P
MP3 Z C VDD VDD P
MN1 Z A 6 VSS N
MN2 6 B 7 VSS N
MN3 7 C VSS VSS N
.ENDS NA3
*
.SUBCKT NA4 Z A B C D
* 4 INPUT NAND
MP1 Z A VDD VDD P
MP2 Z B VDD VDD P
MP3 Z C VDD VDD P
MP4 Z D VDD VDD P
MN1 Z A 7 VSS N
MN2 7 B 8 VSS N
MN3 8 C 9 VSS N
MN4 9 D VSS VSS N
.ENDS NA4
*
.SUBCKT NOR Z A B
* 2 INPUT NOR
MP1 5 B VDD VDD P
MP2 Z A 5 VDD P
MN1 Z A VSS VSS N
MN2 Z B VSS VSS N
.ENDS NOR
*
.SUBCKT INV Z A
*INVERTER
MP1 Z A VDD VDD P
MN1 Z A VSS VSS N
.ENDS INV
*
.SUBCKT JKFF1 Q QN CL J K S R
MP1 6 CL VDD VDD P
MN2 6 CL VSS VSS N
MP3 5 6 VDD VDD P
.
.
.
.
.
.
MN43 42 J VSS VSS N
MN44 44 39 45 VSS N
MN45 45 QN VSS VSS N
MN46 45 K VSS VSS N
.ENDS JKFF1
*
Hcell file (hcell.tab)
JKFF  JKFF1
INV INV
ND2 NA2
ND3 NA3
ND4 NA4
NO2   NOR

LOGLVS Examples

This section shows an example of a dual CMOS JK flip-flop. The following figure shows the schematic diagram of the JK flip-flop at the transistor level. The figures on the following pages show the same network redrawn at the logic level and transistor level implementation of cells. The network is composed of two identical flip-flops with only power and ground in common.

Each of the netlist examples in the sections on the SPICE formats describe the schematic in this example. .

Each cell name is listed at the top of the cell placement. The I/O pin names are also listed.

JK Flip-flop Logic Level

Transistor-Level Implementation

Transistor-Level Implementation (continued)

SPICE

In this example, the SPICE netlist is in the SPIC.CIR file. The cell name JKFF4627 in the CON command indicates that this cell will be converted.

DRACULA NETWORK COMPILER (LOGLVS) PROGRAM BEGINS.. 
 ENTER COMMAND 
:CIR SPIC.CIR
READING SPIC.CIR
FILE SPIC.CIR INPUT
ENTER COMMAND
:CON JKFF4627
TRANSISTOR-LEVEL FILE: LVS LOGIC.DAT CREATED
NUMBER OF TRANSISTORS (OR ELEMENTS):92
   ENTER COMMAND 
:EXIT


Return to top
 ⠀
X