Generally, you target a Virtex device no differently than the way you target a non-Virtex device. However, you use Virtex-specific settings, such as .synopsys_dc.setup options, that only apply to Virtex. This appendix outlines only the major differences you encounter when targeting a Virtex device. For topics not covered here, equivalent instructions for a non-Virtex device apply and those instructions exist earlier in this manual.
Unless otherwise specified, all references to FPGA Compiler also apply to Design Compiler.
This appendix contains the following topics.
Use these following general guidelines when targeting Virtex devices.
Virtex XSI uses an EDIF-based synthesis flow with FPGA Compiler and FPGA Express.
XSI Library PrimitivesFor I/O cells with a specific type of input delay, and current drive in the FPGA Compiler flow, instantiate the desired IBUF, OBUF, IFD, and other primitives. Refer to the Appendix for the exact I/O library cell name and pin names. For I/O cells in FPGA Express, you can infer the desired type of input delay, pull-up or pull-down, and current drive using the FPGA Express implementation GUI.
Do not use the Ungroup -all -flatten command when synthesizing a Virtex design with FPGA Compiler.
A software bug exists in the DesignWare Compiler and the uniquify command can build incorrect operators in a module uniquified before the operator expanded to Virtex components. Compile all modules with operators in them prior to running the uniquify command. Do not set the Synopsys variable hdlin_replace_synthetic=true to expand the operators while reading in the HDL design code. Doing so can result in less-than-optimal designs because the compiler cannot make appropriate trade-offs.
Compile designs with hierarchy that include a twice-used module before running the uniquify command. Use the following commands for such a design, selecting the appropriate level (low, medium, or high).
current_design alu compile -map_effort \
[low|medium|high]
current_design top uniquify compile -map_effort \
[low|medium|high]
You can use two types of simulation when simulating a Virtex design with either Verilog or VHDL, RTL simulation and post-NGDbuild simulation.
Use the following procedure to set FPGA Compiler for Virtex design simulation.
Use the following procedure to synthesize a Virtex design into FPGA Compiler.
/*Basic Virtex FPGA Compiler Compile script */
read -f verilog file1.v
read -f verilog file2.v
read -f verilog file3.v
. . .
read -f verilog top.v
/* Set design constraints */
/* Use the following commands if you want */
/* Synopsys to infer I/O. It is recommended */
/* for the Virtex flow that I/O be */
/* instantiated. */
/* set_port_is_pad * */
/* set_pad_type -no_clock all_inputs() */
/* set_pad_type -exact BUFGP -clock \ */
/* find(port,CLK) */
/* insert_pads */
compile
/* Use analysis reports to evaluate quality */
/* of results. */
/* report_area */
/* report_timing */
write_script > design.dc
sh dc2ncf -w design.dc
write -hierarchy -format db -o top.db
write -hierarchy -format edif -o top.edif
Use the following procedure to set VSS simulation for Virtex devices.
To compile the simulation libraries, you must have root access because you modify files in the $XILINX tree. As with the XDW libraries, you must compile these libraries if using a version of Synopsys newer than v1997.01. If you need to compile these libraries, you must have write privileges to the $XILINX area. If you do not, copy the $XILINX/synopsys/libraries/sim to a local directory.
Use FPGA Express v2.1 or later to synthesize a Virtex design. When creating an implementation in FPGA Express, select Virtex as a family/die-pkg-spd grade. For more information on FPGA Express, refer to the F1.5 Foundation Express documentation, or the Alliance FPGA Express documentation which comes with your FPGA Express software from Synopsys.
Figure B.1 Virtex Implementation Window |
The design procedure you use to target a Virtex device with FPGA Express mimics the procedure for targeting a XC3000A/XC4000X/Spartan device with FPGA Express. For more information on FPGA Express, refer to the F1.5 Foundation Express documentation, or the Alliance FPGA Express documentation which comes with your FPGA Express software from Synopsys.
You can simulate and implement the clock delay loops DLLs CLKDLL and CLKDLLHF in HDL code. To use these DLLs for synthesis, change the following two types of attributes.
To changes these default values in FPGA Compiler, use the Set Attribute command. To change the value of DUTY_CYCLE_CORRECTION and CLKDV_DIVIDE, you must know the instance name of the instantiated CLKDLL/CLKDLLHF. For example, if you have instantiated the CLKDLL in your top-level VHDL file, the VHDL code can appear as the following.
MYDLL: CLKDLL port map(CLKIN=>REFCLK,CLKFB=>signal1,.);
In Verilog, the code can appear as follows.
CLKDLL MYDLL (.CLKIN(REFCLK), .CLKFB(signal1),.);
In both cases, the instance name is CLKDLL. To change the values of DUTY_CYCLE_CORRECTION and CLKDV_DIVIDE, use the Set Attribute command in the run script. Use the Set Attribute command before writing out the EDIF file from FPGA Compiler, as shown in the following example.
set_attribute MYDLL DUTY_CYCLE_CORRECTION\
-type string FALSE
set_attribute MYDLL \
CLKDV_DIVIDE -type string 3.0
To change the defaults of CLKDLL and CLKDLLHF in FPGA Express, use the constraints GUI in FPGA Express.
To simulate CLKDLL and CLKDLLHF with Verilog, use the functional simulation model that exists in the UNISIM libraries included in the A1.5 software. If you changed the default values of DUTY_CYCLE_CORRECTION and CLKDV_DIVIDE, specify these changes in the functional simulation by using a `define macro to override the DUTY_CYCLE_CORRECTION and CLKDV_DIVIDE parameters.
To simulate CLKDLL and CLKDLLHF with VHDL, use the functional simulation model that exists in the UNISIM libraries included in the A1.5 XSI software. If you changed the default values of DUTY_CYCLE_CORRECTIO and CLKDV_DIVIDE, specify these changes in the functional simulation by using generics when instantiating the CLKDLL/CLKDLLHF.
Generics for DUTY_CYCLE_CORRECTIOIN and CLKDLLHF do not allow you to change the default values for synthesis. Use the Set Attribute command to do this, or the GUI of FPGA Express.
The following example shows how to use generics to change the default values of the CLKDLL for functional VHDL simulation.
MYDLL: CLKDLL generic map(DUTY_CYCLE_CORRECTION=>FALSE, \
CLKDV_DIVIDE=>3.0) port map(CLKIN=>..);
For more information about CLKDLL and CLKDLLHF, please refer to the Databook or the Libraries Guide.