Product Documentation
Virtuoso ADE Explorer User Guide
Product Version IC23.1, November 2023

A


auCdl Netlisting

This appendix describes the auCdl (Analog and Microwave Circuit Description Language) netlisting procedure. It contains details on parameters required for auCdl and also the different ways to netlist to auCdl. This information is applicable to any 4.4 version of the Virtuoso® design framework II (DFII).

This appendix covers the following topics:

What Is auCdl and Why Do You Need It?

To compare a layout versus a schematic (LVS) using LOGLVS, you need a netlist representation of the schematic for a design for LOGLVS. The netlist must be in CDL (Circuit Description Language) format. To create a CDL netlist for an analog circuit, you use a netlister called auCdl (Analog and Microwave Circuit Description Language).

Licensing Requirements

You must have one of the following licenses to run auCdl from DFII or from the command-line. If one of these licenses are not already checked out, the first available license will be checked out in the following order when you run auCdl:

Running auCdl

You can run auCdl from within or outside the DFII environment.

To translate files from the DFII database format into an auCdl netlist,

  1. Set the CDS_Netlisting_Mode environment variable as given below:
    setenv CDS_Netlisting_Mode "Analog"
  2. Create an auCdl view for the cell. For more information, see Creating a config view for auCdl.
  3. Add the auCdl simulation information to the cell’s CDF. For more information, see CDF Simulation Information for auCdl.

You can customize the auCdl Netlister using the simulation run control (.simrc) file. For more information, see Customization Using the .simrc File.

Running auCdl from within DFII

In DFII, you can extract the auCdl netlist by doing the following:

  1. In the CIW, choose File – Export – CDL.
  2. In the CDL Out form, fill in the appropriate fields and click OK or Apply.

For more information about using CDL Out, read the Translating CDL Files section in the Design Data Translator’s Reference.

Running auCdl from the Command-Line

To run CDL Out from the command-line, you must create a simulation environment (si.env) file in advance and name the file as a command argument. Run CDL Out interactively once to create the si.env file. Once the si.env file is created,

  1. Copy the cds.lib file to the run directory.
  2. Enter the following command:
    si -batch -command netlist
    the -batch option runs CDL in batch mode and the -command netlist option generates an ASCII netlist file.

CDL Out can generate a hierarchical netlist. CDL Out generates a netlist hierarchy that duplicates the hierarchy of your design. Each cell in your schematic becomes a separate subcircuit in the netlist. The hierarchical netlister automatically prefixes each instance name with the proper character for its element type; for example, "M" for MOSFET and "R" for resistor. This prefixing minimizes mapping and name translation.

The si.env File

The following is an example of a si.env file followed by description of each of these properties.

simLibName = "testLib"
simCellName = "testTop"
simViewName = "schematic"
simSimulator = "auCdl"
simNotIncremental = nilsimReNetlistAll = nil
simViewList = '("auCdl" "schematic" "gate.sch" "cmos.sch")
simStopList = '("auCdl")
simNetlistHier = t
hnlNetlistFileName = "netlist"
simRunDir = "/cds/1.0/test/translator/cdlout/paramCase/"
resistorModel = " "
shortRES = 2000.0
preserveRES = 'nil
checkRESVAL = 'nil
checkRESSIZE = 'nil
preserveCAP = 'nil
checkCAPVAL = 'nil
checkCAPAREA = 'nil
preserveDIO = 'nil
checkDIOAREA = 'nil
checkDIOPERI = 'nil
displayPININFO = 'nil
preserveALL = 'nil

Description of si.env Properties

Property Description

simLibName

Name of the library containing the top-level cellview of the design.

simCellName

Name of the top-level cellname of the design.

simViewName

Name of the top-level view of the design.

simSimulator

Simulator to run.

simNotIncremental

When this property is set to nil, the netlister runs incrementally, which means the system netlists only the parts of your design you modified since you last netlisted the design. The default is nil.

simReNetlistAll

When this property is set to t, the netlister runs a new netlist on all the cellviews in your entire design. The default is nil.

simViewList

List of views to open for each cell when traversing the design hierarchy during netlisting and name translation.

simStopList

List of views that are valid stopping points for expansion used during netlisting.

hnlNetlistFileName

Name of the text netlist file.

simRunDir

Directory in which CDL data is stored. Set this global variable to the current run directory. This variable is set when the simulation environment is initialized.

resistorModel

String that sets the model name to be treated as a short. Prints out the string in the *.RESI command. The default is nil.

shortRES

Sets the value of resistance below which the resistor is assumed to be shorted. Prints the value out in the *.RESI command. The default is 2000.0; type is floating point.

preserveRES

When this property is set to t, resistors are preserved for checking in LVS, shortRES, and checkRESSIZE. Using the optional variable [XX], you can specify a model name that preserves only the specified type of resistor. The default is nil.

checkRESVAL

Prints out *.RESVAL when set to t. The default value is nil.

checkRESSIZE

If preserveRES is nil, prints out *.RESSIZE when checkRESSIZE is set to t. The default is nil.

preserveCAP

When this property is set to t, Export – CDL preserves capacitors for checking in LVS. You can define checkCAPAREA if preserveCAP is t. The default is nil.

checkCAPVAL

Prints out *.CAPVAL when set to t. The default is nil.

checkCAPAREA

If checkCAPVAL is nil, prints out *.CAPAREA when checkCAPAREA is set to t. The default is nil.

preserveDIO

If preserveDIO is set to t, Export – CDL preserves the diodes for checking in LVS. You can define the variable checkDIOAREA if preserveDIO is t. The default is nil.

checkDIOAREA

Prints out *.DIOAREA when set to t. The default is nil.

checkDIOPERI

Prints out *.DIOPERI when set to t. The default is nil.

displayPININFO

When displayPININFO is set to t, prints out the *.PINIFO command for each subcircuit followed by the terminal names and pin directions (input, output, input/Output). The default is nil.

If the pin information line exceeds the maximum number of characters allowed on a line, each continuation line of pin information is also preceded by *.PININFO instead of the usual line continuation character(s).

preserveALL

If preserveAll is set to t, resistors, capacitors, and diodes are preserved for checking in LVS. If preserveAll is set to nil, resistors, capacitors, and diodes are removed. The default is nil.

If you want to use the property lvsIgnore equal to FALSE on some of the instances of resistors, then you should use the SKILL variables preserveRES and shortRES as follows:

Defining cdlSimStopList and simStopList in the si.env File

The behavior of cdlSimStopList and simStopList properties are interdependent:

Creating a config view for auCdl

To create a config view for auCdl:

  1. In CIW, choose File - New - Cellview.
    The Create New File form appears.
  2. In the Cell Name field, enter the name of the cell in which you want to create the config view.
  3. In the View Name field, enter the name of the view you want to create—for example, config_aucdl.
  4. In the Tool cyclic field, select Hierarchy - Editor.
  5. Click OK.
  6. Specify the top-level cell name and its view.
  7. Click Use Template.
    The Use Template form appears.
  8. In the Name cyclic field, choose auCdl.
  9. Click OK to display the New Configuration form.
    You can modify the view list.
  10. Click OK to create the view.
  11. Choose File – Save to save the configuration.

How to include partial netlist file in SUBCKT calls

You can automatically bind your cells to source files which will then be included in the .subckt statements.

Add following in your .simrc file

hnlReadHdbProps = 't 
ansCdlHdbFilePathProp = "<property name>"

Using Hierarchy Editor, add the property to the lib/cell/view as cell property in which the netlist needs to be included. In the value field of this property, define full path of the partial netlist file and netlist the config view of the top cell. After the netlist is complete the information is added to the subckt file.

Example

In the given example, you want to include the file "/tmp/netlist/dummy_top1.net" inside LIB5/top1/schematic subckt. The contents to be added are
: X17 A B / dummytop1.

The original subckt in the netlist looks like:

************************************************************************
* Library Name: LIB5
* Cell Name: top1
* View Name: schematic
************************************************************************
.SUBCKT top1 A B *.PININFO A:I B:O XI0 A B / mid .ENDS

In .simrc, set ansCdlHdbFilePathProp = "abc"

In the Hierarchy Editor for LIB5/top1/schematic, define a property "abc" with value "/tmp/netlist/dummy_top1.net"

After netlisting the top cell using Hierarchy Editor, the subckt file will read as follows:

************************************************************************
* Library Name: LIB5
* Cell Name: top1
* View Name: schematic
************************************************************************
.SUBCKT top1 A B *.PININFO A:I B:O XI0 A B / mid .ENDS
************************************************************************
* This auCdl Netlist has been included for cell top1:
* NOTE: The connectivity in this netlist has not been verified by auCDL
*
X17 A B / dummytop1
*************************************************************************
.ENDS

Verification

After adding the property, the Check prop.cfg should read as:

cell LIB5.top1
{
string prop abc = "/tmp/netlist/dummy_top1.net" 
}

Generating individual SUBCKT netlists

By default, auCDL netlisting generates a CDL top-level subckt netlist. This netlist comprises the netlists of all subcircuits in the design.

To generate individual subckt netlists, you need to set one of the following properties in the simrc or si.env file, based on your requirement:

You can also set the cdlPrintBusDelimiter = t and auCdlPParEvaluation = t flags to further customize the generation of individual netlists.

Customization Using the .simrc File

The behavior of the netlist can be further controlled using the simulation run control (.simrc) file. The parameters that you can include in the .simrc file are described in this section. The parameters you can set in the .simrc file are the same as those that are defined using the simSetDef SKILL function. This SKILL function defines variables only if they have not been defined previously (that is, during initialization when the si.env and .simrc files are read).

auCdl-Specific Parameters

These auCdl parameters can be set in the .simrc file:

Parameter Description

auCdlCDFPinCntrl = 't

Allows CDF termOrder to dictate pin ordering of the top-level cell or the cell that has the auCdl view. The default is 'nil.

auCdlScale = <m>
m = "METER"
or "MICRON"

Prints *.SCALE METER or *.SCALE MICRON, accordingly, in netlist. When auCdlScale is set to "", it prints *.SCALE in netlist.

If no value is defined in the .simrc or .cdsinit environment, by default *.SCALE METER is printed in netlist.

auCdlCheckLDD = 't

Turns on LDD device checking by printing *.LDD in the netlist. The default is 'nil.

auCdlDisablePrintSubcktCDF = 't

  

Disables printing of CDF parameters in .SUBCKT line. The default is 'nil.

auCdlHnlInstModelPropName = ’devModelExample

  

Allows defining a property that can be used to specify the model name for instances.

Here, devModelExample is the name of the property that can be used to specify the model name for instances.

auCdlPrintNetsetForStoppingCell = t

  

Enables printing of the netset for stopping cells.

Default value: nil

auCdlPrintEmptySUBCKT = t

Enables printing of empty subcircuit for all the subcircuits that are stopping cells in the netlist. Name of the empty subcircuit is either the value of CDF parameter named model, if exists, or the device cell name.

Default value: nil

To know more about printing empty netlist of subcircuits, refer to Printing Empty Subcircuits.

auCdlPrintMultiplicityFactor = t

Enables printing of parameter m irrespective of the instance parameters list for all hierarchical blocks.

Default value: nil

This variable does not control the printing of parameter m for stopping cells or text designs.

auCdlDisplayPinMap = t

Prints the PIN map statement into the subckt.

Default value: nil

cdlPrintBusDelimiter = t

  

Prints *.BUSDELIMITER in the netlist depending on pinMAP value.

Default value: nil

auCdlPParEvaluation = t

  

Stops the pPar evaluation in the subckt definition.

Default value: nil

auCdlPParArgsOnCell = t

Stops the pPar evaluation at the instance lines in a top cell.

Default value: nil

auCdlGCPolicy = t

Controls Garbage Collector (gc) during netlisting.

This option should be used only to improve performance when netlisting a design with more than a million pins.

To further improve performance, set the displayPININFO property to nil, or deselect the Display Pin Information check box on the CDL Out form.

auCdlPutMathExprInSingleQuotes = t

  

Enables adding mathematical expressions for parameters within single quotes.

Default value: nil

auCdlPrintAdditionalCommentsOnSubcktHeader (fp cv)

  

Adds comments to the subckt header. The parameter always takes two arguments: file pointer (fp) and name of the cellview (cv).

For example:

procedure(auCdlPrintAdditionalCommentsOnSubcktHeader( fp cv )
  let( (  )
      artFprintf( fp "* Following are additional comments:\n" )
      artFprintf( fp "* Create time of cv is :%s\n" cv~>createTime )
      artFprintf(fp "* fileName is %s\n" cv~>fileName )
)
    )
)

auCdlCommentStarDotConnect = t

Adds comments to the *.CONNECT statements in cdl netlists.

Default value: nil

By default, the comments are not printed.

auCdlPrintCellNameOnFooter = t

Prints cellname at the subckt footer.

Default value: nil

In the following example, .ENDS INV is printed at footer of SUBCKT INV when auCdlPrintCellNameOnFooter is t.

.SUBCKT INV A Z LN=NDEF GEOP=0 GEON=0 MN=1 MP=1 LP=PDEF
*.PININFO A:I Z:O       
MP0  Z    A  VINT  VINT  PCH W=WP L=LP M=MP GEO=GEOP GEOMOD=GEOP    
MN0  Z    A  VSS    VBULK  NCH W=WN L=LN M=MN GEO=GEON GEOMOD=GEON    .ENDS
INV

auCdlNoStarInGLOBAL = t

Prints .GLOBAL in the file header.

Default value: nil

By default, the *.GLOBAL is printed in the file header.

auCdlNoForwardSlash = t

Does not print forward slash (/) before the master name of a device.

Default value: nil

The following example shows when auCdlNoForwardSlash = t in .simrc, then forward slash (/) is not added before INVD.

.SUBCKT DELAY A Z WN=1.0 L=0.9 CNW=4.18 CPL=0.65 CPW=4.18 CNL=0.65 W=0.9 WP=1.8         
XI1 A I1L I1U Z INVD WN=WN WP=WP        
.ENDS DELAY

By default auCdlNoForwardSlash = t and therefore forward slash (/) is printed before the master name of the device INVD.

.SUBCKT DELAY A Z WN=1.0 L=0.9 CNW=4.18 CPL=0.65 CPW=4.18
CNL=0.65 W=0.9 WP=1.8
XI1 A I1L I1U Z  / INVD WN=WN WP=WP         
.ENDS DELAY

auCdlPrintIncFileAtFooter = t

Prints the .INCLUDE statements at the bottom of the netlist.

Default value: nil

By default, the statements are printed at the top of the netlist.

auCdlReplaceAngleBracketsWithSquare = t

Replaces the angle brackets <> with the square brackets [] while generating netlist.

auCdlIncludeFileNotFoundSeverity

Sets the severity of a message when a file specified in the CDL_NETLIST_FILE property is not found. Valid values are error and warning.

auCdlModelPrintingStyle

Prints the model name for a resistor.

Default value: nil

By default, it prints the model name with the prefix $.

Examples

Rr1 O3 vssx $[rm0fm1] m=1 w=16n l=8n

If auCdlModelPrintingStyle = 'Plain, the model names are printed without any prefix.

Rr1 O3 vssx rm0fm1 m=1 w=16n l=8n
If auCdlModelPrintingStyle = 'ModelEquals, the mode names are printed with the prefix model, as shown below:
Rr1 O3 vssx model=rm0fm1 m=1 w=16n l=8n

auCdlAlwaysAddPrefixInInstName

Enables simAlwaysAddPrefixInInstName variable to prefix instance names with the namePrefix of a device type based on the specified auCdl netlisting requirements.

Example

If you want to always add a prefix in hierarchical instance name but not in the primitive instance name then define the auCdlAlwaysAddPrefixInInstName procedure as shown below:

procedure(auCdlAlwaysAddPrefixInInstName()
    ;;do not always add prefix to primitives    
    if(hnlIsAStoppingCell( hnlCurrentMaster ) then
      simAlwaysAddPrefixInInstName = nil
    else
    ;;always add prefix to hierarchical instances    
      simAlwaysAddPrefixInInstName = t
    )

)

auCdlReplaceNetWithSurvivingNet = t

Replaces the net with its surviving net as a result of shorting.

auCdlTermOrderMismatchSeverity = error

Reports an error for auCdl and stops netlisting.

By default, the auCdl netlist reports a warning and continues netlisting.

View List, Stop List, Netlist Type, and Comments

You can use the following variables to define the standard view list, stop list, and netlist type and specify the value of the print comments flag.

Variable Description

cdlSimViewList

A list of views. The default is
'("auCdl" "schematic")

cdlSimStopList

A list of views. The default is '("auCdl")

cdlNetlistType

Netlist type hierarchical ('hnl) or flat ('fnl). The default is 'hnl.

cdlPrintComments

Print comments? Yes ('t) or no ('nil). The default is 'nil.

The following variables are used for instance-based switch list configuration and also can be set:

simInstViewListTable
simInstStopListTable

Preserving Devices in the Netlist

The si.env file defines the following variables that determine if resistors, capacitors, diodes, or all devices must be preserved in the netlist.

preserveRES      preserveCAP
preserveDIO   preserveALL

Removing Devices in the Netlist

During hierarchical netlisting, you can short the terminals of a device and replace that device with a surviving net. For example, you can short terminals of parasitic devices to remove them from the netlist.

The terminals of a device can be short using any of the following methods:

For more information on shorting devices, see Removing Devices with Two Terminals or Removing Devices with Multiple Terminals in the Open Simulation System Reference.

Printing CDL Commands

The following variables let you print the associated CDL commands.

checkRESVAL      checkDIOAREA
checkCAPVAL displayPININFO
checkDIOPERI shortRES
checkRESSIZE resistorModel
checkCAPAREA

Defining Power Node and Ground Node

You can define powerNets and groundNets in the .simrc file. For example, if you enter the following lines in your .simrc file

powerNets  = '("VCC!")
groundNets = '("GND!" "gnd!" )

the auCdl netlist will show the following line:

*.GLOBAL VCC!:P GND!:G gnd!:G
You can use the auCdlSkipMEGA flag for conditional printing of the *.MEGA statement in the auCdl netlist.This flag can be placed in the .simrc file, which is read by the netlister.

The auCdlSkipMEGA flag is used as follows:

auCdlSkipMEGA = ’nil This is the default value. This enables printing of the statement in the netlist.

auCdlSkipMEGA = ’t When set, the *.MEGA statement is not printed in the auCdl netlist.

Support for Global Power and Ground Signals from CDL UI

You can now use the Export CDL form to declare global power signal and global ground signals by following the steps given below:

  1. In the CIW, choose File – Export – CDL.
  2. In the fields, Global Power Signals field and Global Ground Signals, enter signal names respectively.

The values that you enter using the form will be added to *.GLOBAL and *.PIN statement.

:G and :P will be appended to the signal names based on the nets presence in the variables simPowerNets and simGroundNets in .simrc file.

Evaluating Expressions

You might want to evaluate design variables that have been copied to the cellview using ADE and whose values are needed during verification. The Analog Expression Language mode using which auCdl evaluates expressions is determined by the setting of the SKILL environmental flag auCdlSetTopLevelEvalMode. Its valid values are ’t and nil. The default value is nil and it causes auCdl to evaluate expressions by using inheritance operators. You can change the mode to full evaluation by setting the value of this flag to ’t.

For more information on evaluation modes, refer to the Cadence document Analog Expression Language Reference.

NLP Expressions

Netlisting Properties (NLP) expressions provide support for user defined properties in auCDL netlisting. You can use different NLP expressions depending on your requirements. Details about each NLP expression is described below:

Mapping Global Pins

In the DFII environment, global signals in a netlist end with a ! character. If you do not want global signals to end with !, you can specify this by using either one of the following methods:

Default direction of global power and ground pins is INPUT.

The SKILL environmental variable hnlMapNetInName can be used similarly. For example:

pinMap = ’t 

is equivalent to:

hnlMapNetInName = list(’("+" nil) ’("(" nil) ’(")" nil) ’("," nil) ’("/" nil) ’("." nil) ’("$" nil) ’("[" nil) ’("]" nil) ’("<" "[") ’(">" "]") ’("!" nil) )

To enable Map Bus Name from <> to [] in the CDL Out form when hnlMapNetInName is overridden by other values in the .simrc file, specify the following in the.simrc file:

when(pinMAP && boundp('hnlMapNetInName)
    hnlMapNetInName = append( hnlMapNetInName list('("<" "[") '(">" "]")))
)

Renaming Cell Names

You can define the  auCdlModuleNameMapFunc SKILL variable in the .simrc file to rename cell names in the auCdl netlist.

For example, to add a prefix AAA_ to the cell names in the auCdl netlist, add the following entries in the .simrc file:

auCdlModuleNameMapFunc = ’myPoCellNameMap
procedure(myPoCellNameMap( cvID ) poCellNameMap( cvID~>libName cvID~>cellName cvID~>viewName) ) procedure( poCellNameMap(lib cell view)    prog((mapname)
sprintf(mapname "AAA_%s" cell)
return(mapname)
)
)
Setting this variable does not detect the cell name collision and the netlister uses the same name if two cells have the same name (even if they are in different subckt).

Renaming Pcell Subcircuits

You can define the nlSetPcellName SKILL procedure in the .simrc file to customize renaming of Pcell subcircuits in the auCdl netlist.

For more information about the nlSetPcellName procedure, see the Virtuoso Analog Design Environment SKILL Language Reference.

When you define Pcell parameters in CDF, ensure that the type of each CDF parameter is consistent with parameter type specified in the Pcell.

Customizing Bulk Node Search

Bulk node connection or the substrate connection on a device is specified by using the CDF property of the form (progn bn). If the bulk node property is found on the instance terminal, then the net name connected to the instance terminal, which has the same name as the value of bulk node property on the instance, is printed as the bulk node connection in the netlist.

When the bulk node property is found on both instance terminal and cellview terminal, then by default, preference is given to the instance terminal. However, in this case, user can also specify how the bulk node property should be selected. For example, user can give preference to cellview terminal over instance terminal for bulk node connection by adding the following in the .simrc file:

auCdl.bulkNodeLookUp = `("cvTerm")

cvTerm can be used only when bulknode is found on both instance terminals and cellview terminals.

Support for HED Features

In addition to supporting the basic features of HED, auCdl also supports its following advanced features.

Custom Netlisting Procedures

You can use the following netlisting procedures in the device CDF to customize how instance lines are printed within a .SUBCKT definition in the auCdl netlist.

Netlist Procedures

Description

ansCdlSubcktCall

Prints the instance name, terminals of instance, master name, and user defined properties.

ansCdlCompPrim

Prints the mapped current instance names and net names.

ansCdlCompParamPrim

Prints the DOTMODEL property and supports all instance parameters present in CDF - simInfo - instParams.

ansCdlSpecParamPrim

Prints component name of the device if the component param is present in CDF - simInfo - instParams.

ansCdlSubcktCallExtended

Prints subcircuit instances and multiplier in instParams. Additionally, prints all the remaining instParameters in CDF - simInfo.

ansCdlHnlPrintInst

When specified in the CDF, the device information written in the instance lines in the auCdl netlist is customized using SKILL procedures.

To use the netlisting procedures, do the following:

  1. From CIW, choose Tools – CDF – Edit to open the Edit Component CDF form.
  2. Select Base as CDF type.
  3. Select master cell for the instance.
  4. Select simulation information and choose auCDL as simulator.

The following section describes the format of instance lines for different netlisting procedures.

ansCdlSubcktCall

The procedure ansCdlSubcktCall prints:

acdlCurrentInstName() returns mapped instance name for both hierarchical and flat netlisting.

ansCdlCompPrim

ansCdlCompPrim()

Description

The procedure ansCdlCompPrim is used for printing primitive devices. It prints:

ansCdlCompParamPrim

ansCdlCompParamPrim()

Description

The procedure ansCdlCompParamPrim() is used for printing primitive device.

For detailed information about the usage of instparams, see chapter 4, “Modifying Simulation Information”of Component Description Format User Guide.

ansCdlSpecParamPrim

ansCdlSpecParamPrim()

Description

The procedure ansCdlSpecParamPrim() is used for printing primitive device. This is same as ansCdlCompPrim except the following :

For detailed information about the usage of instparams, see chapter 4, “Modifying Simulation Information”of Component Description Format User Guide.

ansCdlSubcktCallExtended

ansCdlSubcktCallExtended()

Description

The procedure ansCdlSubcktCallExtended() is used for printing of subcircuit instances. It prints:

For detailed information about the usage of instparams, see chapter 4, “Modifying Simulation Information”of Component Description Format User Guide.

ansCdlHnlPrintInst

You can specify the ansCdlHnlPrintInst netlist procedure in the CDF for devices and then use the following SKILL procedures and variables in the simulation run control (.simrc) file to customize how device information is written in the instance lines in the auCdl netlist. For more information about these SKILL procedures and variables, see the Virtuoso Analog Design Environment SKILL Language Reference.

SKILL Procedure/Variable in .simrc File Description

auCdlInstPrintOrder

By default, auCdl uses the following order to write the device information for each instance in the netlist:

  1. Instance name
  2. Model name (for primitives only)
  3. Module name (for subcircuits only)
  4. Inherited parameters
  5. Names of nets connected to instance terminals

You can customize this order using the auCdlInstPrintOrder SKILL variable. For more information, see auCdlInstPrintOrder.

ansCdlGetInstPrintOrder

Reorders the printing of instance, connections, model name, instance properties, and instance parameters in netlist.

ansCdlPrintInstName

By default, auCdl prints the mapped instance name and prefixes the value of the namePrefix parameter in the device CDF simulation information.

For example, auCdl prints the instance name in the format:

CC2

Where C2 is the instance name and the prefix C is the value of the namePrefix property specified in the device CDF.  

You can customize this format using the ansCdlPrintInstName SKILL procedure.

ansCdlPrintModelName

By default, auCdl searches for model names for instances of a primitive in the following order:

  1. Value of the instance property defined using auCdlHnlInstModelPropName parameter in the .simrc file. For more information about the auCdlHnlInstModelPropName parameter, see Customization Using the .simrc File.
  2. Value of the ’model property on the instance.
  3. Value of the modelName parameter in the device CDF simulation information.
  4. Value of the ’componentName property on the instance.
  5. Value of the componentName parameter in the device CDF simulation information.

and prints first available model name in the following format in the netlist:

model=modelName

Use the ansCdlPrintModelName SKILL procedure to customize the order in which auCdl looks for model names for primitives and the format in which the model information is written in the netlist.

ansCdlPrintModuleName

By default, auCdl searches for the mapped module name for subcircuit instances in the following order:

  1. The module name specified using auCdlModuleNameMapFunc parameter in the .simrc file. For more information about the auCdlModuleNameMapFunc parameter, see Renaming Cell Names.
    For Pcell subcircuits, the module name specified using the nlSetPcellName SKILL procedure in the .simrc file. For more information about the nlSetPcellName SKILL procedure, see Renaming Pcell Subcircuits.
  2. The module name specified for the subcircuit instance.

and prints the first available module name in the following format:

/ modulename

Use the ansCdlPrintModuleName SKILL procedure to customize how the module name is written in the netlist.

The database objects cannot be modified by this function.

ansCdlPrintInheritedParams

By default, auCdl prints the information about inherited parameters (pPar properties) for a device in the following format:

Property_Name=Property_Value

You can customize this format using the ansCdlPrintInheritedParams SKILL procedure.

ansCdlPrintInstParams

By default, auCdl prints instance parameters in the following format:

Property_Name=Property_Value

You can customize this format using the ansCdlPrintInstParams SKILL procedure.

ansCdlPrintInstProps

By default, auCdl does not print user-defined instance properties in the netlist.

Use the ansCdlPrintInstProps procedure to enable printing of user-defined instance properties and also customize the format in which the properties are printed in the netlist.

To print user-defined properties in the netlist, you must also use the ‘instProps argument in the auCdlInstPrintOrder SKILL variable defined in the .simrc file.

ansCdlPrintConnections

By default, auCdl prints the information about nets connected to a device in the following format:

$PINS B=mmA_M

Where B is the terminal name and mmA_M is the net name.

You can customize this format using the ansCdlPrintConnections SKILL procedure.

ansCdlPrintString

Prints comment strings in the device information for instances in the auCdl netlist.

To print comment strings in the device information, you must also use the ‘string argument in the auCdlInstPrintOrder SKILL variable defined in the .simrc file.

You cannot modify the database objects using this function.

auCdlPrintGlobalStmtInFooter

By default, auCdl might not print all global signals in the flat netlisting mode correctly.

To print all global signals, such as *.GLOBAL and *.EQUIV, set the auCdlPrintGlobalStmtInFooter SKILL variable to t in the .simrc file.

After setting this variable, *.GLOBAL and *.EQUIV appear in the netlist footer.

Default value: nil

auCdl PrintTopCellPort

Prints ports for the top cell in the netlist.

This option is not supported for subcircuit instances in flat auCdl netlists.

auCdlFnlRetainPathInInstAndNets

Prints the instance names with hierarchical path during the flat auCdl netlisting.

fnlHierarchyDelimiter

Prints the auCDL netlist with the specified delimiter for the node names.

auCdlInstPrintOrder

You can use the auCdlInstPrintOrder variable in the .simrc file to customize the order in which device information is written in the netlist.

The auCdlInstPrintOrder variable supports the following arguments.

Argument Description

’connections

Prints the names of nets connected to instance terminals.

’inheritedParams

Prints inherited parameters (pPar properties).

’instName

Prints the instance name.

’instParams

Prints the instance parameters (as defined in the device CDF).

’instProps

Prints user-defined instance properties.

By default, auCdl does not print user-defined instance properties in the netlist if you use the ’instProps argument. You must define the ansCdlPrintInstProps procedure in the .simrc file to enable printing of user-defined instance properties in the netlist.

’model

Prints the model name (for primitives only).

’moduleName

Prints the module name (for subcircuits only).

’string

Prints comment strings in the device information.

By default, auCdl does not print comment strings in the device information. You must define the ansCdlPrintString SKILL procedure in the .simrc file to specify the comment string to be printed. For more information on the ansCdlPrintString SKILL procedure, see the Virtuoso Analog Design Environment SKILL Language Reference.

By default, auCdl uses the following order of arguments to print the device information for an instance in the netlist.

(’instName ’model ’moduleName ’inheritedParams ’instParams  ’instProps ’connections) 

You can customize this order by changing the order of the arguments specified for the auCdlInstPrintOrder variable in the .simrc file.

For example, you can use the auCdlInstPrintOrder variable to write the instance name first, followed by the names of nets connected to the instance, a comment string for the nets, the module name and a comment string for the module name, by inserting the following line in the .simrc file:

auCdlInstPrintOrder=list(’instName ’connections ’string ’moduleName ’string)

Netlist Customization Using netlistProcOpts

The netlistProcOpts feature allows you to specify or override any of the options provided from one of the existing functions to the internal function.

Examples

Example 1:

If you use ansCdlCompParamPrim to print DevModel=my_model instead of $.MODEL=my_model, which is a default behaviour.

Specify netlistProcOpts = "((?printDotModel \"DevModel\"))" in auCdl simInfo to override the default DOTMODEL syntax provided from ansCdlCompParamPrim to the internal printing function.

Duplicated parentheses at the beginning and end are necessary because netlistProcOpts is a list of values, which are in the form of pairs, hence this is a list of just one pair.

Example 2:

If you want to print $SUB after the model name in the instance line of a three-terminal resistor device, specify (?paramOrder CDLResSUBLast) in the netlistProcOpts field.The following gets printed:

.SUBCKT new1 n0 n1
* net n0 = /A
* net n1 = /B
* net n2 = /net1
R0 n0 n1 1e3 RP $SUB=n2

When the value of netlistProcOpts is not specified, the default netlist gets printed as follows:

.SUBCKT new1 n0 n1
* net n0 = /A
* net n1 = /B
* net n2 = /net1
R0 n0 n1 1e3 $SUB=n2 RP
.ENDS

The following options are available in netlistProcOpts:

Option Values

(?modelStyle value)

Changes the model style for a device.

  • Omit: Disables model printing.
  • Plain: Prints the model without any additional syntax.
  • ModelEquals: Prints the model as model=%s.
  • DollarBrackets: Prints the model as $[%s].
  • DollarDotMODEL: Prints the model as $.MODEL=%s.
  • DollarDotModel: Prints the model as $.Model=%s.

(?paramOrder value)

Prints the value in a specific order.

  • CDLResSUBLast: Prints in the default order with SUB last for a resistor.
  • instParameters: Prints in the order specified in the CDF instParameters list.

(?paramStyle value)

Prints the parameter name and value in a specified style.

  • Name: Prints the parameter name, e.g., R.
  • DollarName: Prints the name prefixed by $, e.g., $R.
  • Value: Prints the value, e.g., 1k.
  • DollarValue: Prints the value prefixed by $, e.g., $1k
  • NameValue: Prints name=value, e.g., R=1k.
  • DollarNameValue: Prints $name=value, e.g., $R=1k
  • NameDollarValue: Prints name=$value, e.g., R=$1k.
  • DollarNameDollarValue: Prints both prefixed by $, e.g., $R=$1k.

(?printSUB value)

Prints the SUB when value is non-nil.

(?printNETSETandPINS value)

Prints the $NETSET and $PINS blocks when value is non-nil.

(?printDollarParams value)

Prints the parameters specified in the dollarParams field when non-nil.

(?printDollarEqualParams value)

Prints the parameters specified in the dollarEqualParams field when non-nil.

(?debug value)

Prints the debug value.

  • nil: no debug logging.
  • t: Allows debug logging.
  • PrintSimInfo: Prints debugging with simulation information for each call.

Blackbox Netlisting

The term blackbox signifies a macro treated as a cell with only an interface definition and no internal details specified. For example, a block to be used by a customer, C, is being designed by a vendor, V. V has formally announced the characteristics of the block and passed on an interface for it to C. C should be able to netlist this block as a blackbox for initial rounds of verification and plug in the V-supplied netlist, when available, and run a final cycle of verification. This would save C time that would otherwise have been spent waiting for the block. C can specify a property on the master instance of the cell instantiated and the cell will be netlisted as a blackbox; that is, only the interface of the cell is printed in the netlist and the instances within it are skipped.

The description of the SKILL environment variable flag to enable or disable the feature is:

auCdlDisableBlkBox=‘t

Disables the feature

auCdlDisableBlkBox=‘nil

Enables the feature

The default value of the variable is ‘nil. This will mean that the blackbox netlisting feature is enabled, by default.

A boolean property needs to be added on the cellview that is to be treated as a blackbox. The descriptions of the valid values of this property are:

auCdlPrintBlkBox=‘t

Treats the macro as a blackbox

auCdlPrintBlkBox=‘nil

Treats the macro as is

The steps to be followed to work with this feature are:

  1. Ensure that in the .simrc file, the SKILL flag has the line auCdlDisableBlkBox=‘nil.
  2. Specify the cell to be treated as a blackbox and open the Edit Cellview Properties form. Add the boolean property auCdlPrintBlkBox and set its value to ‘t.
  3. Check and save the cellview.
  4. Generate the netlist using FileExportCDL.
Set the shell variable CDS_Netlisting_Mode to Analog for auCdl netlisting.

Additionally, you can specify CDL simInfo to have a custom pin order for a blackbox and/or to print parameters on instance call of a blackbox.

The following figure describes the location of auCdl in DFII with regard to OSS and Socket Interface.

The property to be added on the cellview is a boolean property. Any incorrect property type will be flagged as an error with the following error message in the si.log file:

Netlister Error: Incorrect property type defined for property “auCdlPrintBlkBox” on cellview libname/cellname/viewname. The type of the property can only be a boolean.

Sample Hierarchical Cell Using Blackboxing

Default Netlist

********************************************
* auCdl Netlist:
* Library Name: testaucdlbbox
* Top Cell Name: test
* View Name: schematic
* Netlisted on: Feb 6 16:32:46 2003
********************************************
*.EQUATION
*.SCALE METER
*.MEGA
.PARAM
********************************************
* Library Name: testaucdlbbox
* Cell Name: res1
* View Name: schematic
********************************************
.SUBCKT res1 A B
*.PININFO A:I B:O
RR0 A B 1K $[RP]
.ENDS
********************************************
* Library Name: testaucdlbbox
* Cell Name: res2
* View Name: schematic
********************************************
.SUBCKT res2 B C
*.PININFO B:I C:O
XI0 B C / res1
.ENDS
********************************************
* Library Name: testaucdlbbox
* Cell Name: test
* View Name: schematic
********************************************
.SUBCKT test X Y
*.PININFO X:O Y:I
XI1 X Y  / res2
.ENDS
********************************************

Netlist when auCdlPrintBlkBox=‘t on testaucdlbbox/res2/schematic:

********************************************
* auCdl Netlist:
* Library Name: testaucdlbbox
* Top Cell Name: test
* View Name: schematic
* Netlisted on: Feb 5 14:57:30 2003
********************************************
*.EQUATION
*.SCALE METER
*.MEGA
.PARAM
********************************************
* Library Name: testaucdlbbox
* Cell Name: res1
* View Name: schematic
********************************************
.SUBCKT res1 A B
*.PININFO A:I B:O
RR0 A B 1K $[RP]
.ENDS
********************************************
* Library Name: testaucdlbbox
* Cell Name: res2
* View Name: schematic
********************************************
.SUBCKT res2 B C
*.PININFO B:I C:O
.ENDS
********************************************
* Library Name: testaucdlbbox
* Cell Name: test
* View Name: schematic
********************************************
.SUBCKT test X Y
*.PININFO X:O Y:I
XI1 X Y  / res2
.ENDS
********************************************

Notice that the macro res2 has been generated as a blackbox with only its interface, that is terminal information, being printed in the netlist. The difference in the netlists is marked in bold typeface.

Additional Customizations

This section describes the following additional customizations that you can make:

Automatically Including a Partial Netlist File within the .SUBCKT Definition for the Top or Mid-Level Cells in your Design

If a block instantiated in your design has a CDL netlist,  you can automatically include the CDL netlist for the block within the .SUBCKT definition for the top or mid-level cells in your design and disable printing of subcircuit instances in the netlist.

For example, consider a two level hierarchical design that has the following netlist. The original .SUBCKT definition for the top-level cell  LIB5/top/schematic appears in the netlist as shown in bold text below:

*******************************************************************
* Library Name: LIB5
* Cell Name: mid
* View Name: schematic
************************************************************************
.SUBCKT mid A B *.PININFO A:I B:O
XI0 A B / bot
.ENDS
************************************************************************
* Library Name: LIB5
* Cell Name: top
* View Name: schematic
************************************************************************
.SUBCKT top A B
*.PININFO A:I B:O
XI0 A B / mid
.ENDS

This procedure describes how you can include a partial CDL netlist file dummy_top1.net located at /tmp/netlist within the .SUBCKT definition for the top-level cell LIB5/top/schematic and disable the printing of instances in the subcircuit in the netlist, such that netlist is created as shown below:

************************************************************************
* Library Name: LIB5
* Cell Name: top
* View Name: schematic
************************************************************************
.SUBCKT top A B *.PININFO A:I B:O ************************************************************************
* This auCdl Netlist has been included for cell top from file
+ ’/tmp/netlist/dummy_top1.net’.
* NOTE: The connectivity in this netlist has not been verified by auCDL
*
*************************************************************************
X17 A B / dummytop1
*************************************************************************
.ENDS
The bold text in the above netlist indicates the contents of the /tmp/netlist/dummy_top1.net file that is written within the .SUBCKT definition for the top-level cell LIB5/top/schematic. 
The instance and .SUBCKT definition for the mid block are not printed in the netlist.

To include the CDL netlist file dummy_top1.net within the .SUBCKT definition for the top-level cell LIB5/top/schematic and disable printing of the instance and .SUBCKT definition for the mid block in the netlist, do the following:

  1. Add the following entries in your .simrc file:
    hnlReadHdbProps = 't 
    ansCdlHdbFilePathProp = "<property_name>"

    You can use any value for the ansCdlHdbFilePathProp variable.
  2. Create an auCdl view, say, config_aucdl, for the top-level cell. For more information, see Creating a config view for auCdl.
    When you create the auCdl view, ensure that the view for the top-level cell is set to schematic, as shown below:
    Ensure that each instance in the design has a valid switch view. To do this, in Hierarchy Editor, ensure that the view specified for each instance in the View to Use column has instances in it.
  3. In Hierarchy Editor, add the property specified as the value of the ansCdlHdbFilePathProp variable in the .simrc file on the schematic view of the top-level cell.
    For example, if the value of the ansCdlHdbFilePathProp variable is filepath, do the following to add the filepath property:
    1. In Hierarchy Editor, choose View – Properties.
    2. Choose Edit – Add Property Column.
      The Add a Property Column form appears.
    3. Enter filepath in the Property Name field.
    4. In the Property Type cyclic field, select String.
    5. Click OK to add a column for the filepath property.
    6. Right click the filepath column and choose Set "filepath" Cell Property.
    7. Enter the path to the CDL netlist file for the block. For example, enter:
      /tmp/netlist/dummy_top1.net.
    8. Click OK.
      You can verify that the property is added by opening the prop.cfg file in the config view for the cell. In this example, the prop.cfg file will contain the following text:
      cell LIB5.top
      {
      string prop filepath = "/tmp/netlist/dummy_top1.net" 
      }

Including a ROM-Insert Netlist Automatically Into the auCdl Netlist

You can include CDL netlist in top-level netlist by either concatenating the netlist or by adding .include statement.

Related Topics

Edit Object Properties – Instance and Block

PININFO for Power and Ground Pins

If you want power and ground pin names to appear with :P and :G, respectively, in the *.PININFO line in the CDLOut netlist for non-global signals, you can specify this with the cellViewPowerPins and cellViewGroundPins properties.

For example, you may have four pins in the cellView, namely A, B, VSS, and VDD, and you want the PININFO lines to appear as follows:

.SUBCKT test A B VDD VSS
*.PININFO B:P VSS:G A:G VDD:P
.ENDS

From the schematic cellView, click EditPropertiesCellView. Click Add in the User Property section and add the following properties:

Then, check and save the cellView.

When you run the netlister, CDL Out checks for two properties of the type ilList in the cellview, namely cellViewPowerPins and cellViewGroundPins, and generates the netlist according to information specified with them. The PININFO lines in the netlist appear as mentioned above.

.PARAM Statement

The design variables specified on Top cell of the design being netlisted will be printed in .PARAM statement each per line.

For example, if the designVarList property specified on top cell has the following value:

( ("CAP" "0.8p") ("RES" "20") ("X" "35") )

the .PARAM will be printed as:

.PARAM CAP=0.8p
+ RES=20
+ X=35

To use the designVarList property, follow these steps:

  1. Open a maestro view with one or more design variables.
  2. Get the session id as follows:
    session=asiGetCurrentSession()
  3. Use the following call to get the list of design variables:
    designVarList=asiGetDesignVarList(session)

Specifying Terminal Order for auCDL Netlisting in the Edit CDF Form

To specify the terminal order:

  1. In CIW, click ToolsCDFEdit.
  2. Specify the library and cell names.
  3. Set CDF Type to Base.
  4. Open the Simulation Information tab.
  5. In the Choose Listing field, select By Simulator and then select auCdl in the drop-down list.
  6. In the termOrder field, enter the terminals in the order in which you want them in the netlist.
  7. Click Apply and OK to close the implement the changes and close the dialog box.

For hierarchical netlisting:

  1. Set the SKILL flag auCdlCDFPinCntrl to 't in the .simrc file. For more information, see The .simrc File.
  2. Build the netlist using auCdl.

Specifying the Terminal Order for Terminals in .simrc

You can define the auCdlCDFPinCntrl parameter in the .simrc file to have custom terminal order for a cell.This parameter supports various combinations using the values cdfTermOrder, masterTermOrder, and userDefinedFunctionNameSymbol. The following table shows how you can define the auCdlCDFPinCntrl parameter:

auCdlCDFPinCntrl = nil

  

Prints terminals in alphanumerical order. This is the default order.

auCdlCDFPinCntrl = t / auCdlCDFPinCntrl = "cdfTermOrder"

Reads the CDF terminal order, if available, else uses the default order.

auCdlCDFPinCntrl = "masterPortOrder"

Uses the port order of the master cell, if available, else uses the default order.

auCdlCDFPinCntrl = (list "cdfTermOrder" "masterPortOrder"  'userDefinedFunctionNameSymbol)

Reads the terminal order in the following sequence based on availability:

  1. CDF terminal order for the device
  2. Master port order
  3. User-defined function to get the terminal order for the device
  4. Default terminal order, if the values mentioned above are unavailable
You can change the order of elements or drop elements in the list.

auCdlCDFPinCntrl = (list "cdfTermOrder" "masterPortOrder" "warnAndDefault")

Reads the terminal order in the following sequence based on availability:

  1. CDF terminal order for the device
  2. Master port order, if the CDF terminal order is unavailable
  3. Default order and displays the auCDL-56 warning message, if the values mentioned above are unavailable

auCdlCDFPinCntrl = (list "cdfTermOrder" "masterPortOrder" "error")

Reads the terminal order in the following sequence based on availability:

  1. CDF terminal order for the device
  2. Master port order, if the CDF terminal order is unavailable

If both CDF terminal order and master port order are not available, displays the auCDL-50 error message and stops netlist generation.

auCdlCDFPinCntrl = '("cdfTermOrder" "masterPortOrder" "default"|"alphanum")

Disables the auCDL-50 message when both CDF terminal order and master port order are not available, and default or alphanum are specified in the list.

Rules followed to Print Terminal Order during Netlisting

When auCdlCDFPinCntrl is set to t or "cdfTermOrder", the following rules are obeyed during netlisting, when:

Terminal order in CDF is missing: The default terminal list is used to print the netlist for that cell or instance.

Terminal order is CDF has fewer terminals than the default terminal list: The terminals are printed in the following sequence:

  1. The terminals specified according to the order specified in the CDF terminal order.
  2. The remaining terminals sorted alphanumerically.
  3. The inherited terminals.
For stopping cells (leaf-level cells), the remaining terminals are not printed.

For example, consider there are ten terminals, and only six terminals have been specified in CDF termOrder. In this case, during netlisting these six terminals are printed according to the CDF terminal order and the remaining four terminals are printed alphanumerically. Finally, any inherited terminals are printed in the netlist.

Terminal order has duplicate terminals: A warning message is issued as described in the section Error Handling and the terminals are printed in the following way:

Terminal in the terminal order is not valid: A warning message is issued as described in the section Error Handling and the default terminal list is used for netlisting.

Similar rules are followed when when auCdlCDFPinCntrl is set to t or "masterPortOrder", where instead of CDF terminal order, master port order is followed to print the terminals. You can also specify any of the following additional existing options to control the terminal order of bus members:
If termOrder is empty, the default terminal list is used.
Set the shell variable CDS_Netlisting_Mode to Analog for auCdl netlisting.

Example for CDF termOrder

Consider a hierarchical design of the cell mytop using mycell as a sub-cell. Here, mycell has been set as a stopping cell to make the example compact.

Schematic View for mytop
Schematic View for mycell

Assuming that the top schematic is mytop, consider the following cases:

Default netlist (No termOrder Is Specified)

************************************************************************
* auCdl Netlist:
*
* Library Name: mylib
* Top Cell Name: mytop
* View Name: schematic
* Netlisted on: Apr 10 14:31:28 2003
************************************************************************
*.EQUATION
*.SCALE METER
*.MEGA
.PARAM
************************************************************************
* Library Name: mylib
* Cell Name: mytop
* View Name: schematic
***********************************************************************
.SUBCKT mytop in<2> in<1> in<0> out<0> out<1> out<2>
*.PININFO in<2>:I in<1>:I in<0>:I out<0>:O out<1>:O out<2>:O
XI0 in<2> in<1> in<0> out<0> out<1> out<2> / mycell
.ENDS

Using the CDF termOrder Features

For case 1, termOrder is specified as follows:

Case 1: Missing Terminals in termOrder

************************************************************************
* Library Name: mylib
* Cell Name: mytop
* View Name: schematic
************************************************************************
.SUBCKT mytop in<0> in<1> out<2> out<1> in<2> out<0>
*.PININFO in<2>:I in<1>:I in<0>:I out<0>:O out<1>:O out<2>:O
XI0 in<1> in<0> out<0> out<1> / mycell
.ENDS

Two points to note here are:

Case 2: Invalid Terminal

When auCdlCDFPinCntrl is set to ’t and termOrder for mytop is set as:

“in<0:1>”  “out<2:1>” “T”

TermOrder will be ignored and the default terminal list will be printed for mytop along with the warning message.

************************************************************************
* Library Name: mylib
* Cell Name: mytop
* View Name: schematic
************************************************************************
.SUBCKT mytop in<2> in<1> in<0> out<0> out<1> out<2>
*.PININFO in<2>:I in<1>:I in<0>:I out<0>:O out<1>:O out<2>:O
XI0 in<1> in<0> out<0> out<1> / mycell
.ENDS

si.log has the following warning message:

*Warning* Could not determine the node name for terminal ’"T"’. This may be caused by an error in the CDF specified on:
                component   : mytop
                in cellview : schematic
                of library  : mylib

Case 3: Duplicate Terminal

When auCdlCDFPinCntrl=’t and termOrders are set as follows:

Note the use of individual bus bit “in<0>” and “B<1>” in the termOrder for mytop and mycell, respectively. When the termOrder is expanded, they become duplicate terminals.

************************************************************************
* Library Name: mylib
* Cell Name: mytop
* View Name: schematic
************************************************************************
.SUBCKT mytop in<2> in<1> in<0> out<0> out<1> out<2>
*.PININFO in<2>:I in<1>:I in<0>:I out<0>:O out<1>:O out<2>:O
XI0 in<1> in<0> out<1> out<0> out<1> / mycell
.ENDS

The si.log file has the following warning message

*Warning* Could not determine the node name for terminal ’"in<0>"’. This may be caused by an error in the CDF specified on:
                component   : mytop
                in cellview : schematic
                of library  : mylib
*Warning* Could not determine the node name for terminal ’"B<1>"’. This may be caused by an error in the CDF specified on:
                component   : mycell
                in cellview : schematic
                of library  : mylib

The points to be noticed here are:

Error Handling

A warning message is generated if there are invalid or duplicate terminals in the terminal order. The message informs that the node name for the terminal could not be determined because of an error in the CDF. The message also lists the information regarding the component (cell name), cellview (view name), and library (library name) in which the error occurred.

Changing the Pin Order

You need to do the following to modify the pin order:

  1. In the SimInfo section of CDF for the auCdl view, add the following lines to the file.
    netlistProcedure:   ansCdlSubcktCall
    componentname:      subcircuit
    termOrder:          "my_pin_1" "my_pin_2" "my_pin_3"
    namePrefix:          X
  2. Add the following line to the .simrc file:
    auCdlCDFPinCntrl = t
    If a .simrc file does not exist, you need to create one, add the above line, and save the file in your current directory. For more information, see The .simrc File.
If the auCdlCDFPinCntrl = ’t variable is specified in the .simrc file and you want the explicit inherited terminals of stop cells to be printed in the netlist, you must specify the explicit inherited terminal names in the CDF termOrder field. If you want explicit inherited terminals of stop cells to be printed in the netlist even when they are not specified in the CDF termOrder field, add the following line in the .simrc file:

auCdlNoInhTermInTermOrder = ’t

Arranging the Terminal Ordering

You can use the auCdlTermOrderStr variable to arrange the netlist in ascending or descending order when the auCdlCDFPinCntrl parameter is set to t.

The possible values for the auCdlTermOrderStr variable that you can define in the .simrc file or specify in the CIW are:

auCdlCDFPinCntrl=t and auCdlTermOrderStr = "a"/"A"/'A/'a, then the SUBCKT line is printed in ascending order.

By default, auCdlTermOrderStr remains unbound and works only when auCdlCDFPinCntrl is set to non-nil.
auCdlTermOrderStr displays an error in the following cases:

Notification about Net Collision

Sometimes a net name may get mapped to a new name, such as when there are invalid characters in the original name. This new name may collide with another existing or mapped net name. Due to this collision, one of the net names is mapped to a new name.

To ensure that you get warnings or error messages for such collisions and mapping, set the SKILL variable simCheckNetCollisionAction as per the following table:

Value Actions Taken by Netlister

warning

  1. Generates a warning message for each net name collision:

WARNING: Netlister : Net <netname> has collided with an existing net name and will be remapped to <new name>

  1. Remaps collided nets.
  2. Creates the netlist.

error

  1. Generates an error message in case of net name collision:

ERROR: Netlister : Net <netname> has collided with an existing net name. Exiting...

  1. Stops the netlist.

Any value other than warning or error

  1. Does not generate any warning or error message.
  2. Remaps collided nets.
  3. Creates the netlist.

If you want the simCheckNetCollisionAction to operate in the batch mode or the background mode, set it in the .simrc file. If you want it to operate in the foreground mode, set it in the CIW.

Consider the following schematic view of the autest cell of a hierarchical design mycdltest.

Assume that the .simrc file is set as follows:

hnlMapNetInName = ’( ("<" "") (">" ""))
simNetNamePrefix = "M"

The auCdl netlist obtained is as shown below.

A<0> is mapped to A0 because the hnlMapNetInName variable set in .simrc. So, it collides with the original net A0. After collision, the original net is mapped to M0 because simNetNamePrefix is set to M.
************************************************************************
* auCdl Netlist:
*
* Library Name: mycdltest
* Top Cell Name: autest
* View Name: schematic
* Netlisted on: Apr 21 16:12:26 2003
************************************************************************
*.EQUATION
*.SCALE METER
*.MEGA
.PARAM
*.GLOBAL gnd!
*.PIN gnd!
************************************************************************
* Library Name: mycdltest
* Cell Name: autest
* View Name: schematic
************************************************************************
.SUBCKT autest A0 B N$1158
*.PININFO A0:I B:O N$1158:B
RR0 M0 N$1158 1K $[RP]
CC0 M0 gnd! 1p $[CP]
QQ0 B A0 M0 NP
.ENDS

Case 1

When simCheckNetCollisionAction is set to warning and the file .simrc has the following settings:

hnlMapNetInName = ’( ("<" "") (">" ""))
simNetNamePrefix = "M"
simCheckNetCollisionAction="warning"

the netlist generated is the same as mentioned earlier but the log file has the following message:

Running Artist Hierarchical Netlisting ...
WARNING: Netlister : Net ’A0’ has collided with an existing net name, will be remapped to M0.
End netlisting <Date Time>

Case 2

When simCheckNetCollisionAction is set to error and the file .simrc has the following settings:

hnlMapNetInName = ’( ("<" "") (">" ""))
simNetNamePrefix = "M"
simCheckNetCollisionAction="error"

a netlist is not generated and the log file has the following message:

Running Artist Hierarchical Netlisting ...
ERROR: Netlister : Net ’A0’ has collided with an existing net name, exiting...
End netlisting <Date Time >
"Netlister: There were errors, no netlist was produced."

Making a Stop Cell at Subcircuit Level

To make the netlister stop at the subcircuit level for a specific block (and to prevent it from netlisting down to the primitive cells for the given block), copy the symbol view of the subckt to an auCdl view. Then make the following modification to the .simrc file:

cdlsimViewList = list( "auCdl" "symbol" "schematic" )
cdlsimStopList = list( "auCdl" )

By default, the netlister does not print subcircuits for stop cells. To know how to print empty subcircuits, refer to Printing Empty Subcircuits.

Printing Empty Subcircuits

This section describes the procedure to print empty subcircuits for various cases.

Printing empty subcircuits for Stopping Cells

By default, the netlister does not print subcircuits for stop cells, but you can set the auCdlPrintEmptySUBCKT variable to print an empty subcircuit. Consider the following schematic view of the cell, test.

In this example, cell res1 is a stop cell. if you set the auCdlPrintEmptySUBCKT variable as t in the .simrc file, the generated netlist appears as follows:

.SUBCKT res2 B C
*.PININFO B:I C:O
.ENDS
.SUBCKT test X Y *.PININFO Y:I X:O XI1 net4 X / res2 XI2 Y net4 res1_model .ENDS .SUBCKT res1_model A B .ENDS

In this netlist, an empty subcircuit is printed for cell res1. Here, res1_model is the model name applied to the cell.

If a model name is applied to a cell and it is overridden at the instance level, the netlist shows the overridden name at the instance line. However, the subcircuit definition shows only the default model name, which is applied at the cell level. Therefore, it is recommended not to change the model name at the instance level.

If the stop cell has CDF, and has non-empty termOrder defined in auCdl simInfo section of CDF, terminals in termOrder are printed as ports when writing empty subcircuit definition.

However, when a stop cell or primitive has no CDF available, or does not have auCdl simInfo section in device CDF, auCdl prints device (cellview) terminals as ports when writing empty subcircuit definition.

Even when CDF/simInfo is available for device, but termOrder field in simInfo section is empty, cellview terminals are written in empty subcircuit definition.

When termOrder is not available, and cellview terminals are written, they are sorted such that first non-inherited terminals are alphanumerically sorted and printed, followed by inherited terminals alphanumerically sorted and printed.

Also, any vector/bus terminals in cellview are expanded and printed.

If you are using a primitive netlist procedure for an empty cell, setting auCdlPrintEmptySUBCKT to t generates an auCDL-55 warning message. To avoid this warning message, use ansCdlSubcktCall or a non-primitive netlist procedure for empty cells.

Printing Empty Subcircuits for Blank Cells

To print the filler cell instances, which have blank or empty cells, add the following environment variable in the appropriate .simrc file:

hnlEmptySwitchMasterAction="honor"

As a result, these cells get printed in the netlist:

.SUBCKT mycell IN OUT
*.PININFO IN:I OUT:O
MM1 net1 net3 net4 net2 PM
MM0 net5 net7 net8 net6 PM
X10 / filler
.ENDS

Considering that the instance switch view does not have any pins and instances, no subckt gets printed for this cell in the netlist. To get an empty subcircuit in the netlist, add the following environment variable in the appropriate .simrc file:

auCdlPrintEmptySUBCKT = 't

As a result, empty subcircuit gets printed in the netlist:

.SUBCKT mycell IN OUT
*.PININFO IN:I OUT:O
MM1 net1 net3 net4 net2 PM
MM0 net5 net7 net8 net6 PM
X10 / filler
.ENDS
.SUBCKT filler *.PININFO .ENDS

Passing Parameter

Parameters can be passed to daughter cells of a subcircuit by passing m (M factor) to the MOS transistors that make up an inverter.

on the parent inverter: m = 2 on the MOS transistors:

MOS: m = pPar("m") PMOS: m = pPar("m")

In the evaluation of a parameter, if the value of another parameter is to be incorporated, then it can be done by using the following method:

If the parameter AD of a MOS transistor is to be a function of its channel width, AD can be defined as

AD = iPar("w")*5u

Netlisting the Area of an npn

To add a CDF parameter called Emiter Area (EA) to the CDF of your npn, fill out the CDF form with the following values:

paramType = string
parseAsNumber = yes
units = don't use
parseAsCEL = yes
storeDefault = no
name = EA
prompt = EA
defValue = iPar("area")
...

If you do not want to display the parameter on the form, you can set display = nil.

CDF Simulation Information for auCdl

The auCdl netlisting procedure ansCdlCompPrim supports the following devices: FET, CAP, IND, DIODE, BJT, RES, and MOS. To use CDL Out to generate the correct name for the component, its terminal, and parameters, you need to attach auCdl CDF simulation information (siminfo) to cells. This can be set using Tools – CDF – Edit menu commands and then choosing the library/cell.

The dollarParams and dollarEqualParams fields specify the parameters whose values have to be printed with a dollar ($) prefix.

The parameters specified in the dollarParams section are used to print the values of these parameters with a $ sign prefixed with the value. For example, if the dollarParams field contains param1, whose value on the instance L0 of type inductor (or its master or the library) is value1, then the netlist contains the instance statement as given below

LL0 net1 net2 $value1

The parameters specified in the dollarEqualParams are used to print the values on the corresponding instance, its master, or its library along with parameters with the $ prefix. For example, if the dollarEqualParams field in the CDF simInfo section contains param1, whose value on the instance L0 of type inductor or on its master or the library is value1, then the statement for the instance in the netlist is as follows:

LL0 net1 net2 $param1=value1

The values for the dollarParams and dollarEqualParams fields use the following precedence: the Instance value overrides the Master value, which overrides the Library value.

To print modelName with a $ sign prefixed to it, add the parameter TSMCMODEL in the instParameters dialog box in the auCdl – simInfo section. The same precedence as specified for the dollarParams and dollarEqualParams fields is used for the model value. For example, if the instance value of TSMCMODEL has a value LP of the type String, then the corresponding instance line in the netlist will contain the model description as:

LL0 net1 net2 $.MODEL=LP

The following is a comprehensive list of auCdl siminfo for all the supported devices.

Device CDF Values

FET

netlistProcedure

ansCdlCompPrim

instParameters

W L model

componentName

fet

termOrder

D G S

propMapping

nil W w L l m

namePrefix

j

modelName

NJ

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

CAP

netlistProcedure

ansCdlCompPrim

instParameters

C L W area SUB m

componentName

cap

termOrder

PLUS MINUS

propMapping

nil C c L l W w area a

namePrefix

C

modelName

CP

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

If you specify any or all of the following: C, area and L & W , the netlister will output only one of them by using the following sequence of priority: C, area, L & W.

IND

netlistProcedure

ansCdlCompPrim

instParameters

L tcl tc2 nt ic

componentName

ind

termOrder

PLUS MINUS

propMapping

nil L l

namePrefix

L

modelName

LP

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

DIODE

netlistProcedure

ansCdlCompPrim

instParameters

area SUB pj m)

componentName

diode

termOrder

PLUS MINUS)

propMapping

nil

namePrefix

D

modelName

DP

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

BJT

netlistProcedure

ansCdlCompPrim

instParameters

W L SUB M EA m

componentName

bjt

termOrder

C B E

propMapping

nil EA area

namePrefix

Q

modelName

NP

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

RES

netlistProcedure

ansCdlCompPrim

instParameters

R SUB W L m

componentName

npolyres

termOrder

P1 P2

propMapping

nil SUB sub R r W w L l

namePrefix

R

modelName

RP

Subcircuits

netlistProcedure

ansCdlSubcktCall

componentName

subcircuit

termOrder

in out

propMapping

nil L l

namePrefix

X

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

MOS

netlistProcedure

ansCdlCompPrim

instParameters

m L W model LDD NONSWAP

componentName

mos

termOrder

D G S progn(bn)

propMapping

nil L l W w

namePrefix

M

modelName

dollarParams

param1, param2, param3

dollarEqualParams

param1, param2, param3

Netlist Examples

Here are some netlist examples:

Type Example

Two Terminal CAP

CC5 n3 gnd! 1p $[CP] M=10

Three Terminal CAP

CC32 n5 gnd! 1p $[CP] $SUB=n5 M=3

Two Terminal RES

RR8 n2 gnd! 1.2K $[res.mod] $W=4 $L=10 M=3

Two Terminal IND

LL1 n1 n3 1000 $[LP] $SUB=gnd!

Three Terminal RES (4.3.4)

RR3 n1 n4 1000 $[RP] $W=20 $L=100 $SUB=gnd! M=3

Three Terminal RES (4.4.x)

RR3 n1 n4 1000 $SUB=gnd! $[RP] $W=20 $L=100 M=3

Diode

DD6 a gnd! DP 10 3 M=12

FET

JJ7 d g gnd! fet.mod W=3 L=2 M=2

BJT

QQ4 c b gnd! NP M=12 $EA=100 $W=4 $L=3

MOS

MM1 g d gnd! gnd! nmos.mod W=3 L=2 M=2

auCdl has been enhanced such that while printing the instance of a cell whose switch master is a stopping view, the instParameters specified in the CDF siminfo section are also printed.

Support of Inherited Connection on Device Substrate

In such situations, the extra terminal (the third terminal on devices like resistors, capacitors etc. or the fourth terminal on devices like transistors) is found on the stopping view rather than the symbol view (instantiated view). So the substrate connection is resolved by finding the net attached to the first extra terminal on the stopping view in comparison to termOrder in the CDF.

In case of devices of type MOS, if progn(bn) is in the termOrder, then precedence would be given to progn(bn)and SUB would not be printed at all. Therefore for MOS devices, in order to use inherited connections on a substrate, you have to remove progn(bn) from the termOrder of the siminfo section of the base CDF of the device.
If you specify useCDFTermOrder in the otherParameters field of the auCdl siminfo of a cell, the connectivity order is according to the CDFtermOrder for this cell and its instance calls.

What is Different in the 4.3 Release

An auCdl netlist can be extracted by following these steps:

  1. In the CIW, click File – Export – CDL
  2. In the CDL Out Run form, fill in the appropriate fields and click OK or Apply.

For more information about using CDL Out, read the Translating CDL Files section in the Design Data Translator’s Reference.

The following si.env parameters are used in the 4.3.x release only.

Parameter Description

simLibConfigName

The name of the configuration that determines the versions of cellview used in the design hierarchy. The default is nil.

simVersionName

Name of the top-level version of the design. The default value is nil.

simLibPath

Specifies the library search path for the library that contains both the top-level cellview and the global cellview.

Complete Example

The following example shows the schematic captures and the auCdl netlists.

This is the auCdl netlist.

**************************************************************
*auCdl Netlist:
*
* Library Name: test_auCdl
* Top Cell Name: AMckt.auCdlonly
* View Name: schematic
* Netlisted on: Nov 1 16:12:40 1997
**************************************************************
*.BIPOLAR
*.RESI = 2000 resmod
*.RESVAL
*.CAPVAL
*.DIOPERI
*.DIOAREA
*.EQUATION
*.SCALE METER
.PARAM
*.GLOBAL vdd! + vss! + vcc! + vee! + gnd! *.PIN vdd! *+ vss! *+ vcc! *+ vee! *+ gnd! ************************************************************** * Library Name: test_auCdl * Cell Name: amplifier * View Name: schematic ************************************************************** .SUBCKT amplifier inm inp iref out *.PININFO inm:I inp:I iref:I out:O RR0 net52 net6 2.5K $[RP] CC0 net6 out CAP $[CP] QQ0 out net52 vss! NP M=1 MM1 net52 inp net26 vdd! PM W=128e-6 L=8u M=1 MM3 gnode inm net26 vdd! PM W=128u L=8e-6 M=1 MM5 gnode gnode vss! vss! NM W=100u L=10u M=1 MM2 net52 gnode vss! vss! NM W=100u L=10u M=1 QQ4 out iref vdd! PN QQ2 iref iref vdd! PN QQ3 net26 iref vdd! PN .ENDS ************************************************************** * Library Name: test_auCdl * Cell Name: AMckt.auCdlonly * View Name: schematic ************************************************************** .SUBCKT AMckt.auCdlonly Iref Vlo Vo1 Vs *.PININFO Iref:I Vlo:I Vo1:O Vs:I XI3 net28 Vlo Iref net9 / amplifier QQ2 net15 net9 net28 NP M=1.0 QQ1 vcc! gnd! net15 NP M=1.0 QQ0 Vo1 Vs net15 NP M=1.0 RR0 vcc! Vo1 10e3 $[RP] RR1 net28 vee! 4e3 $SUB=vee! $[RP] .ENDS

Return to top
 ⠀
X