User Tools

Site Tools


geda:igarus_fpga_lcg

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

geda:igarus_fpga_lcg [2012/02/20 15:14] (current)
Line 1: Line 1:
 +====== FPGA Loadable Code Generator for Icarus Verilog ======
 +<​code>​FPGA LOADABLE CODE GENERATOR FOR Icarus Verilog
  
 +  Copyright 2001 Stephen Williams
 +  $Id: fpga.txt,v 1.12 2005/09/19 21:45:36 steve Exp $
 +
 +The FPGA code generator supports a variety of FPGA devices, writing
 +XNF or EDIF depending on the target. You can select the architecture
 +of the device, and the detailed part name. The architecture is used to
 +select library primitives, and the detailed part name is written into
 +the generated file for the use of downstream tools.
 +
 +INVOKING THE FPGA TARGET
 +
 +The code generator is invoked with the -tfpga flag to iverilog. It
 +understands the part= and the arch= parameters, which can be set with
 +the -p flag of iverilog:
 +
 + iverilog -parch=virtex -ppart=v50-pq240-6 -tfpga foo.vl
 +
 +This example selects the Virtex architecture,​ and give the detailed
 +part number as v50-pq240-6. The output is written into a.out unless a
 +different output file is specified with the -o flag.
 +
 +The following is a list of architecture types that this code generator
 +supports.
 +
 +* arch=lpm
 +
 +This is a device independent format, where the gates are device types
 +as defined by the LPM 2 1 0 specification. Some backend tools may take
 +this format, or users may write interface libraries to connect these
 +netlists to the device in question.
 +
 +* arch=generic-edif (obsolete)
 +
 +This is generic EDIF code. It doesn'​t necessarily work because the
 +external library is not available to the code generator. But, what it
 +does is generate generic style gates that a portability library can
 +map to target gates if desired.
 +
 +* arch=generic-xnf (obsolete)
 +
 +If this is selected, then the output is formatted as an XNF file,
 +suitable for most any type of device. The devices that it emits
 +are generic devices from the unified library. Some devices are macros,
 +you may need to further resolve the generated XNF to get working
 +code for your part.
 +
 +* arch=virtex
 +
 +If this is selected, then the output is formatted as an EDIF 200 file,
 +suitable for Virtex class devices. This is supposed to know that you
 +are targeting a Virtex part, so can generate primitives instead of
 +using external macros. It includes the VIRTEX internal library, and
 +should work properly for any Virtex part.
 +
 +* arch=virtex2
 +
 +If this is selected, then the output is EDIF 2 0 0 suitable for
 +Virtex-II and Virtex-II Pro devices. It uses the VIRTEX2 library, but
 +is very similar to the Virtex target.
 +
 +XNF ROOT PORTS
 +
 +  NOTE: As parts are moved over to EDIF format, XNF support will be
 +  phased out. Current Xilinx implementation tools will accept EDIF
 +  format files even for the older parts, and non-Xilinx implementation
 +  tools accept nothing else.
 +
 +When the output format is XNF, the code generator will generate "​SIG"​
 +records for the signals that are ports of the root module. The name is
 +declared as an external pin that this macro makes available.
 +
 +The name given to the macro pin is generated from the base name of the
 +signal. If the signal is one bit wide, then the pin name is exactly
 +the module port name. If the port is a vector, then the pin number is
 +given as a vector. For example, the module:
 +
 + module main(out, in);
 +     output out;
 +     input [2:0] in;
 +     [...]
 + endmodule
 +
 +leads to these SIG, records:
 +
 + SIG, main/out, PIN=out
 + SIG, main/​in<​2>,​ PIN=in2
 + SIG, main/​in<​1>,​ PIN=in1
 + SIG, main/​in<​0>,​ PIN=in0
 +
 +
 +EDIF ROOT PORTS
 +
 +The EDIF format is more explicit about the interface into an EDIF
 +file. The code generator uses that control to generate an explicit
 +interface definition into the design. (This is *not* the same as the
 +PADS of a part.) The generated EDIF interface section contains port
 +definitions,​ including the proper direction marks.
 +
 +With the (rename ...) s-exp in EDIF, it is possible to assign
 +arbitrary text to port names. The EDIF code generator therefore does
 +not resort to the mangling that is needed for the XNF target. The base
 +name of the signal that is an input or output is used as the name of
 +the port, complete with the proper case.
 +
 +However, since the ports are single bit ports, the name of vectors
 +includes the string "​[0]"​ where the number is the bit number. For
 +example, the module:
 +
 +
 + module main(out, in);
 +     output out;
 +     input [2:0] in;
 +     [...]
 + endmodule
 +
 +creates these ports:
 +
 + out   ​OUTPUT
 + in[0] INPUT
 + in[1] INPUT
 + in[2] INPUT
 +
 +Target tools, including Xilinx Foundation tools, understand the []
 +characters in the name and recollect the signals into a proper bus
 +when presenting the vector to the user.
 +
 +
 +PADS AND PIN ASSIGNMENT
 +
 +The ports of a root module may be assigned to specific pins, or to a
 +generic pad. If a signal (that is a port) has a PAD attribute, then
 +the value of that attribute is a list of locations, one for each bit
 +of the signal, that specifies the pin for each bit of the signal. For
 +example:
 +
 + module main( (* PAD = "​P10"​ *)         ​output out,
 +      (* PAD = "​P20,​P21,​P22"​ *) input [2:0] in);
 +
 +     [...]
 +
 + endmodule
 +
 +In this example, port ``out''​ is assigned to pin 10, and port ``in''​
 +is assigned to pins 20-22. If the architecture supports it, a pin
 +number of 0 means let the back end tools choose a pin. The format of
 +the pin number depends on the architecture family being targeted, so
 +for example Xilinx family devices take the name that is associated
 +with the "​LOC"​ attribute.
 +
 +NOTE: If a module port is assigned to a pin (and therefore attached to
 +a PAD) then it is *not* connected to a port of the EDIF file. This is
 +because the PAD (and possibly IBUF or OBUF) would become an extra
 +driver to the port. An error.
 +
 +
 +SPECIAL DEVICES
 +
 +The code generator supports the "​cellref"​ attribute attached to logic
 +devices to cause specific device types be generated, instead of the
 +usual device that the code generator might generate. For example, to
 +get a clock buffer out of a Verilog buf:
 +
 + buf my_gbuf(out,​ in);
 + $attribute(my_buf,​ "​cellref",​ "​GBUF:​O,​I"​);​
 +
 +The "​cellref"​ attribute tells the code generator to use the given
 +cell. The syntax of the value is:
 +
 + <cell type>:<​pin name>,​...
 +
 +The cell type is the name of the library part to use. The pin names
 +are the names of the type in the library, in the order that the logic
 +device pins are connected.
 +
 +
 +COMPILING WITH XILINX FOUNDATION
 +
 +Compile a single-file design with command line tools like so:
 +
 + % iverilog -parch=virtex -o foo.edf foo.vl
 + % edif2ngd foo.edf foo.ngo
 + % ngdbuild -p v50-pq240 foo.ngo foo.ngd
 + % map -o map.ncd foo.ngd
 + % par -w map.ncd foo.ncd
 +
 +---
 +$Log: fpga.txt,v $
 +Revision 1.12  2005/09/19 21:​45:​36 ​ steve
 + ​Spelling patches from Larry.
 +
 +Revision 1.11  2003/08/07 05:​17:​34 ​ steve
 + Add arch=lpm to the documentation.
 +
 +Revision 1.10  2003/07/04 03:​57:​19 ​ steve
 + Allow attributes on Verilog 2001 port declarations.
 +
 +Revision 1.9  2003/07/04 01:​08:​03 ​ steve
 + PAD attribute can be used to assign pins.
 +
 +Revision 1.8  2003/07/02 00:​26:​49 ​ steve
 + Fix spelling of part= flag.
 +
 +Revision 1.7  2003/03/24 02:​28:​38 ​ steve
 + ​Document the virtex2 architecture.
 +
 +Revision 1.6  2003/03/24 00:​47:​54 ​ steve
 + Add new virtex2 architecture family, and
 + also the new edif.h EDIF management functions.
 +
 +Revision 1.5  2002/04/30 04:​26:​42 ​ steve
 + ​Spelling errors.
 +
 +Revision 1.4  2001/09/16 22:​26:​47 ​ steve
 + ​Support the cellref attribute.
 +
 +Revision 1.3  2001/09/16 01:​48:​16 ​ steve
 + ​Suppor the PAD attribute on signals.
 +
 +Revision 1.2  2001/09/06 04:​28:​40 ​ steve
 + ​Separate the virtex and generic-edif code generators.
 +
 +Revision 1.1  2001/09/02 23:​58:​49 ​ steve
 + Add documentation for the code generator.
 +
 +</​code>​
geda/igarus_fpga_lcg.txt ยท Last modified: 2012/02/20 15:14 (external edit)