ISim Tutorial GUI and Debug
ISim Tutorial GUI and Debug
ISim Tutorial GUI and Debug
Figure 4-1:
www.xilinx.com
29
Figure 4-2:
Main Toolbar
Figure 4-3:
30
www.xilinx.com
Figure 4-4:
Objects Panel
The Objects panel displays all ports and signals associated with the selected instances and processes in the Instances and Processes panel. At the top of the panel, the Simulation Objects displays which instance/process is selected in the Instances and Processes panel and the corresponding objects and their values are listed in the Objects panel. The table columns are defined as follows: Object Name - Displays the name of the signal, accompanied by the symbol which represents the type of object it is. Value - The value of the signals at the current simulation time or at the main cursor, as determined by the Sync Time toolbar button. Data Type - Displays the data type of the corresponding simulation object, logic or an array.
www.xilinx.com
31
Figure 4-5:
Objects Panel
Wave Window
The Wave window displays signals, buses and their waveforms. Each tab in the Wave window represents a wave configuration, which consists of a list of signals and buses, their properties, and any added wave objects, such as dividers, cursors, and markers. In the user interface, the signals and buses in the wave configuration are traced during simulation, and therefore, the wave configuration is used to drive the simulation and to then examine the simulation results. Since design and simulation data are contained in a database, simulation data is not affected when adding signals to- or removing signals from the wave configuration.
X-Ref Target - Figure 4-6
Figure 4-6:
Wave Window
32
www.xilinx.com
Text Editor
The text editor window is available for easy access to the HDL source files used in the simulation. Basic steps available are: Opening HDL source files for viewing and editing Setting breakpoints to source files for debugging Stepping through the source code
Figure 4-7:
Text Editor
Breakpoints Panel
The Breakpoints panel displays a list of all breakpoints currently set in the design. For each breakpoint set in your source files, the list in the Breakpoints panel identifies the file location, file name and line number. You can delete a selection, delete all breakpoints, and go to the source code from the Breakpoint panel toolbar buttons or context menu. For more information, see Chapter 4, Debugging the Design in the ISim User Guide (UG660).
X-Ref Target - Figure 4-8
Figure 4-8:
Breakpoints Panel
www.xilinx.com
33
Console Panel
The Console panel enables you to view a log of messages generated by ISim, and to enter standard Tcl and ISim-specific commands at the command prompt.
X-Ref Target - Figure 4-9
Figure 4-9:
Console Panel
Adding Signals
Note: Skip this step if you completed Chapter 2, Running ISim from ISE Project Navigator. All visible simulation objects from the test bench have been added to the Wave window. Prior to running simulation for a specified time, you must add signals to the Wave window in order to observe the signal status. You will add all available simulation objects from the test bench to the Wave window, which include: Input Clock (clk_in): This is a 100 MHz clock generated by the test bench and will be the input clock into the Digital Clock Manager (DCM). Dynamic Reconfiguration Ports (DRP) (drp_*): These are signals associated with the DCM DRP feature. The test bench asserts and monitors these signals to control and review the DCM DRP functionality. DCM Output signals (dcm_*): These are output clocks from the DCM.
34
www.xilinx.com
To add these signals to the Wave window: 1. 2. In the Instances and Processes panel, right-click the drp_demo_tb instance unit. Select Add to Wave Window. All visible simulation objects from the drp_demo_tb test bench display in the Wave window. (Refer to Figure 4-10).
X-Ref Target - Figure 4-10
Figure 4-10:
Wave Window
www.xilinx.com
35
Figure 4-11: 2. 3. 4.
Wave Window .
To display the full time spectrum in the Wave window, select View > Zoom > To Full View or click the Zoom Full View button
You can use the horizontal and vertical scroll bars to view the full wave configuration. There are assertions from the test bench during the time of simulation. Review the Console panel for messages from the test bench (Refer to Figure 4-12).
Figure 4-12:
Console Panel
36
www.xilinx.com
Figure 4-13:
Wave Window
In the next section, you will be analyzing the simulation of the tutorial design in more detail using features from the Wave window, such as dividers, groups, cursors and markers.
www.xilinx.com
37
Adding Groups
In the next steps, you will be adding signals from other design units in order to better analyze the functionality of this design. However, soon after you add additional signals to the wave window, the size of the wave window will not be large enough to display all signals in the same view. Reviewing all signals would require the use of the vertical scroll bar in the Wave window repeatedly, making the review process rather tedious. We can remedy this situation by collecting signals into a group. With a group, you can collectively show or hide signals of similar purpose. To group signals in the wave configuration: 1. 2. 3. 4. 5. 6. In the Wave window, click and hold the Ctrl key, and select all signals in the drp_demo_tb design unit that start with drp_. Right-click any selected signal and select New Group. Type a name for the new group. For this example, name the group DRP Test Signals. A collapsed group is created in the Wave window. To expand the group, click once to the left of the group name. Follow steps 1-3 above to make a group for all signals in the drp_demo_tb design unit that start with dcm_. Name the group DCM Test Signals. Expand all the created groups. Your wave window should be similar to Figure 4-14.
Figure 4-14:
Adding Groups
If your signal groups do not match Figure 4-14, you can do the following to fix them: If you included an unrelated signal, use cut and paste to move it into the main list. If you created the group but missed a signal in the main list, use drag and drop to move the signal into the group. The signal will then be placed inside the group. You can undo the group using the Edit > Undo menu command. You can start over by ungrouping a group. Right-click it and select Ungroup.
38
www.xilinx.com
Adding Dividers
Soon you will be adding signals from other design units in order to better analyze the functionality of this design. To better visualize which signals belong to which design units, you can add dividers to separate the signals by design unit. To add dividers to the Wave window: 1. 2. 3. Right-click anywhere on the Wave window and select New Divider. Enter a name for the divider. Use the instructions above to add three dividers named: 4. 5. TEST BENCH DCM DRP CONTROLLER
Click and drag the TEST BENCH divider to the top of the list. Move the other dividers to the bottom of the list.
Note: Divider names can be changed at any time by double-clicking on the divider name or pressing
the F2 function key, and entering a new name.
Your Wave window should be similar to the one shown in Figure 4-15.
X-Ref Target - Figure 4-15
Figure 4-15:
Adding Dividers
www.xilinx.com
39
Figure 4-16: 3.
Simulation objects associated with the currently highlighted design unit appear in the Objects panel (refer to Figure 4-17).
Figure 4-17:
Next, you will add all input and output ports, and internal signals from the Inst_drp_dcm design unit instantiation to the Wave window.
40
www.xilinx.com
By default, all types of simulation objects (variables, constants, etc.) are displayed in the Objects panel. The types of objects are shown in Figure 4-18.
X-Ref Target - Figure 4-18
Figure 4-18: Signals and Icons You can filter the type of simulation objects shown in this panel. Use the Objects panel toolbar to filter by inputs, outputs, bi-directional, internal, constants and variables. Toggle the desired object type by clicking on the corresponding button.
X-Ref Target - Figure 4-19
Figure 4-19: 1.
With the Inst_drp_dcm design unit in the Instance and Process panel selected, use the Objects panel toolbar buttons to display only input and output ports, and internal signals. In the Objects panel, select all of the displayed objects, then drag and drop them into the Wave window, under the DCM divider. Note: You can also add these signals to the Wave window using the wave add Tcl command
at the ISim Tcl prompt. For example: wave add /drp_demo_tb/uut/inst_drp_dcm
2.
3. 4.
Repeat steps 1-3 to add the input/output ports of Inst_drp_stmach instantiated design unit below the DRP CONTROLLER divider. Create groups for the signals you added. Define the groups as Inputs, Outputs, and Internal for each set of signals.
www.xilinx.com
41
Your Wave window should be similar to the one shown in Figure 4-20 (with groups collapsed).
X-Ref Target - Figure 4-20
Figure 4-20:
42
www.xilinx.com
Figure 4-21: Changing the Signal Color Note: You can also use the Divider Color option to change the color of the dividers you created in
the Wave window.
You are done making modifications to the Wave window. The Wave window should now look similar to Figure 4-22 when test bench groups are expanded.
www.xilinx.com
43
The wave configuration is now saved for future use. Note: You can load the saved Wave window configuration using the menu command File > Open.
44
www.xilinx.com
to zoom to full
Figure 4-23:
www.xilinx.com
45
Using Markers
The self-checking test bench used in this design performs four different tests to showcase the functionality of the DCM Dynamic Reconfiguration feature. Follow the next steps to use markers to mark each time a new test has started. 1. In the Console panel, identify the simulation times when each test has started. For example, Test 1 starts at about 1,150 ns, as shown by this segment of the ISim Console:
Figure 4-24: 2.
Console Window
From the ISim main menu, select Edit > Go To and enter 1150 ns in the Go To Time field to move the main (yellow) cursor to the first test bench test.
Note: Although you typed the time in nanoseconds, the Wave window displays the time unit in microseconds. You could have also typed the measurement in picoseconds. You can use whichever measurement you prefer, and the Wave window will adjust accordingly. 4.
X-Ref Target - Figure 4-26
Repeat steps 2-3 for all four tests performed by the test bench. The Wave window should look similar to Figure 4-26.
Figure 4-26:
46
www.xilinx.com
Using Cursors
The ISim Console reports that Test 2 and Test 4 failed (Figure 4-27).
X-Ref Target - Figure 4-27
Figure 4-27:
In Tests 2 and 4, a Dynamic Reconfiguration (DRP) write cycle is performed in order to change the multiply and divide factors of the Digital Frequency Synthesizer and set new clock output (CLKFX) frequencies (120 MHz and 400 MHz, respectively). However, at the end of the DRP cycle, the test bench measured a period that did not match the expected period. Tests 2 and 4 failed due to the period discrepancy. You can view the failure for Test 2 in Figure 4-28.
X-Ref Target - Figure 4-28
Figure 4-28:
In the next few steps, you will use the ISim main cursor (yellow cursor) to zoom in the wave window when one of the failing tests takes place. You will also use the cursor to measure the period of signal dcm_clkfx_out and verify that the test bench is making accurate measurements.
www.xilinx.com
47
Zooming In
First, in the Wave window, zoom in to where Test 2 starts to review the status of output clock dcm_clkfx_out. To use a cursor for zooming in on a specific area: 1. Place the cursor on the desired area by clicking and dragging the main (yellow) cursor close to the marker that represents the start of Test 2 (marker at time 3.461664 s). The cursor will snap onto the marker. Note: You can also click the Previous Marker
quickly move the main cursor from marker to marker. and Next Marker toolbar buttons to
2. 3.
The Wave window zooms in around the area specified by the cursor. Use step 2 above repeatedly until you can clearly see the rising and falling edges of DCM test signals dcm_clk0_out and dcm_clkfx_out.
Figure 4-29:
48
www.xilinx.com
Measuring Time
You can use your mouse cursor to measure time between two endpoints. You will use this feature to confirm the test bench calculations reported in the Console during Test 2 by measuring the period of dcm_clkfx_out after the DRP cycle has completed (signal drp_done is asserted). To measure time using cursors: 1. 2. Use the Snap to Transition toggle button to snap the cursor to transition edges. Click and hold in an area around the first clock rising edge following DRP cycle completion (drp_done signal asserted). The main cursor will snap to the rising edge of dcm_clkfx_out. While holding the button, move the mouse over to the next clock rising edge. A second marker should appear. The time between the two defined endpoints appears at the bottom of the wave window as a time delta (refer to Figure 4-30).
X-Ref Target - Figure 4-30
3.
Figure 4-30:
Using the cursors, we measure a 7,142 ps time difference between two rising edges of the dcm_clkfx_out output clock. This translates to a 140 MHz clock signal. Test 2 fails due to the frequency discrepancy (expected is 120 MHz). 4. Repeat the same steps above to analyze the Test 4 failure. You should observe that while the test bench expects a frequency of 400 MHz, the actual frequency measured is 300 MHz.
Note: You can use the Floating Ruler feature (available from the wave window toolbar) to display a hovering ruler over the wave configuration. This feature is available when performing a time measurement using cursors between two endpoints. The zero (0 ps) on the ruler is placed at the first time endpoint. This feature is useful when making multiple time measurements with respect to the first endpoint.
www.xilinx.com
49
3. 4. 5.
Click the window tab for the new wave configuration. Right-click in the Name column area of the wave configuration, and select Paste. Select File > Save As to save this wave configuration as tutorial_2.wcfg.
You should now have two wave windows that should look similar to Figure 4-31 and Figure 4-32.
50
www.xilinx.com
Figure 4-31:
X-Ref Target - Figure 4-32
tutorial_1.wcfg
Figure 4-32:
tutorial_2.wcfg
www.xilinx.com
51
Select File > Open to point to the file of choice. In the Instances and Processes Panel, right-click on the design unit described by the source file of interest, then select Go to Source Code. In the Objects Panel, right-click on any of the simulation objects declared in the source file of choice, then select Go to Source Code. In the Source Files Panel (viewable by clicking on the Source Files tab), double-click a source file.
Figure 4-33:
52
www.xilinx.com
Setting Breakpoints
Begin by first setting a breakpoint around the first signal assignment performed during each of the DRP cycle tests. Do the following to set a breakpoint at line 185 in drp_demo_tb.vhd (Refer to Figure 4-34). Setting a breakpoint causes the simulator to stop every time the signal drp_multiply is assigned a value. 1. 2. 3. Open the source code in which you want to add the breakpoint. Go to an executable line in the source code. Right-click anywhere on the executable line and select Toggle Breakpoint to add the breakpoint. Note: You can also add a breakpoint by clicking the Toggle Breakpoint button
X-Ref Target - Figure 4-34
Figure 4-34:
Note: You can manage breakpoints by clicking on the Breakpoints tab, located next to the Console tab. All breakpoints appear in this list. From here, you can:
X-Ref Target - Figure 4-35
Delete a selected breakpoint or all breakpoints Go to the line of source code for a selected breakpoint
www.xilinx.com
53
The simulation runs near the start of the first test. Focus changes to the text editor where it shows the yellow indicator ( source code the simulator executed.
. X-Ref Target - Figure 4-36
Figure 4-36:
Additionally, a message appears in the Console to indicate that the simulator has stopped, including the line of source code last executed by the simulator. We know that Test 1 finished successfully when we examined the design earlier. Therefore, we can skip debugging this test. 3. To continue forward to Test 2, click the Run All button .
Figure 4-37:
54
www.xilinx.com
Note: You can also step through the simulation by typing step at the Tcl prompt. Use this process to step through the design, paying close attention to each of these events: drp_multiply and drp_divide bus signals are assigned values from a constant test_vectors. drp_start asserts in order to start a DRP cycle. drp_multiply bus signal is assigned to the 8 uppermost bits of bus signal DI_IN, while drp_divide bus signal is assigned to the 8 lowermost bits of the same bus. The DRP controller (drp_stmach.vhd) leaves idle mode and moves to the next DRP cycle step, clearing the DCM status registers.
2. 3.
In the tutorial_2 wave window, expand the DCM Inputs bus. Continue stepping through the simulation until the di_in bus signal is updated with a new value (you might need to zoom in considerably in order to observe the change). At around 3,465 ns, the bus should be updated from 0203h to 0604h. Note: Change the radix of bus signal di_in to Hexadecimal to verify this value change.
Figure 4-38:
www.xilinx.com
55
The output clock frequency of this design (dcm_clkfx_out) is dependent on the multiply and divide factors you provide. For Test 2, we use the following parameters and expected output clock frequency: Table 4-1:
Test 2
You might recall that for M=6 and D=5, di_in[15:0] bus value should be 0504h. Notice that the status of di_in in Test 2 is 0604h. Test 2 fails because an incorrect M/D factor is provided via the drp_multiply and drp_divide signals in the test bench. You can repeat the steps above to determine the cause of failure for Test 4. You will determine that the failure is also due to incorrect assignments of the multiply and divide signals in the test bench.
4.
56
www.xilinx.com
Figure 4-39:
Whats Next
This completes the ISE Simulator (ISim) In-Depth Tutorial. Refer to the Additional Resources section in the Preface for links to more detailed information about the ISE Simulator.
www.xilinx.com
57