BugHunter Pro and the VeriLogger Simulators

8.5 Recommended Modeling Style Verilog

8.5 Recommended Modeling Style Verilog

Previous topic Next topic  

8.5 Recommended Modeling Style Verilog

Previous topic Next topic  

Verilog Supported and Unsupported Constructs

The following constructs are supported by Verilog2VHDL.

Data Types

Supported

•wire, tri, supply0, supply1, memory, integer, time, real, reg, parameter

Not Supported

•net type(s) tri1, wand, triand, tri0, wor, trior, trireg

•expand range, charge strength, drive strength, delay specification for net declaration

Expressions

Supported

•operand types : net, register, bit-select, bit-slice

obinary logical operators:

oII, &&, !=, ==

obinary relational operators:

o<, <=, >, >=

•operand types : number, time, integer, net part-select, register part-select

ooperators:

o{}, arith. operators, mod, !, ===, !==, <<, >>, ?:

ounary operators:

o&, ~&, I, ~I, ^, ~^ or ^~

Continuous Assignment Statements

Supported

•Left hand side : net (vector or scalar), constant bit select of a vector net, constant part select of a vector net, concatenation

•Delays of type (rising) only, can be of (min/typ/max) type

•Net declaration Assignment

Not Supported

•drive strength

•delays of type (rising, falling, turnoff)

•(force, release continuous assignment

Procedural Assignments

Supported

•Left hand side : register (vector or scalar), constant bit select of a vector register, constant part select of a vector register, memory element, concatenation

•Blocking procedural assignment

•Non-blocking procedural assignment

•Delays of type min/typ/max

Not Supported

•procedural continuous assignment (assign, deassign, force, release)

Gate and Switch Level

Supported

•gate type: and, nand, nor, or, xor, xnor, buf, not, bufif0, bufif1, notif0, notif1

•Delays of type (rising) only, can be of (min/typ/max) type

Not Supported

•gate type: nmos, pmos, cmos, rnmos, rpmos, rcmos, tran, tranif0, tranif1, rtran, rtranif0, pullup, pulldown

•drive strength

•delays of type (rising, falling, turnoff)

Behavioral Modeling

Supported

•always

•initial

•conditional if-else-if

•case, casex, casez

•for

•forever, repeat, while loops

•tasks

•function calls

Not Supported

•named events

•parallel blocks (fork/join)

Hierarchical Structures

Supported

•module

•ports: input, output, inout

•module instantiation

•named port connection with concatenated names

•macromodule

Not Supported

•hierarchical names

System Tasks and Functions

Supported

•$display

•$fdisplay

•$write

•$fwrite

•$strobe

•$fstrobe

 Supported

•%b, %d format specification (%h and %o are treated as %b)

•scalars, vectors of nets and registers, string, time, integer type

 Not Supported

•Type conversions for scalars, vectors of nets and registers, string, time, integer type

•Format specification %c

•$readmemh

•$readmemb

 Supported

•1 entry per line in data file; only !//! type of comments

•No address or two addresses in $readmem call

•constant integer addresses

 Not Supported

•Multiple entries per line in memory data file; !/* */! type of comments

•One address in $readmem call

•vector addresses

•$fopen

•$fclose

•$time

•$realtime

•$timescale

•$rtoi

Not Supported

•all other system tasks

•all other system functions

Compiler Directives

Supported

•`timescale

•`define

•`ifdef / `ifndef (with vpp)

Not Supported

•all others

 

 

Recommended Verilog Coding Style

This section is devoted to making the user conversant with what is best translated by Verilog2VHDL. This is a very useful section for users who intend to use the tool on a continuous basis e.g library model developers. By enforcing the use of the constructs supported by verilog2vhdl in model development, a fully automatic VHDL translation can be achieved.

Verilog2VHDL supports a very large subset of the Verilog language. The user should read the Supported and unsupported section  for a complete understanding of supported constructs.

As a rule of the thumb, almost all synthesizable constructs are supported by the tool.

Unsupported constructs

The following constructs are NOT supported by Verilog2VHDL. The user is strongly advised not to use these constructs in the input file. The user is warned via messages when these constructs are encountered in the input description. Comments are also inserted in the output file to pinpoint the relative location of the unsupported construct.

All Verilog2VHDL generated comments have the following format:

- *** NOTE: In file <input filename>, at line <line number in input file>:

- *** NOTE: <message indicating the type of construct not translated>

If the user has indeed no choice but to use the following constructs, the Known problems section has information on the manual editing required to obtain equivalent VHDL.

Verilog constructs not supported are listed below:

•UDPs

•assign and deassign procedural assignments

•force and release procedural assignments

•parallel blocks

•task disable

•specify blocks

 

Supported Constructs

The following Verilog constructs are supported. When applicable, each sub-section also has some relevant do's, don'ts and caveats.

•Numbers:

All forms of numbers are supported. When using numbers in the binary, decimal, hex, or octal format always use sized vectors e.g 4'b 0010 for best results.

•Identifiers:

All VHDL keywords (see Verilog2VHDL User's and Reference Manual) are included in the Verilog2VHDL reserved list of identifiers.

oAvoid hierarchical names

oAvoid using identifiers differing only in case; VHDL is a case-insensitive language

oAvoid using extended identifiers if not generating VHDL-93

oMake sure the Verilog identifier conforms to the following VHDL identifier requirement: letter {_}letter_or_digit

•Data Types: Do not use

ostrengths in net declaration

onet types other than `wire', `tri0', `tri1', `supply0' and `supply1'.

•Operators and Expressions: Do not use

o`signed and `unsigned compiler directives

odelay of the type (mintypmax_expression, mintypmax_expression, mintypmax_expression).

•Continuous Assignments: Do not use

ostrengths in net assignment.

odelay of the type (mintypmax_expression, mintypmax_expression, mintypmax_expression).

•Procedural Assignments: Do not

odrive a Verilog register in more than one block. This can result in mismatches between synthesis and simulation models. If there are multiple drivers for a design, Verilog2VHDL inserts the code needed to turn off drivers of inactive processes.

ouse a non-blocking assignment with intra-assignment delay.

•Gate level Modeling:

•Do not use switches e.g nmos, pmos. All gates are supported.

•Module instantiation:

oDo not connect output ports using expressions; i.e do not use the concatenation operator in the expression.

ouse parameter value assignment.

•always and initial blocks:

•If a signal needs to be initialized in the initial block, it needs to be assigned before any VHDL wait statement. In such cases, the initialize is moved up as a signal (or variable) initialization statement.

•Tasks, Functions, Task enables and Function calls: Always

oDeclare tasks before they are called.

oDeclare functions before using them in function calls.

oIn functions, be sure to assign to the function return value or variables declared inside the function; i.e do not write to registers declared at the module level.

•System tasks and functions: Always

olimit the usage of system tasks and functions to those supported by the tool ( see supported System Tasks and Functions).

oavoid using $monitor{on,off} system tasks.