summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md111
1 files changed, 111 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..dcc3b3c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,111 @@
+VHD2VL v2.5 README.txt
+
+Vhd2vl is designed to translate synthesizable VHDL into Verilog 2001.
+It does not support the full VHDL grammar - most of the testbench
+related features have been left out. See the examples and
+translated_examples directories for examples of what vhd2vl can do.
+
+Vhd2vl does a pretty good job of translating, but you should ALWAYS
+test the generated Verilog, ideally by using a formal verification
+tool to compare it to the original VHDL!
+
+A similar but more sophisticated effort is embedded in Icarus Verilog
+as vhdlpp, mostly by Maciej Suminski. If hands-free use of VHDL in a
+(Icarus) Verilog environment is the goal, that's probably a better tool.
+If you want to convert a bit of VHDL to Verilog, and will then maintain
+that Verilog as source, vhd2vl probably makes more sense, if for no other
+reason than it conserves comments. It's good that both options exist!
+
+The home page for (at least for this version of) vhd2vl is
+ http://doolittle.icarus.com/~larry/vhd2vl/
+
+
+1.0 HOW TO BUILD AND INSTALL vhd2vl:
+
+To build, just type 'make' in the src directory.
+
+This version of vhd2vl has been tested with GNU Bison versions 2.5 and
+3.0.2, and GNU Flex versions 2.5.35 and 2.5.39. No problems have been
+reported with other fairly recent versions.
+
+To install, copy the resulting src/vhd2vl file to someplace in
+your $PATH, like $HOME/bin or /usr/local/bin.
+
+
+2.0 HOW TO USE vhd2vl:
+
+ vhd2vl VHDL_file.vhd > translated_file.v
+or
+ vhd2vl VHDL_file.vhd translated_file.v
+The two are equivalent when everything works. The latter has some
+advantages when handling errors within a Makefile.
+
+There are a few options available on the command line:
+ -d turn on debugging within the yacc (bison) parser
+ -g1995 (default) use traditional Verilog module declaration style
+ -g2001 use Verilog-2001 module declaration style
+
+
+3.0 TROUBLESHOOTING:
+
+If vhd2vl complains about a syntax error, this is usually due to a
+VHDL construct that vhd2vl cannot translate. Try commenting out the
+offending line, and running vhd2vl again. You can then edit the
+Verilog output file and manually translate the offending line of VHDL.
+
+Comments in the middle of statements sometimes confuse vhd2vl. This
+is a "feature" of the logic that copies comments from VHDL to Verilog.
+If vhd2vl complains about a syntax error caused by a comment, just
+move that comment out of the middle of the statement and try again.
+
+The grammar has rules that recognize common ways of writing clocked
+processes. Your code might contain clocked processes that do not match
+any of the templates in the grammar. This usually causes vhd2vl to
+complain about a clock'event expression in a process. If this
+happens, a minor rewrite of that process will let you work around the
+problem.
+
+If you need to look at the VHDL grammar, make puts a copy of it in
+vhd2vl.output. If you need to change the grammar, then running vhd2vl
+with the '-d' option will cause vhd2vl to trace how it is parsing the
+input file. See the bison documentation for more details.
+
+To test a copy of vhd2vl for regressions against the example code shipped,
+ mkdir test
+ (cd examples && for f in *.vhd; do vhd2vl $f ../test/${f%%.vhd}.v; done)
+ diff -u translated_examples test | less
+from this directory using a Bourne-style shell.
+
+
+4.0 MISSING FEATURES AND KNOWN INCORRECT OUTPUT:
+
+String types: awkward, because Verilog strings need predefined length
+
+Attribute: easy to parse, but I'm not sure what Verilog construct
+ to turn it into. It smells like a parameter, not an (* attribute *).
+
+Multiple actions in one process, as used in DDR logic?
+
+Exit statement incompletely converted to disable statement
+ (see examples/bigfile.vhd)
+
+Part select expression zz(31+k downto k) should convert to zz[31+k+:32]
+ (see examples/for.vhd)
+
+variables not handled right, show up as declarations within always blocks
+ (see examples/for.vhd)
+
+Conversion functions (resize, to_unsigned, conv_integer) are parsed, but
+ their semantics are ignored: resize(foo,n), to_unsigned(foo,n), and
+ conv_integer(foo) are treated as equivalent to (foo).
+
+VHDL is case insensitive, vhd2vl is case retentive, and Verilog is case
+ sensitive. If you're sloppy with case in the original VHDL, the
+ resulting Verilog will have compile-time warnings or errors. See
+ the comments about vhd2vl-2.1 in the changes file.
+
+Doesn't necessarily get clock edge sensitivities right if there is more
+ than one clock in the list
+
+Totally broken handling of text in generic mappings, as Xilinx is wont to
+ use for their primitives and wrappers
OpenPOWER on IntegriCloud