The VHDL Code Generator (-tvhdl)¶
Icarus Verilog contains a code generator to emit VHDL from the Verilog netlist. This allows Icarus Verilog to function as a Verilog to VHDL translator.
Invocation¶
To translate a Verilog program to VHDL, invoke “iverilog” with the -tvhdl flag:
% iverilog -t vhdl -o my_design.vhd my_design.v
The generated VHDL will be placed in a single file (a.out by default), even if the Verilog is spread over multiple files.
Flags¶
-pdebug=1
Print progress messages as the code generator visits each part of the design.
-pdepth=N
Only output VHDL entities for modules found at depth < N in the hierarchy. N=0, the default, outputs all entities. For example, -pdepth=1 outputs only the top-level entity.
Supported Constructs¶
TODO
Limitations¶
Signal Values and Resolution¶
There are several cases where the behaviour of the translated VHDL deviates from the source Verilog:
The result of division by zero is x in Verilog but raises an exception in VHDL.
Similarly, the result of reading past the end of an array in Verilog is x, whereas VHDL raises an exception.
Any signal that is driven by two or more processes will have the value ‘U’. This is the result of the signal resolution function in the std_logic_1164 package.
Constructs Not Supported¶
The following Verilog constructs cannot be translated to VHDL:
fork and join
force and release
disable
real-valued variables
switches
hierarchical dereferencing
Other Limitations¶
The test expressions in case statements must be constant.
Translation of a parameter to a corresponding VHDL generic declaration. Instead the default parameter value is used.