- •Preface
- •About This Manual
- •Other Information Sources
- •Syntax Conventions
- •Text Command Syntax
- •About the Graphical User Interface
- •Using Menus
- •Using Forms
- •HDL Synthesis Overview
- •HDL Synthesis Flow
- •Read Technology Libraries
- •Read Design Data
- •Build Generic Design
- •Save Generic Netlist
- •Synthesizing Mixed VHDL/Verilog Designs
- •Querying the HDL Design Pool
- •Using get_hdl_top_level Command
- •Using get_hdl_hierarchy Command
- •Using get_hdl_type Command
- •Building Generic Netlists from HDL
- •Multiple Top-Level Designs
- •Building Parameterized Designs
- •Verilog Modeling Styles
- •Modeling Combinational Logic
- •Register Inferencing
- •Latch Inference
- •Flip-Flop Inference
- •case Statements
- •Incomplete case Statement
- •Complete case Statement
- •Use of casex and casez Statements
- •for Statement
- •Synthesis Directives
- •Code Selection Directives
- •Architecture Selection Directive
- •case Statement Directives
- •Module Template Directive
- •Function and Task Mapping Directives
- •Set and Reset Synthesis Directives
- •Verilog Preprocessor Directives
- •Compiler Directives
- •The ‘for Compiler Directive
- •The ‘if Compiler Directive
- •The ‘eval Compiler Directive
- •The ‘{} Compiler Directive
- •Command Line Options
- •VPP Flag Attribute
- •Verilog-Related Commands and Globals
- •VHDL Modeling Style
- •Modeling Combinational Logic
- •Register Inferencing
- •Latch Inference
- •Flip-Flop Inferencing
- •Specifying Clock Edges
- •case Statement
- •Incomplete case Statement
- •Complete case Statement
- •for loop
- •Synthesis Directives
- •Code Selection Directives
- •Architecture Selection Directive
- •case Statement Directive
- •Enumeration Encoding Directive
- •Entity Template Directive
- •Function and Procedure Mapping Directives
- •Signed Type Directive
- •Resolution Function Directives
- •Type Conversion Directives
- •Set and Reset Synthesis Directives
- •Reading VHDL Designs
- •Using Arithmetic Packages From Other Vendors
- •Switching between VHDL’87 / VHDL’93
- •Reusing Previously Analyzed Entities
- •Modifying Case of VHDL Names
- •Writing VHDL Netlists
- •Selecting Bit-Level Representation
- •Selecting Between VHDL’87 and VHDL’93
- •Referring to VHDL Packages in Netlists
- •Writing Component Declarations
- •Hierarchical VHDL Designs
- •Component Instantiations and Bindings
- •Restrictions on Entities with Multiple Architectures
- •Precedence Rules for Architecture Selection
- •VHDL-Related Commands and Globals
- •Finite State Machine Overview
- •BuildGates Synthesis and Finite State Machines
- •Extracting the State Transition Table for the FSM
- •Viewing the State Transition Table for the FSM
- •FSM Optimization Features
- •Unreachable State Removal
- •State Assignment or Re-Encoding
- •State Minimization
- •Terminal State Check
- •Verilog and VHDL FSM Directives
- •Verilog FSM Directives
- •VHDL FSM Directives
- •FSM Coding Styles
- •Using the -reachable Option
- •Avoiding a Simulation Mismatch
- •EDIF Interface
- •Reading EDIF Designs
- •Writing EDIF Designs
- •Representing Power and Ground in EDIF
- •Net Representation for Power and Ground
- •Port Representation for Power and Ground
- •Instance Representation for Power and Ground
- •Verilog Constructs
- •Fully Supported Constructs
- •Declarations
- •Operators and Expressions
- •Partially Supported Constructs
- •Ignored Constructs
- •Unsupported Constructs
- •Summary of Verilog Constructs
- •VHDL Constructs
- •Notes on Supported Constructs
Envisia HDL Modeling Reference
VHDL Modeling Style
Writing VHDL Netlists
This section describes how to write VHDL netlists.
Selecting Bit-Level Representation
When saving the VHDL file with the write_vhdl command, the netlister preserves the port types of the current entity’s ports during netlisting. This requires generation of conversion functions that transform potentially complex VHDL port types to a simpler bit-level representation. Such conversion functions are encapsulated in a package that is generated by the netlister.
All descendant module ports are always written with the equivalent bit-level representation.
For a module that did not originate as a VHDL entity, the module’s port is also written out with the equivalent bit-level representation.
Use the global variable hdl_vhdl_write_bit_type to determine the type of the bit-level representation used in VHDL netlists. The allowed values are std_logic or std_ulogic. The default value is std_logic. For example:
ac_shell[1]> set_global hdl_vhdl_write_bit_type std_ulogic
The above command maps bit ports to internal std_ulogic ports and integer ports to internal std_ulogic_vector signals.
Note: If you do not want to preserve the original VHDL port types, use the -no_wrap option to write the module with std_logic types. Refer to the write_vhdl command in the
Envisia and Ambit Command Reference for details.
Selecting Between VHDL’87 and VHDL’93
Use the global hdl_vhdl_write_version to specify the VHDL version of the netlists that are written out using the write_vhdl command. For example:
ac_shell[1]> set_global hdl_vhdl_write_version 1987
The above command ensures that the VHDL netlists that are written out conform to the VHDL’87 standard. The default value for this global is 1993.
If you write VHDL netlists in the VHDL’87 mode, care must be taken to avoid illegal names that might be generated by synthesis. When busses are bit-blasted, the individual net names are formatted as specified by the global buscomp_generator. By default, names for the nets of a bus are generated with the square brackets (b[1]). Such names are illegal in VHDL
September 2000 |
81 |
Product Version 4.0 |
Envisia HDL Modeling Reference
VHDL Modeling Style
’87 and can be avoided by setting the following global prior to any do_build_generic command:
ac_shell[2]> set_global buscomp_generator %s_%d
This does not apply to VHDL ’93 mode netlists, since a name such as b[1] is written out as an escaped name \b[1]\.
Referring to VHDL Packages in Netlists
Use the global variable hdl_vhdl_write_packages to specify the set of library and use clauses that must precede every module that is being written out. For example:
ac_shell[1]> set_global hdl_vhdl_write_packages\
"ieee.std_logic_1164 atl.comps1 atl.comps2"
This results in the following clauses preceding every module that is written out:
library ieee;
use ieee.std_logic_1164.all;
library atl;
use atl.comps1.all;
use atl.comps2.all;
The default value of this global is ieee.std_logic_1164.
Writing Component Declarations
Use the global variable hdl_vhdl_write_components to specify whether the netlister should write out component declarations for the technology cells that are referred to within the modules.
In the example below, if the component declarations for all the cells in the technology library clib are encapsulated in a package called components,writing component declarations for individual modules can be disabled by setting hdl_vhdl_write_components to false,and making the components package visible to all modules being written out.
ac_shell[1]> set_global hdl_vhdl_write_components false
ac_shell[2]> set_global hdl_vhdl_write_packages\
"ieee.std_logic_1164 clib.components"
The default value for this global is true.
September 2000 |
82 |
Product Version 4.0 |