![]() |
|
![]() |
|
Answers Database
LogiCORE PCI32 4000: Verilog synthesis/simulation with PCI LogiCORE v2.0, FPGA Compiler v1997.08, VerilogXL v2.5, and M1.3.7
Record #3099
Product Family: Software (2) The post_sim directory will contain 4 items, the ping_tb.f file, the waves.wrf file, the structural Verilog file pci_top_routed.v, & the sdf file produced by ngd2ver. The ping_tb.f file contains the files that must be processed for timing simulation of the PCI LogiCORE design. The ping_tb.f file contains six items:../source/ping_tb.v -Testbench file for the design. ../source/stimulus.v -A file used for signal generation in the testbench ../source/dumb_target.v -A file used for signal generation in the testbench ../source/dumb_arbiter.v -A file used for signal generation in the testbench ..pcim_top_routed.v -Structural Verilog file produced by ngd2ver -y ... +libext+.vmd -Path to the Verilog simualtion models in M1.3.7 Modify the path for the -y option for the path in your setup. The ping_tb.f file can be modified to perform timing simulation with another design in place of 'ping'. For timing simulation, the file io_ff_fix.v must always be used. (2) Setup your environment to run M1.3.7 and VerilogXL v2.5. (3) To run VerilogXL for timing simulation, type at the unix prompt in the time_sim directory: verilog -f ping_tb.f VerilogXL will process the simulation files and return control to the user. A directory called 'waves.wfm', which contains the waveforms of the timing simulation, is created. Use viewsim to view the contents of 'waves.wfm'. Solution 2: Functional Simulation with Verilog XL v2.5. (1) Download the PCI LogiCORE v2.0 core from the Xilinx PCI Lounge. 'unzip' or gunzip the contents into a directory. For this example, it is assumed that the user has unpacked the contents of the core into the root directory of the system. This will create a directory called 'pcim', which contains the user's configured PCI core and the verilog files needed to process this design. (2) Setup your environment to run M1.3.7, Synopsys, and VerilogXL. (3) cd pcim/verilog/example/func_sim (4) The 'func_sim' directory will contain the two files ping_tb.f and waves.wrf. ping_tb.f names nine files that VerilogXL needs to functionally simulate 'ping' with the PCI LogiCORE v2.0. The nine files are: ../source/ping_tb.v -This is the testbench file for the design pci_top ../source/stimulus.v -A file used for signal generation in the testbench ../source/dumb_target.v -A file used for signal generation in the testbenc ../source/dumb_arbiter.v -A file used for signal generation in the testbenc ../source/pcim_top.v -The top-level design file which instantiates the PCI LogiCORE and the user applications (e.g. ping) ../source/ping.v -The user application used with the PCI LogiCORE ../source/cfg.v -Configuration file for the PCI LogiCORE ../src/xpci/pcim_lc.v -Verilog simulation model for the PCI LogiCORE ../src/xpci/pci_lc_i.v -Verilog simulation model for the PCI LogiCORE The *.f file can be modified to perform functional simulation with another design in place of 'ping'. For functional simulation, the files pcim_top.v, pcim_lc.v, pci_lc_i.v, and cfg.v must be used. The ping_tb.f file also contains a pointer(-y) to the VerilogXL simulation models in M1.3.7. pcim_top.v contains the instantiation of the the PCI LogiCORE. pcim_lc.v contains the functional simulation model generated by the PCI Core Generator. Any time the core is modified an new model must be generated. pci_lc_i.v contains the simulation library that allows the PCI LogiCORE to be functionally simulated with VerilogXL. cfg.v is a configuration file for setting various options within the PCI LogiCORE. Note, if your user design contains any instantiations of FFs, OBUFs, and/or OBUFTs, functional simulation is only possible post-ngdbuild. (5) To run the VerilogXL simulation, type at the unix prompt in the func_sim directory: verilog -f ping_tb.f VerilogXL will proess the simulation files and return control to the user. A directory called 'waves.wfm' which contains the waveforms of the functional simulation. simwave can be used to view the contents of 'waves.wfm'. Solution 3: Synthesis and Place & Route of a design with the PCI LogiCORE v2.0 using FPGA Compiler v1997.08 (1) Using the 'pcim' directory structure, synthesis with FPGA Compiler is performed in the 'synthesis' directory. Go to the synthesis directory by running the following command from your root directory: cd pcim/verilog/example/synthesis (2) The 'synthesis' directory will contain the WORK directory, the compile script synopsys.dc, and the .synopsys_dc.setup file. Modify the .synopsys_dc.setup file for your system. Do not modify the link_library and target_library settings in the .synopsys_dc.setup file. If you need to use the 4062XLT, delete the link_library, target_library, symbol library, and synthetic_library settings. Replace them with the 4062xl equivalents by running: synlibs -fc 4062xl-1 (3) Open the synopsys.dc file in a text editor of your choice. There are six items to notice. These are items that must be followed when compiling a user design with the PCI LogiCORE. (a) The compile script reads in an 'empty' Verilog file. Starting from the 'synthesis' directory, the file ../../src/xpci/pcim_lc.v is read into Synopsys. This file contains no logic. It only describes the pin directions of the PCI LogiCORE. This file must be read into Synopsys so the netlist writer from Synopsys can write out the correct pin directions. For any customer design, this file must be read into Synopsys. (b) ../source/cfg.vhd is read into Synopsys. cfg.vhd contains options for the PCI LogiCORE v2.0 that the use can specify. The cfg.vhd file must always be used. (c) A 'dont_touch' is placed on the instantiated PCI LogiCORE. A 'dont_touch' attribute must always be placed on the instantiation of the PCI LogiCORE. The 'dont_touch' insures that the LogiCORE is not deleted by Synopsys. (d) Only some I/O cells are inserted into the design. In a normal synthesis design where the code is pure RTL, the following two commands are exectued to insert the correct I/O cells (IBUF, OBUF, IFD, etc.) on top-level ports: set_port_is_pad "*" insert_pads The PCI LogiCORE already has I/O cells present on some of its ports. Executing set_port_is_pad/insert_pads the normal way would create a syntactically incorrect netlist. To avoid this problem, do not insert I/O on ports that already have a I/O cell. set_port_is_pad can be selectively used on ports. In the ping example, there are only two ports in the design that need I/O cells inserted: set_port_is_pad {PING_REQUEST, PING_DONE} insert_pads (e) Always use the pcim_lc.sxnf wrapper file. The last command in the synopsys.dc script copies a file called pcim_lc.sxnf. This file is a wrapper which contains constraints needed to correctly use the PCI LogiCORE. This procedure must always be followed. (f) Remove the place holder PCI LogiCORE design from Synopsys memory. The pcim_lc.v file contains no logic. pcim_lc.v is only used to get the correct pin directions for the netlist writer. This design must be 'removed' from the FPGA Compiler memory just before writing out the design. If it is not removed, an empty SXNF file will be created. This empty SXNF file will remove the entire PCI LogiCORE when the design is processed by XACT. This procedure must always be followed. Close the synopsys.dc file. (5) Synthesisze the design by running the synopsys.dc file from the Design Analyzer GUI, or by using dc_shell: dc_shell -f synopsys.dc |tee run.log It is highly recommended that the Design Analyzer GUI be used. The Design Analyzer GUI will stop if an error in synthesis happens. In contrast, the dc_shell method will not stop if there is an error during synthesis. (6) After synthesis of the design is complete, prepare to place and route by cd'ing to the following directory: cd pcim/vhdl/example/m1 The src directory contains the script run_m1. (7) Open the file run_m1 in a text editor. There are four items to note before running this script. (a) User constraints must be placed in the m13xp208.ucf file. (b) The guide file m13xp208.ncd must be always be used. (c) Always use the XIL_MAP_LOC_CLOSED option. (d) Alwasy use the options specified for map and par. (8) Place and route the design by running run_m1 in the m1 directory. End of Record #3099 - Last Modified: 10/01/99 14:40 |
| For the latest news, design tips, and patch information on the Xilinx design environment, check out the Technical Tips! |