Product Documentation
Virtuoso VHDL Toolbox User Guide
Product Version IC23.1, June 2023

3


Netlisting a VHDL Design

This chapter describes the steps to netlist your VHDL design.

In this chapter, you will learn about the following topics:

Initializing the Run Directory

In the VHDL Toolbox, choose Commands - Initialize Run Dir option to initialize the run directory that you specified in the Run Directory field and to validate the top design. The run directory is initialized with the default directory structure required to create hierarchical netlists.

The fixed menu commands become available after you initialize the run directory.

Configuring the VHDL Netlister

You can configure the VHDL netlister to customize the netlisting environment. Netlister configuration includes the following tasks:

In addition, following are some additional features of the netlister:

For information on the SKILL functions associated with VHDL Toolbox, see Digital Design Netlisting and Simulation SKILL Reference.

Customizing Pre- and Post-Processing Functions

The VHDL Toolbox allows you to customize and run the pre- and post-processing SKILL functions before you start the VHDL Toolbox. A pre-processing function executes before the netlisting starts while a post-processing function executes after the netlisting completes. VHDL Toolbox supports the hnlVHDLPreNetlistFunc()and hnlVHDLPostNetlistFunc()pre- and post-processing functions, which you can define in the .cdsinit or .simrc file. The following example shows how to define the hnlVHDLPreNetlistFunc() function:

procedure(hnlVHDLPreNetlistFunc()
 printf("Welcome to VHDL Netlister !!\n")
)

The following example shows how to define the hnlVHDLPostNetlistFunc() function:

procedure( hnlVHDLPostNetlistFunc()
 printf("Done with VHDL Netlisting !!\n")
)

Setting up Hierarchical Specifications

You need to set up hierarchical specifications before you can netlist your design. The hierarchical specifications specify how the cellviews combine to form a hierarchy. When you netlist your design, each top-level block is bound to an architecture cellview or schematic cellview. For example, you might bind the memory block to a behavior architecture cellview and a cntl_1 block to a schematic cellview.

The VHDL Setup - Netlist form enables you to specify different component configurations, such as Cadence HED Configuration, or Switch View and Stop View List, for your design at any given time.

To open the VHDL Setup - Netlist form:

Netlist Options Tab

The following tables describe the various options on the Netlist Options tab.

Specifying the Traversal Settings

Option

Description

Switch View List

Specifies a list of views that define how the top cell/design is traversed. The top/cell design is finally netlisted as per the stop view list.

Default: stimulus schematic structural dataflow behavioral symbol

To generate the entity based on the symbol views, set the following flags in the .simrc file:

  • hnlVHDLGenerateEntityFromSymbol = t to generate entity and component with view name symbol for all cells except stop cells.
  • hnlVHDLEnableDataTypePropagation = nil to stop data propagation while netlisting.
  • hnlVHDLGenerateEntityFromSymbolForStopCell = t to generate entity and component with view name symbol for stop cells.

Stop View List

Specifies a list of views, which indicates the last levels of hierarchy needed for the netlist. If the switch view selected by a netlister is available on the stop view list, the hierarchy stops expanding. This indicates that the entity/architecture for the cellview is not required to be generated. The netlister prints only the instance line in the final netlist. If the current switch view is not available in the list, netlisting continues with the next level of hierarchy.

Default: symbol behavioral

Stop Library List

Specifies a list of libraries, which contain the cells, which you do not need to traverse while netlisting a design. These cells are treated as stop cell views. If the library of the current instance appears in this list, the instance is not expanded further and only the instance line is printed in the final netlist.

Default: sample basic ieee

Enforce VHDL Binding for View(s)

Specifies a list of proxy symbol views to be used for resolution of inherited connections. For more details about inherited connections, refer to Setting up the VHDL Netlister for Inherited Connections

Skip Design Units

Specifies a list of libraries or library cells that are to be skipped while netlisting a design. If the library or library and cell name of the current instance appears in this list, the instance is ignored while netlisting and is not printed in the final netlist.

To ignore design cells, you do not need to set the design properties as nlAction=ignore or nlIgnore=vhdl. You can only specify the library cells in the Skip Design Units table.

Setting up Netlisting Controls

Option

Description

Netlist CDF parameters for

Lists the simulators, which are used to determine the parameters that need to be translated into VHDL generics. You can select any of these simulators depending on your need. The netlister reads instParameters field of the simulation view simInfo section in the cell CDF to resolve the parameter list.

Default: NONE

Netlisting Mode

Enables you to re-netlist the entire design. The VHDL Toolbox does not support the Incremental netlist mode. The ReNetlist All option regenerates files for every design unit in the hierarchy.

Default: ReNetlist All

Evaluate Inherited Connections

Specifies that the inherited connections should be evaluated before generating netlist. The netlister evaluates the expressions for inherited connections, stored with the netSet and netExpr attributes, and prints extra cellview terminals or pseudo ports for the explicit and implicit terminals.

Default: On

For more information about support for inherited connections, refer to Setting up the VHDL Netlister for Inherited Connections

Analyze(Compile) Design Units

Specifies whether to compile the design units before elaborating the entire design.

Default: Off

Elaborate Design

Specifies whether to elaborate the compiled design units.

Default: Off

Enable Split Configuration

Specifies whether to generate the configurations of all the cellviews in your design, instead of generating a single top-level configuration.

Default: Off

Generate Test Bench Template

Specifies whether to generate top level VHDL test bench template for the design automatically. A test bench file with a default name test_bench.vhd is saved in the run directory.

Default: Off

To view and edit the auto generated test bench, choose Commands – Edit Test Bench. For more details, refer to Chapter 4, “Creating a Testbench.”.

Detailed Report

Specifies whether to display the debug messages generated while netlisting a design on Virtuoso Studio Design Environment workbench. These messages are automatically added to the CDS.log file. The messages include the information on how the netlister has resolved the inconsistencies while netlisting a design. Turn this option On if you need to display the messages.

Default: Off

Max Errors

Specifies the maximum number of errors after which design compilation or elaboration aborts.

Default: 10

VHDL Options Tab

Option

Description

Netlist Identifiers as

Lists the options to specify whether the identifiers, such as instance names and net names, should be converted using CDS NMP or their case should be preserved.

By default, the value of Netlist Identifiers as is set to Converted using CDS NMP. With this option, the netlister uses Cadence name mapping and OSS tabular format. It translates all identifiers that are illegal in VHDL or contain uppercase characters to valid VHDL names using escaped name style. For example, an identifier aBc is translated as \aBc\ to preserve the uppercase character during simulation.

To keep the case of the identifiers, set the value of Netlist Identifiers as to Case Preserved. In this case, an identifier aBc is saved with same name as aBc, but the uppercase of characters will not be preserved during simulation.

VHDL IEEE Syntax

Specifies the version of VHDL IEEE standard that is used to generate a netlist. The netlists are generated using any of the two versions, 1076-1993 or 1076-1987.

Single Netlist File

Specifies whether to create a single netlist file or multiple netlist files for VHDL design units. A single netlist file is generated with VHDL description of all non-primitive design units, by default. Turn this option off if you need to create multiple netlist files.

Default: On

For more information about analyzing netlists, refer to Analyzing the Netlist

VHDL Library Binding

Specifies the compile library to which the netlister binds the design units. The netlister has two binding options, Preserve and Merge. The Preserve option binds the design units to the associated DFII library and the Merge option binds the netlisted design units to a single logical VHDL library, work. If the Single Netlist File option is on, the Merge library binding option is also on by default. However, if you need to switch to the Preserve option, you should first turn off the Single Netlist File option.

When the VHDL library binding is set to Preserve and the hnlVHDLConfigUseLibNameForStoppingCell variable is set to t, the config file prints the specified library name, instead of the single logical VHDL library work for stop cells as well.

VHDL Instance Binding

Indicates that the instances are directly bound into the architectural description. The netlister has two instance binding options, Direct and Configuration. The default instance binding option is Direct. For more information, refer to Support for Instance Bindings.

Bus Range Notation

Specifies the direction in which bus ranges should be printed for all vector signals. You can set this option as one of the following values:

  • Ascending: Bus ranges should be printed in ascending order. For example, PORT ( a : IN bit_vector( 1 TO 5 ) ).
  • Descending: Bus ranges should be printed in descending order. For example, PORT ( a : IN bit_vector( 5 DOWNTO 1 ) ).
  • Auto: Bus direction should be same as specified in the schematic.

If the bus ranges are given in both the directions and the Bus Range Notation is set as Auto, it is not defined how the bus ranges will be printed in the netlist. The netlister can print the bus ranges in any direction. Therefore, in these cases, it is recommended to set the value of this field as Ascending or Descending.

Default: Auto

For the default mode, to print the vector signals in the order specified in the design, set the hnlVHDLMergeSignals variable to t. If a design has a descending bus and this variable is set to t, then the signal will be printed in descending order, irrespective of whether ascending part has more number of bits.

However, if the design contains a complete bus (a<0:7>) containing all of the bus bits (a<0:7> a<1>, and a<5:4>), the signal will be printed in ascending order.

Default Data Type (for non-VHDL Views)

Contains a list of default data types, which can be used for the ports and signals in a netlist, if no information can be extracted from a design. A default signal scalar type (example: STD_ULOGIC) and vector type (example: STD_ULOGIC_VECTOR) is specified. You can modify these values when a signal type cannot be derived from an external VHDL model.

Default: bit

You can configure port type and port direction by using the .simrc file. For more information on inherited ports, refer to Configuring Pseudo Ports.

Default Text

Contains the following information:

  • VHDL Netlist Header: Allows you to add a default comment string before each netlisted cellview (entity/architecture/package/configuration). The comment string is parsed for the keywords <libraryName>, <cellName>, <viewName>, <user>, and <dateStamp>. When these keywords are in the comment string, these are replaced by their respective values during netlisting.
  • VHDL Default Context Clause: Lists the package names to be inserted in the context clause of each VHDL design unit generated by the netlister. A context clause consists of:
    • Library
    • Package
    • Selector

    You can add, modify, or delete the value of the context clause.
You can configure the indentation of the text by setting the hnlVHDLIndentText flag to t. You can also set the maximum line length by setting the hnlMaxLineLength flag.

Data Types

Allows you to specify user-defined data types that may be used in a design. The VHDL netlister need to know the scalar and vector names of a given data type because in VHDL, scalar and vector are different types. The data types can be specified in a tabular format in the following fields:

  • Scalar: Specifies the scalar name of the data type, such as bit.
  • Vector: Specifies the vector name of the data type, such as bit_vector.
  • Format: Specifies the printing format, such as LOGIC, INTEGER, REAL, STRING, and BOOLEAN.
  • Def Value: Specifies the default value printed for the ports of this data type.
    During netlisting, this default value is printed for pins if the variable hnlVHDLPrintPortInitialValue=t (default value). For example, if you set the default value for a scalar std_logic as `0', then it will be printed as follows:
    ENTITY and2_sch IS
    PORT(
    c : OUT std_logic := '0';
    However, if hnlVHDLPrintPortInitialValue=nil, then the default value is not printed. For example,
    ENTITY and2_sch IS
    PORT(
    c : OUT std_logic;

You can add, modify, or delete the data types, if required.

Ext. Sources

Lets you specify external VHDL sources to be used during netlisting. The Ext. Sources tab contains the VHDL External Source Directories table in which you can specify libraries and their directory paths. For more information, see Support for External VHDL Source Files.

Generic Defaults

Allows you to add, modify, or delete generics for an instance or cell. For more information about generics, see Modeling Instance Properties as Generics.

Other Options Tab

The following figure shows the Other Options tab on the VHDL Setup - Netlist form:

The various options on the Other Options tab are:

Option

Description

VHDL Configuration Name

This option provides the control to specify the configuration name while generating instance binding in config mode. For more information, refer to VHDL Instance Binding option.

Default: config_vhdl

VHDL Configuration File Suffix

This option displays the suffix for the configuration file of your design. However, this feature is no longer supported.

Default: -cfg

Setting up the VHDL Netlister for Inherited Connections

Inherited connections allow you to create global signals and override their names for selected branches of the design hierarchy. This section explains how VHDL Toolbox provides support to evaluate inherited connections during netlist generation.

An inherited connection is defined using the netExpr property in a lower-level schematic, which can also be overridden using the netSet property in a higher-level schematic. VHDL language does not support textual attributes such as netSet and netExpr. Therefore, the netlister evaluates these attributes and prints extra ports, called pseudo ports, in the netlist. The pseudo ports are created in the entity of the cellview being translated and is used to pass the inherited data signal up and down in the hierarchy. The names of these ports are prefixed with inh_ and are also assigned a default data type, which is obtained from the instance connection in the schematic design. For example,

entity myinv is

port (
a : in bit;
y : in bit;
inh_powr : inout std_ulogic );

here, inh_powr is a pseudo port. The direction of the pseudo ports is always inout.

The connection from an instance terminal to an inherited signal is either a resolved netSet value or a pseudo terminal net. In the following example, inh_powr is a resolved net,

inst0: entity work.myinv
port map (
   a => neta,
   b => netb;
   inh_powr => vdd_global
);

In the following example, inh_powr is a pseudo terminal net,

inst1: entity work.myinv
port map (
   a => neta,
   b => netb;
   inh_powr => inh_powr
);

At the top level, all inherited connections are resolved to the netSet value or the default value of netExpr. Therefore, no pseudo ports exist at the entity interface.

For more details on inherited connections, see Chapter 2, Understanding Connectivity and Naming Conventions of Virtuoso Schematic Editor L User Guide.

You can specify the choice to evaluate inherited connections in three ways (listed in the order of preference from highest to lowest):

Configuring Pseudo Ports

Pseudo ports are by default prefixed with inh_. You can customize this prefix string as per your requirement using the hnlInhConnPrefix variable in the .simrc file. If you do not want to prefix the pseudo ports with any string, set this variable to "".

The default port type of the pseudo ports is INOUT and their data type is same as the default VHDL data type set using the hnlVHDLDefaultDataType variable. However, you can set a different default data type and port type for these ports using the hnlVHDLDefaultInhPortDataType and hnlVHDLDefaultInhPortMode variables, respectively.

Support for Implicit Inherited Connections for Leaf Cells

By default, the netlister does not consider the implicit inherited net expressions on wires of leaf (stopping) cellviews. To honor such inherited net expressions, set the following variables in the .simrc file:

When these flags are set, the netlister evaluates the implicit inherited net expression on wires of the stopping cellviews and creates pseudo ports at the top level, wherever required.

Support for Proxy Views

VHDL text views do not support textual attributes for inherited connections. Therefore, to print the inherited connections in the netlist, you need to create proxy views that contain description of the desired inherited pins and terminals. This section explains how the VHDL Toolbox provides support for printing inherited connections in the netlist by using proxy views.

The Netlist Options tab on the VHDL Setup - Netlist form contains the Enforce VHDL Binding for View(s) field, shown in the figure below. This field enables you to specify a list of proxy symbol views to be used for resolving inherited connections.

The netlister uses these proxy symbol views, in place of actual VHDL views to resolve inherited connections. After resolving the inherited connections, the netlister uses the actual VHDL text views for data type propagation. If proxy symbol views are not specified, the netlister directly uses actual VHDL text views. In this case, the inherited terminals are not resolved.

Default: symbol_inh

The following restrictions apply to the resolution of inherited terminals using proxy views:

The VHDL-OSS netlister supports the use of proxy views by using the same proxy for multiple VHDL architecture views while binding cells in HED. Therefore, you can bind cells or instances to multiple VHDL architectures and specify one proxy view for resolving inherited connections.

To support proxy views, the following prerequisites must be met:

When the netlister finds an instance with VHDL view binding, it uses the first-found view in the proxy view list to resolve inherited connections. If no proxy views are specified in the list, the actual VHDL view is used, which is the same behavior as without proxy views.

Proxy views should not be specified in the Switch View or Stop View lists of hierarchical specifications.
The proxy view is enforced only for VHDL text views. For all non-vhdl views, such as schematic, Verilog, SV, or Verilog-a, the proxy view is not used. Proxy view support is applied on the basis of view types instead of view names. IC 6.1.5 release supports only VHDL-D views.

Additional Features of the Netlister

Support for Generating the Configurations of All the Cellviews in a Design

You can generate the configurations of all the cellviews in your design, instead of generating a single top-level configuration of the design using hnlVHDLSplitInstsInConfig. To enable this feature, set hnlVHDLSplitConfigEnabled to t. For example, you can add the following entry in the .simrc file.

hnlVHDLSplitConfigEnabled = t

The variable hnlVHDLSplitConfigEnabled works with VHDL IEEE 1993 format with the configuration mode enabled in the netlister.

The following snippets illustrate parts of a netlist generated when hnlVHDLSplitConfigEnable is set to t. Note the bold text that illustrates how the configuration of a cellview is included in the netlist.

--Netlist:
...
...
LIBRARY IEEE,STD;
USE IEEE.std_logic_1164.all;
CONFIGURATION xor_schematic_config OF \xor\ IS
FOR schematic
FOR ALL: myinv_logic
USE ENTITY WORK.myinv_logic(behavioral);
END FOR;
END FOR;
FOR \I1\: myand2
USE ENTITY WORK.myand2(behavioral);
END FOR;
FOR ALL: myor2
USE ENTITY WORK.myor2(dataflow);
END FOR;
END FOR;
END CONFIGURATION xor_schematic_config;
...
...
-- Netlist:
-- Library=testlib,Cell=top1,View=top1_schematic_config
...
LIBRARY IEEE,STD;
USE IEEE.std_logic_1164.all;
CONFIGURATION top1_schematic_config OF top1 IS
FOR schematic
FOR ALL: myxor
USE ENTITY WORK.myxor(behavioral);
END FOR;
FOR \I3\: \generate\
USE ENTITY WORK.\generate\(behavioral);
END FOR;
FOR ALL: \xor\
USE CONFIGURATION WORK.xor_schematic_config;
END FOR;
END FOR;
END CONFIGURATION top1_schematic_config;

The following snippets illustrate parts of netlist of the same design when hnlVHDLSplitConfigEnable is not set or set to nil. Note that the configuration of the cellview is missing and the top-level configuration is in the expanded form.

--Netlist:
...
...
-- Netlist:
-- Library=testlib,Cell=top1,View=top1_schematic_config
...
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
...
CONFIGURATION config_vhdl OF top IS
FOR schematic
FOR mb1: mid|
USE ENTITY WORK.mid(behavioral);
FOR behavioral
FOR lb1: myor2
USE ENTITY WORK.myor2(behavioral);
END FOR;
FOR lb2: myor2
USE ENTITY WORK.myor2(behavioral);
END FOR;
END FOR;
END FOR;
FOR mb2: mid
USE ENTITY WORK.mid(dataflow);
FOR dataflow
FOR lb1: myor2
USE ENTITY WORK.myor2(dataflow);
END FOR;
FOR lb2: myor2
USE ENTITY WORK.myor2(dataflow);
END FOR;
END FOR;
END FOR;
END FOR;
END CONFIGURATION config_vhdl;

Support for Instance Bindings

You can set VHDL Instance Binding Direct or Configuration option on the VHDL Options tab. If the instance binding is set as Direct and the syntax is IEEE 1993, all the instances are bound directly to their library/entity/architecture in the architectural description. If the syntax is IEEE 1987, instances are bound to components and component declarations and configuration specifications are printed in the architecture.

If the instance binding is set as Configuration, all instance bindings are deferred in a separate VHDL file called VHDL config file. Here, instances are bound to components and only component declarations are printed in the architectural description. With the Configuration option, the VHDL netlister enables you to generate two views: compact and detailed. By default, the VHDL Netlister generates a compact configuration view.

To generate a detailed configuration view such that binding is present for each instance, set the hnlVHDLSplitInstsInConfig variable to t.

To generate a configuration view that contains detailed binding for specific cells, provide the list of cells to the hnlVHDLSplitInstsInConfig variable. For example, if you want to generate instance configuration in the netlist for instances myinst1 and myinst2, set the variable as follows:

hnlVHDLSplitInstsInConfig = '("myinst1" "myinst2")

Example of a Compact and Detailed Configuration View

Compact configuration view

FOR ALL: pm_capa_unitaire
    USE ENTITY
    AFE.pm_capa_unitaire(vhdlrn_functional);

Corresponding detailed configuration view

FOR cap_lr_0 : pm_capa_unitaire
USE ENTITY
AFE.pm_capa_unitaire(vhdlrn_functional);
END FOR;
FOR cap_lr_1 : pm_capa_unitaire USE ENTITY
AFE.pm_capa_unitaire(vhdlrn_functional);
END FOR;
FOR cap_lr_2 : pm_capa_unitaire USE ENTITY
AFE.pm_capa_unitaire(vhdlrn_functional);
END FOR;
You can print the keyword OTHERS instead of ALL by setting the SKILL variable hnlVHDLConfigSpecForCommonMaster="OTHERS" in the .simrc file. The default keyword is ALL.

Support for External VHDL Source Files

Each directory path can have multiple VHDL files. The tool identifies all the VHDL files in these directories as the external source files, parses them to extract the cell and port details, and binds them to the specified library (irrespective of the VHDL Library Binding option being set as Merge or Preserve). By default, the tool identifies files with .vhd or .vhdl extensions as VHDL files.

You can also specify the external source directories using the SKILL variable hnlVHDLExternalDirList. To specify a different set of file extensions, use the SKILL variable hnlVHDLDefFileExts .

If the name of an external VHDL cell entity is same as that of a design cell, the schematic of the design cell is treated as stop view and the hierarchy is not traversed further. Therefore, even if the schematic view of the design cell is not specified in the Stop View List, it will be treated as a stop view in this case.

VHDL text views may not exist for some cells, for such cells you need the VHDL Netlister to refer to external text files for specifying the port datatypes. The external VHDL sources can be specified in following ways:

While generating netlist using the external source files, the VHDL Toolbox considers the following points:

Support for Type Conflict Resolution

During hierarchical netlisting, VHDL-OSS netlister propagates data types of intermediate connecting signals and cellview ports by using a process called type propagation. Type propagation can lead to conflicts when:

In such cases, the netlister displays warning or error messages, but continues to generate the complete netlist, which is incorrect and cannot be elaborated.

To avoid such conflicts, you need to apply a resolution or a type conversion scheme. A resolution scheme involves providing a priority or type resolution table to find a resolved data type (see Using Type Resolution Tables). A type conversion scheme involves using a user-specified function that converts a signal of data type 'typeA' to data type 'typeB' (see Using Type Conversion Functions).

Using Type Resolution Tables

You can define the type resolution table by setting the hnlVHDLTypeResolverDefs SKILL variable in .simrc. During netlist generation, the tool searches the type resolution table to resolve any type conflicts. However, if any conflict is not resolved, the tool reports a warning message and completes the netlist.

If you want to change this default behavior so that the tool reports errors in case of unresolved type conflicts and discontinues the netlist generation, set the hnlVHDLTypeConflictSeverity SKILL variable as "error". By default, this variable is set as "warning".

Following are some examples to show how you can specify entries in the type resolution table:

Example 1:

hnlVHDLTypeResolverDefs = '("typeA" "typeB" "typeC")

This implies that if the netlister finds a signal or a signal bit with two propagated data types, typeA and typeB, the resolved data type to be used is typeC. Here, typeC can be any one of typeA and typeB or any other data type.

Example 2:

hnlVHDLTypeResolverDefs = '(("typeQ" "typeW" "typeQW") ("typeE" "typeR" "typeER") )

The above example provides a list of entries for the type resolution table.

Example 3:

If there are more than two conflicting types on a single signal, it is recommended that you provide all type conflicting pairs in the list so that complete type resolution can be done. For example, if signals of three different types: typeA, typeB, and typeC are inflicted upon a single wire, you should provide the type resolution entries for all the following cases:

hnlVHDLTypeResolverDefs = '(("typeA" "typeB" "typeR") ("typeA" "typeC" "typeR") ("typeB" "typeC" "typeR"))

Using Type Conversion Functions

When a netlister finds a signal connected to several instance terminals of different types, it prefers the data type of the output instance terminal and assigns it to the signal. The netlister then adds a conversion function at the instance terminal signal (in PORT MAP section of the netlist) wherever the data type of the instance terminal is different from that of the preferred data type.

For example, in the figure below, signal case2_A on the output terminal I8/out_std has data type std_logic and is connected to an input terminal I7/in_real with data type real. Therefore, a type conversion function that converts the signal from std_logic to real is added at the PORT MAP of input terminal I7/in_real.

By default, the PORT MAP information is printed using named port mapping. However, this information can also be printed using positional association by setting the hnlVHDLPositionalAssociation variable to t. For example, if this variable is set, the PORT MAP information would appear as

PORT MAP(
OUT2_A,OUT2_B,std_logic2real(\case2_A\),real2std_logic(\case2_B\)));

----------------------- x -------------------------------
ARCHITECTURE schematic of \TOP_test_vhdl\ IS
-- Local SIGNALS and ALIASES ---
SIGNAL \case2_B\ : real;
SIGNAL \case2_A\ : std_logic;
begin
\I7\: ENTITY WORK.testbox(behavior)
PORT MAP(
out_real => \OUT2_A\,
out_std => \OUT2_B\,
in_real => std_logic2real(\case2_A\),
in_std => real2std_logic(\case2_B\)
);
\I6\: ENTITY WORK.testbox(behavior)
PORT MAP(
out_real => \OUT2_C\,
out_std => \OUT2_D\,
in_real => std_logic2real(\case2_A\),
in_std => real2std_logic(\case2_B\)
);
END schematic;
----------------------- x -------------------------------

Every time a conversion function is added at the PORT MAP of the input terminal, the netlister displays the following message in CIW:

“In schematic '<l.c.v>', the signal(net) '<sig>' on instance terminal '<inst>:<termName>' having type '<typeA>' is connected to other instance terminals having type '<typeB>'. Therefore, a conversion function '<func>' will be added to resolve the conflict.”

Conversion functions are applied globally on the complete design. Currently, a local type conversion mechanism for individual instance ports is not available.

For type conversion to work, the following conditions must be satisfied with respect to the conflicting signal:

You can define a type conversion function by setting the hnlVHDLTypeConversionFuncs SKILL variable in CIW or in the .simrc or si.env files as follows:

hnlVHDLTypeConversionFuncs = list( "typeA" "typeB" "fn_typeA2typeB" "fn_typeB2typeA" )

For example, to convert data type typeA to data type typeB, the conversion function fn_typeA2typeB is applied, and vice versa.

For specifying several type conversion functions this list can be changed to a 'list of list' as shown in the following example:

hnlVHDLTypeConversionFuncs = list( 
 list( "typeA" "typeB" "fn_typeA2typeB" "fn_typeB2typeA" )
 list( "typeC" "typeD" "fn_typeC2typeD" "fn_typeC2typeD" )

)

Conflicts.log file

A conflicts.log file displaying resolved and unresolved conflicts is created when your design uses a type conversion function.

A typical conflicts.log file displaying resolved conflicts is as follows:

--------------------------------------------------------------------------------
RESOLVED CONFLICTS (testlib.basic1:schematic): 
--------------------------------------------------------------------------------
Type conflict detected on net: 'testlib.basic1:schematic/r2std'. Final type is: 'real'.
On this net types are (inst/term:direction:<type>):
 I0/out_real:OUT:<real>
 I1/in_std:IN:<std_logic> conversion function added: 'real2std_logic'

In this file, a conflict (that was resolved) is detected on the net r2std in the lib/cell:view testlib.basic1:schematic. The final resolved type is real.

A typical conflicts.log file with unresolved conflicts is as follows:

--------------------------------------------------------------------------------
UNRESOLVED CONFLICTS (TOP.TOP_test_vhdl:schematic): 
--------------------------------------------------------------------------------
Type conflict detected on net: 'TOP.TOP_test_vhdl:schematic/IN1'. Final type is: 'std_logic'.
On this net types are (inst/term:direction:<type>):
 I38/in_std:IN:<std_logic>
 I37/inout_real1:INOUT:<real>
 I37/inout_real2:INOUT:<real>
Type conflict detected on net: 'TOP.TOP_test_vhdl:schematic/IN2'. Final type is: 'real'.
On this net types are (inst/term:direction:<type>):
 I2A/in_real:IN:<real>
 I2A/in_std:IN:<std_logic>

In this file, an unresolved conflict was detected on the net IN1 in the lib/cell: view TOP.TOP_test_vhdl:schematic. The final conflict selected was std_logic.

In case of an internal conflict when only input terminals are connected to a wire, use the following variable to choose one type from the specified types: hnlVHDLPriorityTypes.

For example:

hnlVHDLPriorityTypes = list(?aType? ?bType?) ; aType is chosen over bType

Support for Shorting Devices

For OSS-based netlisters, you can short devices and replace them with a surviving net. For more information about how ports are shorted for devices, see “Removing Devices with Multiple Terminals” in Open Simulation System Reference:

To enable shorting for devices in the VHDL netlister, follow one of the methods listed below:

Notes:

Regardless of the method you use to short devices, you need to set the SKILL variable hnlHonorLxRemoveDevice to t in .simrc. By default, hnlHonorLxRemoveDevice is not set.

Support for Shorting Terminals

You can short two terminals in a schematic by adding a special instance between the terminals. The default instance for shorting terminals is of the cellview basic/cds_thru/symbol. The cds_thru symbol is used, instead of the patch symbol that is used for other shorts, to avoid any extraction error associated with the connectivity of the shorted terminals.

If you want to use another library and cell for shorting terminals, instead of basic and cds_thru, use the following flags and insert the symbol between the two terminals:

When you generate the netlist of a design where two terminals are shorted, the resulting netlist contains a cds_thru instance line, and not an assign statement. This instance line makes the netlist different from the imported netlist, which typically has an assign statement for the shorted terminals. To avoid this mismatch, configure VHDL Toolbox to print the assign statement instead of the cds_thru instance line to represent shorted terminals. For this, use the following flag:

You can set the flags in Virtuoso CIW, .simrc, or si.env.

The following figure illustrates the netlist with the cds_thru instance line and the netlist with the assign statement.

Resolving Floating Nodes

For resolving floating nodes, set the hnlVHDLPrintOpenForFloatingNode flag to t. When this flag is set, the keyword open is printed in the PORT MAP section for nodes that have no explicit net connected.

PORT MAP(
    RH_EN => open
);

Generating the Netlist

After you have completed the netlist setup, you generate the netlist by choosing Commands – Generate Netlist. Alternatively, you can generate a netlist by using the Netlist Design option on the fixed menu.

The Generate Netlist menu option triggers the netlister to generate the VHDL hierarchical netlist for a design specified in the Top Level Design fields. The tool supports incremental netlist generation and also provides the option to analyze and elaborate the generated netlist files. The netlister stops netlisting after the maximum number of errors that you have set is reached. If netlisting is successful, the message Netlisting Successful appears on the status line. The variables related to the OSS tabular name mapping are initialized to ensure that the generated netlist contains all the names in the VHDL namespace.

To display a message box on successful completion or failure of a netlist, set the hnlVHDLPopUpNetlistStatus flag to t.

Viewing Netlist Results

You can view the netlisted file for your VHDL design by choosing Results – Netlist. The VHDL netlist is saved as a .vhd text file in the run directory.

If you choose to create multiple netlist files for your VHDL design (by clearing the Single File List check box on the VHDL Options tab in the VHDL Setup - Netlist form), you cannot view the results. To view the results, ensure that the Single File List check box is selected.

Analyzing the Netlist

The netlist generated successfully by VHDL Toolbox is saved in a defined directory structure under the Run directory. The netlister creates the following files and directories to save the design details:

A set of cds<n> directories in the <Run Directory>/ihnl directory, where each cds<n> directory contains the entity and architecture description for each netlisted unit. The file containing the design entity is named as <cell_name>-e.vhd and the file containing the architecture description is named as <cell_name>-<view_name>-a.vhd.

A configuration file, suffixed as -cfg.vhd, containing the configuration details.

A global package named as <top-cell-name>_cds_globals saved in the cds_globals sub directory of the Run directory. This package contains declaration of all the global signals. For example:

package WORK.mytop_cds_globals is

signal vdd_global : std_ulogic;

signal \gnd!\ : bit;

end package;

The architecture design unit refers to this global package, as shown below:

use WORK.cds_globals.all;

If Cadence name mapping is used, the global signals are printed as escaped names. For example, \gsig!\. Otherwise, the ! character in the global signals is by default mapped to the string _global. You can change this mapping by resetting the hnlMapNetInName SKILL variable.

If the Single Netlist File option on the VHDL Setup - Netlist form is turned on, the contents of all the files listed above are concatenated and saved in a single file named as <topcellname>.vhd. This file is shown in a separate window when you view the netlist using the Results – Netlist menu option.


Return to top
 ⠀
X