Ug986 Vivado Tutorial Implementation
Ug986 Vivado Tutorial Implementation
of this document
Implementation
UG986 (v2024.1) May 30, 2024
UG986 (v2023.2) October 18, 2023
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 2
Step 1: Creating a Project Using the Vivado New Project Wizard ...................................... 67
Step 2: Synthesizing, Implementing, and Generating the Bitstream................................. 68
Step 3: Validating the Design on the Board........................................................................... 69
Step 4: Making the ECO Modifications................................................................................... 76
Step 5: Implementing the ECO Changes................................................................................ 90
Step 6: Replacing Debug Probes............................................................................................. 96
Conclusion..................................................................................................................................99
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 3
Navigating Content by Design Process
• Hardware, IP, and Platform Development: Creating the PL IP blocks for the hardware
platform, creating PL kernels, functional simulation, and evaluating the AMD Vivado™ timing,
resource use, and power closure. Also involves developing the hardware platform for system
integration.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 4
Implementation Tutorial
Implementation Tutorial
IMPORTANT! This tutorial requires the use of the AMD Kintex™ 7 and AMD Kintex™ UltraScale™ family
of devices. Update your AMD Vivado™ Design Suite tools installation if you do not have these device
families installed. Refer to the Vivado Design Suite User Guide: Release Notes, Installation, and Licensing
(UG973) for more information on Adding Design Tools or Devices.
This tutorial includes four labs that demonstrate different features of the AMD Vivado Design
Suite implementation tool:
Vivado implementation includes all steps necessary to place and route the netlist onto the FPGA
device resources while meeting the logical, physical, and timing constraints of a design.
VIDEO: You can also learn more about implementing the design by viewing the following Quick Take
videos:
TRAINING: AMD provides training courses that can help you learn more about the concepts presented in
this document. Use these links to explore related courses:
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 5
Implementation Tutorial
The design used for Lab 2 and Lab 3 is the BFT Core example design, project_bft_kintex7.
This design includes both Verilog and VHDL RTL files and an XDC constraints file.
The design used for Lab 4 is available as a Reference Design from the AMD website. See
information in Locating Design Files for Lab 4.
The CPU Netlist and BFT Core designs target an XC7K70T device, and the design for Lab 4
targets an XCKU040 device. Running the tutorial with small designs allows for minimal hardware
requirements and enables timely completion of the tutorial and minimizing data size.
Refer to the Vivado Design Suite User Guide: Release Notes, Installation, and Licensing (UG973) for a
complete list and description of the system and software requirements.
<Vivado_install_area>/Vivado/<version>/examples/Vivado_Tutorial
You can also extract the provided zip file, at any time, to write the tutorial files to your local
directory, or to restore the files to their starting condition.
Extract the zip file contents from the software installation into any write-accessible location.
<Vivado_install_area>/Vivado/<version>/examples/Vivado_Tutorial.zip
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 6
Implementation Tutorial
Note: Modify the tutorial design data while working through this tutorial. Use a new copy of the original
Vivado_Tutorial directory each time you start this tutorial.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 7
Chapter 1: Lab 1: Using Implementation Strategies
Chapter 1
Note: As an alternative, click the Vivado 2020.x Desktop icon to start the Vivado IDE.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 8
Chapter 1: Lab 1: Using Implementation Strategies
4. In the Select Project Template page, choose the CPU (Synthesized) project and click Next.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 9
Chapter 1: Lab 1: Using Implementation Strategies
5. In the Project Name page, specify the following, and click Next:
• Project name: project_cpu_netlist
• Project location: <Project_Dir>
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 10
Chapter 1: Lab 1: Using Implementation Strategies
6. In the Default Part screen, select the xc7k70tfbg676-2 part, and click Next.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 11
Chapter 1: Lab 1: Using Implementation Strategies
7. In the New Project Summary page, review the project details, and click Finish.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 12
Chapter 1: Lab 1: Using Implementation Strategies
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 13
Chapter 1: Lab 1: Using Implementation Strategies
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 14
Chapter 1: Lab 1: Using Implementation Strategies
4. Click OK.
Two runs launch simultaneously, with the remaining runs going into a queue. In this example,
Vivado is running on a machine with only two available processors.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 15
Chapter 1: Lab 1: Using Implementation Strategies
When the active run, impl_1, completes, examine the Project Summary. The Project
Summary reflects the status and the results of the active run. When the active run (impl_1)
is complete, the Implementation Completed dialog box opens.
5. Click Cancel to close the dialog box.
Note: The implementation utilization results display as a bar graph at the bottom of the summary page
(you might need to scroll down), as shown in the following figure.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 16
Chapter 1: Lab 1: Using Implementation Strategies
8. Compare the results for the completed runs in the Design Runs window, as shown in the
previous figure.
• The Flow_RuntimeOptimized strategy in impl_4 completed in the least amount of
time, as seen in the Elapsed time column.
• The WNS column shows that all runs met the timing requirements.
1. In the Sources window, double-click the top_full.xdc file in the constrs_2 constraint
set.
The constraints file opens in the Vivado IDE text editor.
2. On line 2, change the period of the create_clock constraint from 10 ns to 7.35 ns.
The new constraint should read as follows:
create_clock -period 7.35 -name sysClk [get_ports sysClk]
3. Save the changes by clicking the Save File button in the toolbar of the text editor.
Note: Saving the constraints file changes the status of all runs using that constraints file from
“Complete” to “Out-of-date,” as seen in the Design Runs window.
4. In the Design Runs window, select all runs and click the Reset Runs button.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 17
Chapter 1: Lab 1: Using Implementation Strategies
6. With all runs selected in the Design Runs window, click the Launch Runs button.
The Launch Selected Runs window opens.
TIP: You can also launch runs without resetting them first. If the runs are out of date, the Reset Runs
dialog box displays. In this dialog box, you can reset the runs before they are launched.
7. Select Launch runs on local host and Number of jobs: 2 and click OK.
When the active run (impl_3) completes, the Implementation Completed dialog box opens.
8. Click Cancel to close the dialog box.
9. Compare the Elapsed time for each run in the Design Runs window, as seen in the following
figure.
Conclusion
In this lab, you learned how to define multiple implementation runs to employ different strategies
to resolve timing. You have seen how some strategies trade performance for results and learned
how to use those strategies in a more challenging design.
This concludes Lab 1. If you plan to continue directly to Lab 2, keep the Vivado IDE open and
close the current project. If you do not plan to continue, exit the Vivado Design Suite.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 18
Chapter 2: Lab 2: Using Incremental Implementation
Chapter 2
After resynthesizing a design with minor changes, the incremental compile flow can speed up
placement and routing by reusing results from a prior design iteration. This can help you preserve
timing closure while allowing you to quickly implement incremental changes to the design.
In this lab, you use the BFT example design that is included in the AMD Vivado™ Design Suite, to
learn how to use the Incremental Implementation. Refer to the Vivado Design Suite User Guide:
Implementation (UG904) to learn more about Incremental Compile.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 19
Chapter 2: Lab 2: Using Incremental Implementation
4. In the Select Project Template page, select the BFT (Small RTL project) design, and click Next.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 20
Chapter 2: Lab 2: Using Incremental Implementation
5. In the Project Name page, specify the following, and click Next:
• Project name: project_bft_core_hdl
• Project location: <Project_Dir>
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 21
Chapter 2: Lab 2: Using Incremental Implementation
6. In the Default Part page, select the xc7k70tfbg484-2 part, and click Next.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 22
Chapter 2: Lab 2: Using Incremental Implementation
7. In the New Project Summary page, review the project details, and click Finish.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 23
Chapter 2: Lab 2: Using Incremental Implementation
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 24
Chapter 2: Lab 2: Using Incremental Implementation
This column shows how the incremental flow was used. The information is also available in the
messages in the Vivado log file.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 25
Chapter 2: Lab 2: Using Incremental Implementation
2. In the Incremental Implementation dialog box, select Automatically use the checkpoint from
the previous run.
This dialog box can be opened from many places inside the Vivado IDE. These include the
Implementation Run Options window and the Project Summary. The same functionality can
also be built into scripts via Tcl commands.
3. To enable automatic checkpoint selection via Tcl, use the following command:
set_property AUTO_INCREMENTAL_CHECKPOINT 1 [get_runs impl_1]
After this is done, you should see the Incremental Column in the Design Runs window update to
Auto(skipped). This setting indicates that the Auto mode is enabled but that Incremental
Implementation has not been run.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 26
Chapter 2: Lab 2: Using Incremental Implementation
It is possible to select your own checkpoint, which is desirable when the checkpoint must not be
updated or lower thresholds for reuse are OK to use. You are responsible to manage the
suitability of the checkpoint in this case.
3. After implementation finishes, the Implementation Complete dialog box opens. Click Cancel
to dismiss the dialog box.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 27
Chapter 2: Lab 2: Using Incremental Implementation
In a project-based design, the Vivado Design Suite saves intermediate implementation results as
design checkpoints in the implementation run the directory. Use the final checkpoint as the
reference to the incremental compile flow.
1. In the Hierarchy tab of the Sources window, double-click the top-level VHDL file,
core_transform.vhdl under arnd1, to open the file in the Vivado IDE text editor, as
shown in the following figure.
2. Go to lines 70 and 71 and make swap the inputs to uReg and xReg. The following code
snippet shows the required changes:
From To
begin begin
process (clk) process (clk)
begin begin
if rising_edge(clk) then if rising_edge(clk) then
xStepReg <= xStep; xStepReg <= xStep;
uReg <= u; --uReg <= u;
xReg <= x; --xReg <= x;
end if; uReg <= x;
end process; xReg <= u;
end if;
end process;
3. Save the changes by clicking the Save File button in the toolbar of the text editor.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 28
Chapter 2: Lab 2: Using Incremental Implementation
As you can see in the following figure, changing the design source files also changes the run
status for finished runs from Complete to Out-of-date.
1. In the Flow Navigator, click on Run Implementation. At this point, all the runs are reset and
relaunched.
In the Sources window, the Utility Sources is updated with the checkpoint from the
previously routed impl_1 if the checkpoint has met certain criteria to ensure it is a good
quality reference checkpoint for future runs.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 29
Chapter 2: Lab 2: Using Incremental Implementation
Also, updated is the Incremental column in the Design Runs window. This should now say
Auto. If the checkpoint did not meet the criteria to be used as a suitable reference, it shows
Auto(Skipped) as before.
After implementation is complete, the Design Runs window shows the completed run.
In the Design Runs window, it is possible to examine runtime and timing criteria. In this case:
• Runtime has reduced for implementation as seen in the Elapsed column.
• WNS > 0.000 has been maintained
Note: Synthesis has not been run in a different mode than before; hence, its outcome is expected to
resemble that of the prior occurrences.
Designs that have a complex flow, requiring the most effort in the reference run see the
highest benefit. Ideally, reference checkpoints are timing-closed, with fewer than 5% of the
leaf cells different than the updated design.
2. Select the Reports window and double-click the Incremental Reuse Report in the Route
Design section, as shown in the following figure.
So far, you have modified the generation of the readEgressFifo so that the signal is zero
when the error signal is non-zero. This is a small change to the design so you would expect
the reuse to be high. Now examine the Incremental Reuse Report to confirm this is the case.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 30
Chapter 2: Lab 2: Using Incremental Implementation
In the report, you can confirm that a high percentage of cells, nets, and ports are fully reused.
In the Reference Checkpoint Information section, you can see information reported on the
reference checkpoint. This is useful when the source of the checkpoint is unknown.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 31
Chapter 2: Lab 2: Using Incremental Implementation
In the Comparison with Reference Run section, you can see how the runtime and WNS at
each stage of the flow compare. This is good for debugging purposes to understand where
WNS and runtime diverge when there are issues. These designs are not 100% the same so
this information is only a guide.
When run with the RuntimeOptmized directive, the target WNS of this run is either 0.0 or
the WNS from the reference run if it is < 0.0. To always target a timing closed design (Target
WNS = 0.0 ns), the incremental directive must be set TimingClosure. This can be done by
applying the following command:
set_property -name INCREMENTAL_CHECKPOINT.MORE_OPTIONS -value {-
incremental_directive TimingClosure} -objects [get_runs impl_1]
Conclusion
This concludes Lab 2. You can close the current project and exit the Vivado IDE.
In this lab, you learned how to run the Incremental Implementation portion of the Incremental
Compile flow, using a checkpoint from a previously implemented design. You also examined the
similarity between a reference design checkpoint and the current design by examining the
Incremental Reuse Report.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 32
Chapter 3: Lab 3: Manual and Directed Routing
Chapter 3
• Use the BFT HDL example design that is included in the AMD Vivado™ Design Suite.
• To illustrate the manual routing feature, precisely control the skew within the output bus of
the design, wbOutputData.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 33
Chapter 3: Lab 3: Manual and Directed Routing
4. In the Select Project Template page, select the BFT (Small RTL project) design, and click Next.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 34
Chapter 3: Lab 3: Manual and Directed Routing
5. In the Project Name page, specify the following, and click Next:
• Project name: project_bft_core
• Project location: <Project_Dir>
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 35
Chapter 3: Lab 3: Manual and Directed Routing
6. In the Default Part page, select the xc7k70tfbg484-2 as your Default Part, and click Next.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 36
Chapter 3: Lab 3: Manual and Directed Routing
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 37
Chapter 3: Lab 3: Manual and Directed Routing
7. In the New Project Summary page, review the project details, and click Finish.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 38
Chapter 3: Lab 3: Manual and Directed Routing
3. In the Implementation Completed dialog box, select Open Implemented Design and click OK.
The Device window opens, displaying the placement results.
4. Click the Routing Resources button to view the detailed routing resources in the Device
window.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 39
Chapter 3: Lab 3: Manual and Directed Routing
You can use the Report Datasheet command to analyze the current timing of members of the
output bus, wbOutputData. The Report Datasheet command lets you analyze the timing of a
group of ports with respect to a specific reference port.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 40
Chapter 3: Lab 3: Manual and Directed Routing
3. Click OK.
In this case, you are examining the timing at the ports carrying the wbOutputData bus,
relative to the first bit of the bus, wbOutputData[0]. This allows you to quickly determine
the relative timing differences between the different bits of the bus.
4. Click the Maximize button to maximize the Timing - Datasheet window and expand the
results.
5. Select the Max/Min Delays for Groups → Clocked by wbClk → wbOutputData[0] section, as
seen in the following figure.
You can see from the report that the timing skew across the wbOutputData bus varies by
almost 660 ps. The goal is to minimize the skew across the bus to less than 100 ps.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 41
Chapter 3: Lab 3: Manual and Directed Routing
6. Click the Restore button so you can simultaneously see the Device window and the
Timing - Datasheet results.
7. Click the hyperlink for the Max Delay of the source wbOutputData[28].
This highlights the path in the Device window that is currently open.
Note: Ensure that the Autofit Selection is highlighted in the Device window so you can see the
entire path, as shown in the following figure.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 42
Chapter 3: Lab 3: Manual and Directed Routing
8. In the Device window, right-click on the highlighted path and select Schematic from the
popup menu.
This displays the schematic for the selected output data bus. From the schematic, you can
see that the output port is directly driven from a register through an output buffer (OBUF).
If you can consistently control the placement of the register with respect to the output pins
on the bus and control the routing between registers and the outputs, you can minimize skew
between the members of the output bus.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 43
Chapter 3: Lab 3: Manual and Directed Routing
Blue diamond markers show on the output ports, and red diamond markers show on the
registers feeding the outputs, as seen in the following figure.
The outputs marked in blue are spread out along two banks on the left side starting with
wbOutputData[0] (on the bottom) and ending with wbOutputData[31] (at the top),
while the output registers marked in red are clustered close together on the right.
To look at all of the routing from the registers to the outputs, use the highlight_objects
Tcl command to highlight the nets.
11. Type the following command at the Tcl prompt:
highlight_objects -color yellow [get_nets -of [get_pins -of [get_cells \
wbOutputData_reg[*]] -filter DIRECTION==OUT]]
This highlights all the nets connected to the output pins of the wbOutputData_reg[*]
registers.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 44
Chapter 3: Lab 3: Manual and Directed Routing
In the Device window, you can see that there are various routing distances between the
clustered output registers and the distributed outputs pads of the bus. Consistently placing
the output registers in the slices next to each output port eliminates a majority of the
variability in the clock-to-out delay of the wbOutputData bus.
12. In the main toolbar, click the Unhighlight All button and the Unmark All button.
RECOMMENDED: Use a series of Tcl commands to place the output registers in the slices next to the
wbOutPutData bus output pads.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 45
Chapter 3: Lab 3: Manual and Directed Routing
1. In the Device window, click to disable Routing Resources and make sure that Autofit
Selection is still enabled on the toolbar.
This lets you see placed objects more clearly in the Device window, without the added details
of the routing.
2. Select the wbOutputData ports placed on the I/O blocks with the following Tcl command:
select_objects [get_ports wbOutputData*]
The Device window shows the selected ports highlighted in white, and zoom to fit the
selection. By examining the device resources around the selected ports, you can identify a
range of placement sites for the output registers.
3. Zoom into the Device window around the bottom selected output ports. The following figure
shows the results.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 46
Chapter 3: Lab 3: Manual and Directed Routing
The bottom ports are the lowest bits of the output bus, starting with wbOutputData[0].
This port is placed on Package Pin Y21. Over to the right, where the Slice logic contains the
device resources needed to place the output registers, the Slice coordinates are X0Y36. Use
that location as the starting placement for the 32 output registers,
wbOutputData_reg[31:0].
By scrolling or panning in the Device window, you can visually confirm that the highest
output data port, wbOutputData[31], is placed on Package Pin K22, and the registers to
the right are in Slice X0Y67.
Now that you have identified the placement resources needed for the output registers, make
sure that they are available for placing the cells. You can do this by quickly unplacing the
Slices to clear any currently placed logic.
4. Unplace any cells currently assigned to the range of slices needed for the output registers,
SLICE_X0Y36 to SLICE_X0Y67, with the following Tcl command:
for {set i 0} {$i<32} {incr i} {
unplace_cell [get_cells -of [get_sites SLICE_X0Y[expr 36 + $i]]]
}
This command uses a for loop with an index counter (i) and a Tcl expression (36 + $i) to
get and unplace any cells found in the specified range of Slices. For more information on for
loops and other scripting suggestions, refer to the Vivado Design Suite User Guide: Using Tcl
Scripting (UG894).
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 47
Chapter 3: Lab 3: Manual and Directed Routing
TIP: If there are no cells placed within the specified slices, warning messages are displayed stating that
nothing has been unplaced. Ignore these messages safely.
With the slices cleared of any current logic cells, the needed resources are available for
placing the output registers. After placing those, replace any logic that was unplaced in the
last step.
5. Place the output registers, wbOutputData_reg[31:0], in the specified slice range with
the following command:
for {set i 0} {$i<32} {incr i} {
place_cell wbOutputData_reg[$i] SLICE_X0Y[expr 36 + $i]/AFF
}
9. Analyze the route status of the current design to ensure that there are no routing conflicts:
report_route_status
10. Click the Routing Resources button to view the detailed routing resources in the Device
window.
11. Mark the output ports and registers again, and re-highlight the routing between them using
the following Tcl commands:
mark_objects -color blue [get_ports wbOutputData[*]]
mark_objects -color red [get_cells wbOutputData_reg[*]]
highlight_objects -color yellow [get_nets -of [get_pins -of [get_cells\
wbOutputData_reg[*]] -filter DIRECTION==OUT]]
TIP: Because you have entered these commands before, you can copy them from the journal file
(vivado.jou) to avoid typing them again.
12. In the Device window, zoom into some of the marked output ports.
13. Select the nets connecting to them.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 48
Chapter 3: Lab 3: Manual and Directed Routing
TIP: You can also select the nets in the Netlist window, and they are cross-selected in the Device
window.
In the Device window, you can see that all output registers are now placed equidistant from
their associated outputs, and the routing path is similar for all the nets from the output
register to output. This results in clock-to-out times that are closely matched between the
outputs.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 49
Chapter 3: Lab 3: Manual and Directed Routing
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 50
Chapter 3: Lab 3: Manual and Directed Routing
This for loop initializes the index to 14 (set i 14), and gets the ROUTE property to return the
details of the route on each selected net.
The Tcl Console returns the net index followed by relative route information for each net:
14 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
15 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
16 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
17 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
18 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
19 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
20 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
21 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
22 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
23 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
24 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
25 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
26 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
27 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
28 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
29 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
30 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC0_D1
LIOI_OLOGIC0_OQ LIOI_O0 }
31 { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 WW2BEG0 IMUX_L34 IOI_OLOGIC1_D1
LIOI_OLOGIC1_OQ LIOI_O1 }
From the returned ROUTE properties, the nets are routed from the output registers using
identical resources, up to node IMUX_L34. Beyond that, the Vivado router uses different
nodes for odd and even index nets to complete the connection to the die pad.
By reusing routing paths, you can manually route one net with an even index, like
wbOutputData_OBUF[14], and one net with an odd index, such as
wbOutputData_OBUF[15], and copy the routing to all other even and odd index nets in
the group.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 51
Chapter 3: Lab 3: Manual and Directed Routing
2. In the Tcl Console, select the first net with the following command:
select_objects [get_nets -of [get_pins -of \
[get_cells wbOutputData_reg[14]] -filter DIRECTION==OUT]]
3. In the Device window, right-click to open the popup menu and select Unroute.
4. Click Yes in the Confirm Unroute dialog box.
The Device window displays the unrouted net as a fly-line between the register and the
output pad.
5. Click the Maximize button to maximize the Device window.
6. Right-click the net and select Enter Assign Routing Mode.
The Target Load Cell Pin dialog box opens, as seen in the following figure, to let you select a
load pin to route to or from. In this case, only one load pin populates:
wbOutputData_OBUF[14]_inst.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 52
Chapter 3: Lab 3: Manual and Directed Routing
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 53
Chapter 3: Lab 3: Manual and Directed Routing
TIP: The number of reachable neighbor nodes displayed depends on the number of hops defined in the
Options.
8. Under the Assigned Nodes section, select the CLBLL_LOGIC_OUTS4 node before the gap.
The available neighbors appear as shown in the following figure.
To add delay to compensate for the clock skew, select a neighbor node that provides a slight
detour over the more direct route previously chosen by the router.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 54
Chapter 3: Lab 3: Manual and Directed Routing
This node provides a routing detour to add delay, as compared to some other nodes such as
WW2BEG0, which provide a more direct route toward the output buffer. Clicking a neighbor
node once selects it so you can explore routing alternatives. Double-clicking the node
temporarily assigns it to the net, so that you can then select the next neighbor from that
node.
10. In Neighbor Nodes, assign node NE2BEG0 by double-clicking it.
This adds the node to the Assigned Nodes section of the Routing Assignment window, which
updates the Neighbor Nodes.
11. In Neighbor Nodes, select and assign nodes WR1BEG1, and then WR1BEG2.
TIP: In case you assigned the wrong node, select the node from the Assigned Nodes list, right-click,
and select Remove on the context menu.
You can turn off the Auto Fit Selection in the Device window if you like to stay at the same
zoom level.
The following figure shows the partially routed path using the selected nodes shown in
orange. Use the automatic routing feature to fill the remaining gap.
12. Under the Assigned Nodes section of the Routing Assignment window, right-click the Net
Gap, and select Auto-Route, as shown in the following figure.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 55
Chapter 3: Lab 3: Manual and Directed Routing
The Vivado router fills in the last small bit of the gap. With the route path fully defined, you
can assign the routing to commit the changes to the design.
13. Click Assign Routing at the bottom of the Routing Assignment window.
The Assign Routing dialog box opens, as seen in the following figure. This displays the list of
currently assigned nodes that define the route path. You can select any of the listed nodes,
highlighting it in the Device window. This lets you quickly review the route path prior to
committing it to the design.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 56
Chapter 3: Lab 3: Manual and Directed Routing
14. Make sure that Fix Routing is checked, and click OK.
The Fix Routing checkbox marks the defined route as fixed to prevent the Vivado router from
ripping it up or modifying it during subsequent routing steps. This is important in this case
because you are routing the net manually to add delay to match clock skew.
15. Examine the Tcl commands in the Tcl Console.
The Tcl Console reports any Tcl commands that assigned the routing for the current net.
Those commands are:
set_property is_bel_fixed 1 [get_cells {wbOutputData_reg[14]
wbOutputData_OBUF[14]_inst }]
set_property is_loc_fixed 1 [get_cells {wbOutputData_reg[14]
wbOutputData_OBUF[14]_inst }]
set_property fixed_route { { CLBLL_LL_AQ CLBLL_LOGIC_OUTS4 NE2BEG0
WR1BEG1 WR1BEG2 SW2BEG1 IMUX_L34 IOI_OLOGIC0_D1 LIOI_OLOGIC0_OQ
LIOI_O0 } } [get_nets {wbOutputData_OBUF[14]}]
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 57
Chapter 3: Lab 3: Manual and Directed Routing
After defining the manual route for the even index nets, the next step is to define the route
path for the odd index net, wbOutputData_OBUF[15], applying the same steps you just
completed.
16. In the Tcl Console, type the following to select the net:
select_objects [get_nets wbOutputData_OBUF[15]]
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 58
Chapter 3: Lab 3: Manual and Directed Routing
18. Switch to the Timing Datasheet report window. Notice the information message in the
banner of the window indicating that the report is out of date because the design was
modified.
19. In the Timing Datasheet report, click Rerun to update the report with the latest timing
information.
20. Select Max/Min Delays for Groups → Clocked by wbClk → wbOutputData[0] to display the
timing info for the wbOutputData bus, as seen in the following figure.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 59
Chapter 3: Lab 3: Manual and Directed Routing
You can see from the report that the skew within the rerouted nets, wbOutputData[14]
and wbOutputData[15], more closely matches the timing of the lower bits of the output
bus, wbOutputData[13:0]. The skew is within the target of 100 ps of the reference pin
wbOutputData[0].
In Step 6, you copy the same route path to the remaining nets,
wbOutputData_OBUF[31:16], to tighten the timing of the whole wbOutputData bus.
3. Set a Tcl variable to store the list of nets to be routed, containing all high bit nets of the
output data bus, wbOutputData_OBUF[16:31]:
for {set i 16} {$i<32} {incr i} {
lappend routeNets [get_nets wbOutputData_OBUF[$i]]
}
The even and odd nets of the output data bus, as needed, now have the same routing paths,
adding delay to the high order bits. Run the route status report and the datasheet report to
validate that the design is as expected.
7. In the Tcl Console, type the following command:
report_route_status
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 60
Chapter 3: Lab 3: Manual and Directed Routing
TIP: Some routing errors might be reported if the routed design included nets that use some of the
nodes you have assigned to the FIXED_ROUTE properties of the manually routed nets. Remember that
you enabled Allow Overlap with Unfixed Nets in the Routing Assignment window.
8. If any routing errors are reported, type the route_design command in the Tcl Console.
The nets with the FIXED_ROUTE property takes precedence over the auto-routed nets.
9. After route_design, repeat the report_route_status command to see the clean
report.
10. Examine the output data bus in the Device window, as seen in the following figure:
• All nets from the output registers to the output pins for the upper bits 14-31 of the output
bus wbOutputData have identical fixed routing sections (shown as dashed lines).
• You need not fix the LOC and the BEL for the output registers. The place_cell
command did it in an earlier step.
Having routed all the upper bit nets, wbOutputData_OBUF[31:14], with the detour
needed for added delay, you can now re-examine the timing of output bus.
11. Select the Timing window.
Notice the information message in the banner of the window indicating that the report is out
of date because timing data has been modified.
12. Click rerun to update the report with the latest timing information.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 61
Chapter 3: Lab 3: Manual and Directed Routing
13. Select the Max/Min Delays for Groups → Clocked by wbClk → wbOutputData[0] section to
display the timing information for the wbOutputData bus.
The clock-to-out timing within all bits of output bus wbOutputData is now closely matched
to within 83 ps.
14. Save the constraints to write them to the target XDC, so that they apply every time you
compile the design.
15. Select File → Constraints → Save to save the placement constraints to the target constraint
file, bft_full.xdc, in the active constraint set, constrs_1.
The synthesis and implementation go out-of-date because the constraints were updated. You
can force the design to update by clicking on Details in the toolbar because new constraints
are already applied.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 62
Chapter 3: Lab 3: Manual and Directed Routing
Conclusion
In this lab, you did the following:
• Analyzed the clock skew on the output data bus using the Report Datasheet command.
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 63
Chapter 3: Lab 3: Manual and Directed Routing
UG986
UG986 (v2024.1)
(v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 64
Chapter 4: Lab 4: Vivado ECO Flow
Chapter 4
For this lab, use the design file that is included with this guide and is targeted at the AMD
Kintex™ UltraScale™ KCU105 Evaluation Platform. For instructions on locating the design files,
see Locating Design Files for Lab 4.
In this design, a mixed-mode clock manager (MMCM) is used to synthesize a 100 MHz clock
from the 300 MHz clock provided by the board.
A 29-bit counter is used to divide the clock down further. The four most significant bits of the
counter form the count<3:0> signal that is 0-extended to 8 bits and drives the 8 on-board
LEDs through an 8-bit 2-1 mux.
The count<3:0> signal is also squared using a multiplier, and the product drives the other eight
inputs of the mux. A Toggle signal controls the mux select and either drives the LEDs (shown in
the following figure) with the counter value or the multiplier output.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 65
Chapter 4: Lab 4: Vivado ECO Flow
A Pause signal allows you to stop the counter, and a Reset signal allows you to reset the
design. The Toggle, Pause, and Reset signals can either be controlled from on-board buttons
shown in the following figure or a VIO in the Hardware Manager as shown in the subsequent
figure. The VIO also allows you to observe the status of the LEDs. The following figures show the
location of the push buttons and the LEDs on the KCU105 board and a Hardware Manager
dashboard. These allow you to control the push button and observe the LEDs through the VIO.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 66
Chapter 4: Lab 4: Vivado ECO Flow
Related Information
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 67
Chapter 4: Lab 4: Vivado ECO Flow
k. Click Next.
7. In the Add Constraints dialog box, do the following:
11. In the Sources window in the Vivado IDE, expand top to see the source files for this lab.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 68
Chapter 4: Lab 4: Vivado ECO Flow
You can use the generated bitstream programming file to download your design into the
target FPGA using the Hardware Manager. For more information, see the Vivado Design Suite
User Guide: Programming and Debugging (UG908).
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 69
Chapter 4: Lab 4: Vivado ECO Flow
TIP: For more information about different ways to connect to a hardware target, refer to the Vivado
Design Suite User Guide: Programming and Debugging (UG908).
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 70
Chapter 4: Lab 4: Vivado ECO Flow
3. In the Vivado Flow Navigator, under Program and Debug, click Program Device.
The Program Device dialog box opens.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 71
Chapter 4: Lab 4: Vivado ECO Flow
Alternatively, you can use the VIO to control and observe the hardware.
If the following warning message appears, select one of the alternatives suggested in the
message.
WARNING: [Labtools 27-1952] VIO hw_probe OUTPUT_VALUE properties for
hw_vio(s) [hw_vio_1] differ from output values in the VIO core(s).
Resolution:
To synchronize the hw_probes properties and the VIO core outputs choose
one of the following alternatives:
1) Execute the command 'Commit Output Values to VIO Core', to write
down the hw_probe values to the core.
2) Execute the command 'Refresh Input and Output Values from VIO
Core', to update the hw_probe properties with the core values.
3) First restore initial values in the core with the command 'Reset
VIO Core Outputs', and then execute the command 'Refresh Input and
Output Values from VIO Core'.
6. Select the hw_vios tab in the dashboard and click the Add button to add probes.
The Add Probes dialog box opens.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 72
Chapter 4: Lab 4: Vivado ECO Flow
9. In the hw_vios dashboard, select count_out_OBUF[7:0], then right-click and select LED.
The Select LED Colors dialog box opens.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 73
Chapter 4: Lab 4: Vivado ECO Flow
10. Select Red for the Low Value Color and Green for the High Value Color.
11. Click OK.
12. In the hw_vios dashboard, select pause_vio_out, reset_vio_out, and toggle_vio_out, then
right-click and select Active-High Button.
13. In the hw_vios dashboard, right-click vio_select and select Toggle Button.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 74
Chapter 4: Lab 4: Vivado ECO Flow
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 75
Chapter 4: Lab 4: Vivado ECO Flow
TIP: In a project-based design, the Vivado Design Suite saves intermediate implementation results as
design checkpoints in the implementation runs directory. When you re-run implementation, the
previous results are deleted. Save the router checkpoint to a new directory to preserve the modified
checkpoint.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 76
Chapter 4: Lab 4: Vivado ECO Flow
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 77
Chapter 4: Lab 4: Vivado ECO Flow
To illustrate the capabilities of the ECO flow, change the functionality of the multiplier from a
square of count[3:0] to multiply by two.
9. From the Tcl Console, type the following command:
mark_objects -color blue [get_cells my_mult_0]
TIP: To make it easier to locate objects that are included in the ECO modifications, it helps to mark or
highlight the objects with different colors.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 78
Chapter 4: Lab 4: Vivado ECO Flow
10. Zoom into the multiplier in the schematic window and select the in2[3:0] pins.
Alternatively, you can type the following command in the Tcl Console:
select_objects [get_pins my_mult_0/in2[*]]
11. Click the Disconnect Net button in the Edit section of the Vivado ECO Navigator. The net is
disconnected from the pins in the schematic.
The Tcl Console reproduces the disconnect_net command that you just executed in the
ECO Navigator. This is useful if you want to replay your ECO changes later by opening the
original checkpoint and sourcing a Tcl script with the ECO commands.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 79
Chapter 4: Lab 4: Vivado ECO Flow
The Scratch Pad is populated with the four nets divClk_reg[28:25] that you
disconnected and the multiplier input pins my_mult_0/in2[3:0]. Note the following in
the Scratch Pad:
• The Scratch Pad connectivity column (Con) shows a checkmark next to the
divClk_reg[28:25] nets, indicating that they are still connected to the other multiplier
inputs.
• The my_mult_0/in2[3:0] pins do not show a checkmark next to them because they
no longer have nets connected.
• The Place and Route (PnR) column is unchecked for everything, indicating that the
changes have not yet been implemented on the device.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 80
Chapter 4: Lab 4: Vivado ECO Flow
14. In the Connect Net dialog box, select <const0> from the GROUND section.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 81
Chapter 4: Lab 4: Vivado ECO Flow
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 82
Chapter 4: Lab 4: Vivado ECO Flow
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 83
Chapter 4: Lab 4: Vivado ECO Flow
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 84
Chapter 4: Lab 4: Vivado ECO Flow
Note: Make sure that the Autofit Selection toggle button is highlighted in the Schematic window so
you can see the entire path, as shown in the following figure.
When you observe the count signal on the LEDs, you only use four bits. The upper four bits
are padded with zeroes.
Now, use the ECO flow to observe counter bit 24 on LED 7. The first step is to analyze the
logic that drives count_out_reg[3].
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 85
Chapter 4: Lab 4: Vivado ECO Flow
This lets you quickly identify the LUT3 that drives the count_out_reg[3] register, which
drives LED 3. The inputs are:
• mul_out_pre_reg[3] for pin I0
• count_out_pre_reg[3] for pin I1
• tog_state_reg for pin I2
24. Click the Cell Properties tab to view the cell properties and select the Truth Table tab.
25. Click Edit LUT Equation to view the equation for the LUT3. Note the LUT equation:
O= I1 & !I2 + I0 & I2
26. Click Cancel to close the window.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 86
Chapter 4: Lab 4: Vivado ECO Flow
This command selects the LUT2 that drives the count_out_reg[7] register, which drives
LED 7 on the KCU105 board. The only inputs are tog_state_reg for pin I0 and
mul_out_pre_reg[7] for pin I1. Replace the LUT2 with a 3-input LUT and connect the
output of counter register divClk_reg[24] to the additional input pin.
28. In the Vivado ECO Navigator, under Edit, click Create Cell.
The Create Cell dialog box opens.
a. In the Cell name field, enter ECO_LUT3.
b. In the Search field, enter LUT3.
c. Select LUT3 as the cell type and copy the LUT equation O=I1 & !I2 + I0 & I2 from cell
count_out[3]_i_1.
d. Click OK.
ECO_LUT3 is added to the Scratch Pad and the schematic.
e. Right-click the newly added ECO_LUT3 cell in the Scratch Pad, then select Mark and the
color red.
Note: Marking the ECO_LUT3 cell makes it easier to locate.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 87
Chapter 4: Lab 4: Vivado ECO Flow
Because you copied the LUT equation from cell count_out[3]_i_1, the nets must be
hooked up in the same order, with the following connections:
• Net mul_out_pre[7] connected to pin I0
• Net divClk_reg_n_0_[24] connected to pin I1
• Net tog_state connected to pin I2 of ECO_LUT3
29. Locate the tog_state net driven by the tog_state_reg register in the schematic and
select it. Alternatively, you can select the net from the Tcl Console by running the following
command:
select_objects [get_nets tog_state]
30. Connect the I2 pin of the newly added ECO_LUT3 cell by doing the following:
a. Hold down the Ctrl key and select pin I2 in the Scratch Pad. This selects pin I2 in
addition to the already selected tog_state net.
b. Click Connect Net.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 88
Chapter 4: Lab 4: Vivado ECO Flow
31. Locate the mul_out_pre[7] net in the schematic and select it.
Alternatively, you can select the net from the Tcl Console by executing the following
command:
select_objects [get_nets mul_out_pre[7]]
32. Connect the I0 pin of the newly added ECO_LUT3 cell by doing the following:
a. Hold down the CTRL key and select pin I0 in the Scratch Pad. This selects pin I0 in
addition to the already selected mul_out_pre[7] net.
b. Click Connect Net.
Note: If a message box appears stating that some objects are marked DONT_TOUCH, click Unset
Property and Continue.
33. Locate the divClk_reg_n_0_[24] net in the schematic and select it.
Alternatively, you can select the net from the Tcl Console by executing the following
command:
select_objects [get_nets divClk_reg_n_0_[24]]
34. Connect the I1 pin of the newly added ECO_LUT3 cell by doing the following:
a. Hold down the CTRL key and select pin I1 from the Scratch Pad. This selects pin I1 in
addition to the already selected divClk_reg_n_0_[24] net.
b. Click Connect Net.
Next, connect the updated logic function implemented in the newly created LUT3 to the
D input of count_out_reg[7]. The first step is to delete the LUT2 that was previously
connected to the D input.
35. Select the LUT2 count_out[7]_i_1 in the schematic window.
Alternately, you can select it by executing the following command in the Tcl Console:
select_objects [get_cell count_out[7]_i_1]
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 89
Chapter 4: Lab 4: Vivado ECO Flow
36. In the main toolbar, click the Delete button to delete the selected cell.
37. Select the net connected to the D input of the count_out_reg[7] register in the
schematic window.
Alternatively you can select the net from the Tcl Console by executing the following
command:
select_objects [get_nets count_out[7]_i_1_n_0]
38. Connect the O pin of the newly added ECO_LUT3 cell by doing the following:
a. Hold down the CTRL key and select pin O from the Scratch Pad.
b. Click Connect Net.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 90
Chapter 4: Lab 4: Vivado ECO Flow
• No other warnings were issued and you are ready to implement the changes.
Because you added additional logic, place the logic using the incremental place, and then
route the updated net connections using the incremental route.
2. In the Vivado ECO Navigator, under Run, click Place Design.
The Place Design dialog box opens, allowing you to specify additional options for the
place_design command. For this exercise, do not specify additional options.
3. Click OK.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 91
Chapter 4: Lab 4: Vivado ECO Flow
The incremental placement summary shows that the following two cells did not have their
previous placement reused:
• The new ECO_LUT3 cell, which had to be placed from scratch.
• The count_out_reg[7] cell, which had to get updated placement due to the placement
of the ECO_LUT3 driving it.
5. In the Vivado ECO Navigator, under Run, click Route Design.
The Route Design dialog box opens.
Depending on your selection, you have four options to route the ECO changes:
• Incremental Route: This is the default option.
• Route selected pin: This option limits the route operation to the selected pin.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 92
Chapter 4: Lab 4: Vivado ECO Flow
• Route selected non-Power nets: This option routes only the selected signal nets.
• Route selected Power nets: This option routes only the selected VCC/GND nets.
In this case, the best choice is to route the changes you made incrementally.
6. Select Incremental Route.
7. Click OK.
At the end of the route_design step, the incremental Routing Reuse Summary displays in
the Tcl Console.
Most of the nets did not require any routing and are fully reused.
TIP: It is a good idea to run report_route_status after the route operation to make sure that
all the nets are routed and none of them has any routing issues. This is especially true if you only
routed selected pins or selected nets and want to make sure you have not missed any routes.
Before you generate a bitstream, run the ECO DRCs on the design.
9. In the ECO Navigator, click Check ECO. Make sure that no Critical Warnings are generated.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 93
Chapter 4: Lab 4: Vivado ECO Flow
10. In the Vivado ECO Navigator, under Program, click Save Checkpoint As.
The Save Checkpoint As dialog box opens. Specify a name for the checkpoint file to write to
disk.
11. Click OK to save a checkpoint file with your changes.
12. In the Vivado ECO Navigator, under Program, click Generate Bitstream.
The Generate Bitstream dialog box opens.
You can specify a name for a Bit file and select the desired options for the
write_bitstream operation.
13. Click OK to generate a bitstream with your changes.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 94
Chapter 4: Lab 4: Vivado ECO Flow
14. In the Vivado ECO Navigator, under Program, click Write Debug Probes.
The Write Debug Probes dialog box opens.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 95
Chapter 4: Lab 4: Vivado ECO Flow
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 96
Chapter 4: Lab 4: Vivado ECO Flow
In this example, replace the net reset_vio that is connected to probe4 of u_ila_0 with
the net toggle_vio.
6. Scroll to the bottom of the probes for u_ila_0 in the Replace Debug Probes dialog and click
the reset_vio net name in the Probe column to select it.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 97
Chapter 4: Lab 4: Vivado ECO Flow
a. Type toggle_vio in the search field of the Choose Nets dialog box.
b. Click Find.
c. Select the toggle_vio net, and move it to the Selected names section.
d. Click OK.
10. Repeat steps 5 through 14 of Step 5: Implementing the ECO Changes to generate an updated
design checkpoint, bitstream file, and probes file (LTX).
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 98
Chapter 4: Lab 4: Vivado ECO Flow
The updated debug probes file has the reset_vio net for probe4 replaced with net
toggle_vio, which you can verify when you program the device with the updated bit file
and debug probes file.
Related Information
Conclusion
In this lab, you learned the following:
• Made changes to the previously implemented design using the Vivado ECO flow.
• Implemented the changes using incremental place and route.
• Generated a bitstream and probes file with your changes to configure the FPGA.
• Used the Replace Debug Probes command to switch the sources for debug probes in the
design.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 99
Appendix A: Additional Resources and Legal Notices
Appendix A
The AMD Adaptive Computing Documentation Portal is an online tool that provides robust
search and navigation for documentation using your web browser. To access the Documentation
Portal, go to https://docs.xilinx.com.
Documentation Navigator
Documentation Navigator (DocNav) is an installed tool that provides access to AMD Adaptive
Computing documents, videos, and support resources, which you can filter and search to find
information. To open DocNav:
• From the AMD Vivado™ IDE, select Help → Documentation and Tutorials.
• On Windows, click the Start button and select Xilinx Design Tools → DocNav.
• At the Linux command prompt, enter docnav.
Note: For more information on DocNav, refer to the Documentation Navigator User Guide (UG968).
Design Hubs
AMD Design Hubs provide links to documentation organized by design tasks and other topics,
which you can use to learn key concepts and address frequently asked questions. To access the
Design Hubs:
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 100
Appendix A: Additional Resources and Legal Notices
Support Resources
For support resources such as Answers, Documentation, Downloads, and Forums, see Support.
References
These documents provide supplemental material useful with this guide:
Revision History
05/30/2024: Released
The following with Vivado®
table shows Designhistory
the revision Suite 2024.1 without
for this changes from 2023.2.
document.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 101
Appendix A: Additional Resources and Legal Notices
information and to make changes from time to time to the content hereof without obligation of
AMD to notify any person of such revisions or changes. THIS INFORMATION IS PROVIDED "AS
IS." AMD MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE
CONTENTS HEREOF AND ASSUMES NO RESPONSIBILITY FOR ANY INACCURACIES,
ERRORS, OR OMISSIONS THAT MAY APPEAR IN THIS INFORMATION. AMD SPECIFICALLY
DISCLAIMS ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, OR
FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL AMD BE LIABLE TO ANY
PERSON FOR ANY RELIANCE, DIRECT, INDIRECT, SPECIAL, OR OTHER CONSEQUENTIAL
DAMAGES ARISING FROM THE USE OF ANY INFORMATION CONTAINED HEREIN, EVEN IF
AMD IS EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Copyright
© Copyright 2012-2023 Advanced Micro Devices, Inc. AMD, the AMD Arrow logo, Kintex,
UltraScale, Versal, Vivado, and combinations thereof are trademarks of Advanced Micro Devices,
Inc. Other product names used in this publication are for identification purposes only and may be
trademarks of their respective companies.
UG986 (v2024.1)
UG986 (v2023.2)May 30, 2024
October 18, 2023
Send Feedback
Implementation 102