aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/docs/usrp3/sim/running_testbenches.md
blob: 2b56af86d1dcd5ff6020fed616ea513d65e9669b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Running a Testbench

Each executable testbench has its own Makefile that automatically pulls in support
for all supported simulators. The build infrastructure supports the following simulators:

 - Xilinx Vivado (XSim)
 - Mentor Graphics ModelSim (may require an additional license)


In general running ``make <sim_target>`` will run the
simulation and report results in the console. Running ``make help`` will print out
all supported simulator targets. Currently, the following targets will work:

    Supported Targets:
    ipclean:    Cleanup all IP intermediate files
    clean:      Cleanup all simulator intermediate files
    cleanall:   Cleanup everything!
    xsim:       Run the simulation using the Xilinx Vivado Simulator
    xclean:     Cleanup Xilinx Vivado Simulator intermediate files
    vsim:       Run the simulation using ModelSim simulator via Vivado 
    modelsim:   Run the simulation using ModelSim without Vivado
    vlint:      Compile the simulation using ModelSim
    vclean:     Cleanup ModelSim intermediate files


## Using Xilinx Vivado XSim

XSim is the built-in simulator in the Xilinx Vivado toolchain. If you already met the
prerequisites for building an FPGA image, then you don't need to install anything else.

Follow these steps to run a testbench:

 - Navigate to the directory that contains the top level testbench and Makefile
 - Run the setupenv.sh script for the USRP product that you are trying to simulate

   ``$ source <repo>/fpga/usrp3/top/<product>/setupenv.sh``

   This step is required even if the simulation is generic because the toolchain requires
   an FPGA part number to load simulation models.
 - Run the simulator specific target

   ``$ make xsim``


## Using Mentor Graphics ModelSim

### Setting Up ModelSim

ModelSim is a third-party simulation tool that is compatible with Vivado and the USRP
FPGA build infrastructure.

Use the following one-time setup to install and configure ModelSim on your system

 - Install ModelSim from the [Mentor Graphics](http://www.mentor.com/) website. 
   It is recommended that you install it to the default location (/opt/mentor/modelsim)
 - Run the setupenv.sh script for the USRP product that you are trying to simulate

   ``$ source <repo>/fpga/usrp3/top/<product>/setupenv.sh``

   This step is required even if the simulation is generic because the toolchain requires
   an FPGA part number to load simulation models.
 - Build the Xilinx simulation libraries

   ``$ build_simlibs``


To validate that everything was installed properly run ``setupenv.sh`` again. You should see the following

    Setting up X3x0 FPGA build environment (64-bit)...
    - Vivado: Found (/opt/Xilinx/Vivado/2019.1/bin)
    - Modelsim: Found (/opt/mentor/modelsim/modeltech/bin)
    - Modelsim Compiled Libs: Found (/opt/Xilinx/Vivado/2019.1/modelsim)
    
    Environment successfully initialized.

### Simulating with ModelSim through Vivado

Follow these steps to run a testbench using ModelSim with Vivado:

 - Navigate to the directory that contains the top level testbench and Makefile
 - Run the setupenv.sh script for the USRP product that you are trying to simulate

   ``$ source <repo>/fpga/usrp3/top/<product>/setupenv.sh``

   This step is required even if the simulation is generic because the toolchain requires
   an FPGA part number to load simulation models.
 - Run the simulator specific target

   ``$ make vsim``

Using this method launches Vivado and uses Vivado to launch ModelSim. This
ensures that Xilinx IP is properly included in the simulation.

To run the simulation in the Vivado GUI for debugging, add the GUI option:

``$ make vsim GUI=1``

### Simulating with ModelSim Natively

To run the simulation using ModelSim natively, the process is the same as
above, except use the `modelsim` make target.

``$ make modelsim``

This calls into Vivado only if Xilinx IP needs to be generated. Otherwise it
calls ModelSim directly without invoking Vivado. This leads to significantly
faster compile and load times for the simulation. However, this method does not
work with all testbenches because some Xilinx IP requires special handling by
Vivado.

To load the simulation into the ModelSim GUI for debugging, add the GUI option.

``$ make modelsim GUI=1``

You may also need to specify special arguments or libraries to use with
ModelSim. These can be added using the `MODELSIM_ARGS` and `MODELSIM_LIBS`
arguments. For example:

``$ make modelsim MODELSIM_ARGS="-t 1fs" MODELSIM_LIBS="secureip xpm"``

ARGS are simply appended to the ModelSim `vsim` command line invocation. LIBS
are added to the "-L" vsim command line argument. These can also be added to
the Makefile for the testbench.

### Compiling the Simulation with ModelSim

To compile your code in ModelSim, use the `vlint` target.

``$ make vlint``

This can be used to quickly check for syntax errors, or to recompile your code
prior to restarting a simulation from within ModelSim.

Using the `modelsim` and `vlint` targets allows for very rapid simulation
iterations.


## Troubleshooting

#### Vivado Not Found

If running the setupenv.sh script returns an error like the following:

    Vivado: Not found! (ERROR.. Builds and simulations will not work)

then it is possible that Vivado was not installed or it was not installed in the default
location. If Vivado is installed in a non-default location, just run the following:

``$ source <repo>/fpga/usrp3/top/<product>/setupenv.sh --vivado-path=<PATH>``

#### ModelSim Not Found

If running the setupenv.sh script returns an error like the following:

    Setting up a 64-bit FPGA build environment for the USRP-X3x0...
    - Vivado: Found (/opt/Xilinx/Vivado/2019.1/bin)
    - Modelsim: Not found! (WARNING.. Simulations with vsim will not work)
    
    Environment successfully initialized.

or something like this (even when Modelsim is installed)

    Setting up a 64-bit FPGA build environment for the USRP-X3x0...
    - Vivado: Found (/opt/Xilinx/Vivado/2019.1/bin)
    
    Environment successfully initialized.

then it is possible that Modelsim was not installed or it was not installed in the default
location. If Modelsim is installed in a non-default location, just run the following:

``$ source <repo>/fpga/usrp3/top/<product>/setupenv.sh --modelsim-path=<PATH>``

#### ModelSim Simulation Libraries Not Found

If running the setupenv.sh script returns an error like the following:

    Setting up a 64-bit FPGA build environment for the USRP-X3x0...
    - Vivado: Found (/opt/Xilinx/Vivado/2019.1/bin)
    - Modelsim: Found (/opt/mentor/modelsim/modeltech/bin)
    - Modelsim Compiled Libs: Not found! (Run build_simlibs to generate them.)
    
    Environment successfully initialized.

Just run the following:

`$ build_simlibs`