Fix for assertion error when expanding macro.
[iverilog.git] / xilinx-hint.txt
blob205a4657d9d888ad9965c90b5426e6d85b875822
2 For those of you who wish to use Icarus Verilog, in combination with
3 the Xilinx back end (Foundation or Alliance), it can be done.  I have
4 run some admittedly simple (2300 equivalent gates) designs through this
5 setup, targeting a Spartan XCS10.
7 Verilog:
9    Older versions of Icarus Verilog (like 19990814) couldn't synthesize
10    logic buried in procedural (flip-flop) assignment.  Newer versions
11    (like 20000120) don't have this limitation.
13    Procedural assignments have to be given one at a time, to be
14    "found" by xnfsyn.  Say
15        always @ (posedge Clk) Y = newY;
16        always @ (posedge Clk) Z = newZ;
17    rather than
18        always @ (posedge Clk) begin
19            Y = newY;
20            Z = newZ;
21        end
23    Steve's xnf.txt covers most buffer and pin constructs, but I had reason
24    to use a global clock net not connected to an input pin.  The standard
25    Verilog for a buffer, combined with a declaration to turn that into a
26    BUFG, is:
27        buf BUFG( your_output_here, your_input_here );
28        $attribute(BUFG,"XNF-LCA","BUFG:O,I")
30    I use post-processing on my .xnf files to add "FAST" attributes to
31    output pins.
33 Running ivl:
35    The -F switches are important.  The following order seems to robustly
36    generate valid XNF files, and is used by "verilog -X":
37       -Fsynth -Fnodangle -Fxnfio
39 Generating .pcf files:
41    The ngdbuild step seems to lose pin placement information that ivl
42    puts in the XNF file.  Use xnf2pcf to extract this information to
43    a .pcf file, which the Xilinx place-and-route software _will_ pay
44    attention to.  Steve says he now makes that information available
45    in an NCF file, with -fncf=<path>, but I haven't tested that.
47 Running the Xilinx back end:
49    You can presumably use the GUI, but that doesn't fit in Makefiles :-).
50    Here is the command sequence in pseudo-shell-script:
51       ngdbuild -p $part $1.xnf $1.ngd
52       map -p $part -o map.ncd $1.ngd
53       xnf2pcf <$1.xnf >$1.pcf    # see above
54       par -w -ol 2 -d 0 map.ncd $1.ncd $1.pcf
55       bitgen_flags = -g ConfigRate:SLOW -g TdoPin:PULLNONE -g DonePin:PULLUP \
56                      -g CRC:enable -g StartUpClk:CCLK -g SyncToDone:no \
57                      -g DoneActive:C1 -g OutputsActive:C3 -g GSRInactive:C4 \
58                      -g ReadClk:CCLK -g ReadCapture:enable -g ReadAbort:disable
59       bitgen $1.ncd -l -w $bitgen_flags
61    The Xilinx software has diarrhea of the temp files (14, not including
62    .xnf, .pcf, .ngd, .ncd, and .bit), so this sequence is best done in a
63    dedicated directory.  Note in particular that map.ncd is a generic name.
65    I had reason to run this remotely (and transparently within a Makefile)
66    via ssh.  I use the gmake rule
67 %.bit : %.xnf
68         ssh -x -a -o 'BatchMode yes' ${ALLIANCE_HOST} \
69                remote_alliance ${REMOTE_DIR} $(basename $@) 2>&1 < $<
70         scp ${ALLIANCE_HOST}:${REMOTE_DIR}/$@ .
71     and the remote_alliance script (on ${ALLIANCE_HOST})
72 /bin/csh
73 cd $1
74 cat >! $2.xnf
75 xnf2pcf <$2.xnf >! $2.pcf
76 ./backend $2
78    There is now a "Xilinx on Linux HOWTO" at
79          http://www.polybus.com/xilinx_on_linux.html
80    I haven't tried this yet, it looks interesting.
82 Downloading:
84    I use the XESS (http://www.xess.com/) XSP-10 development board, which
85    uses the PC parallel (printer) port for downloading and interaction
86    with the host.  They made an old version of their download program
87    public domain, posted it at
88       http://www.xess.com/FPGA/xstools.zip ,
89    and now there is a Linux port at
90       ftp://ftp.microux.com/pub/pilotscope/xstools.tar.gz .
92 The above hints are based on my experience with Foundation 1.5 on NT
93 (gack) and Alliance 2.1i on Solaris.  Your mileage may vary.  Good luck!
95      - Larry Doolittle   <LRDoolittle@lbl.gov>   August 19, 1999
96                                         updated February 1, 2000