- In the Flow Navigator, select the Project Manager.
- In the Design Runs window, right-click on impl_1 and select Open Run Directory.
- The run directory opens in a file browser, as seen in the following figure. The
run directory contains the routed checkpoint
(top_routed.dcp) to be used for the 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.
- Create a new directory named
ECO
in the original C:/Vivado_Tutorial/project_ECO_lab project directory, and copy the top_routed.dcp file from the implementation runs directory to that newly created directory. - From the main menu, select
The Open Checkpoint dialog box opens.
. - Navigate to C:/Vivado_Tutorial/project_ECO_lab/ECO and
select the top_routed.dcp checkpoint.
A dialog box opens, asking whether to close the current project.
- Click Yes.
- From the main menu, select
The ECO Layout is selected. The ECO Navigator is displayed on the left of the layout (highlighted in red in the following figure). It provides access to netlist commands, run steps, report and analysis tools, and commands to save changes and generate programming files.
The Scratch Pad in the center of the layout (highlighted in red in the following figure) tracks netlist changes, as well as place and route status for cells, pins, ports, and nets.
Note: ECOs only work on design checkpoints. The ECO layout is only available after you have opened a design checkpoint in the Vivado IDE.
To illustrate the capabilities of the ECO flow, you next change the functionality of the multiplier from a square of
count[3:0]
to a multiply by two.
. - 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.
- 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[*]]
- 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.
The Scratch Pad is populated with the four nets
divClk_reg[28:25]
that you disconnected and the multiplier input pinsmy_mult_0/in2[3:0]
. Note the following in the Scratch Pad:- The Scratch Pad connectivity column (Con) shows a check mark 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 check mark 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.
- The Scratch Pad connectivity column (Con) shows a check mark next to the
- In the Scratch Pad, select the
my_mult_0/in2[3]
,my_mult_0/in2[2]
, andmy_mult_0/in2[0]
pins. - In the Edit section of the Vivado ECO Navigator, click
Connect Net.
The Connect Net dialog box opens.
- In the Connect Net dialog box, select <const0> from
the GROUND section.
- Click OK.
<const0>
is added to the Scratch Pad. - Collapse the
<const0>
signal.The three pins that you connected now show check marks in the Connectivity column of the Scratch Pad.
- In the Scratch Pad, select the my_mult_0/in2[1] pin.
- Click Connect Net.
The Connect Net dialog box opens.
- In the Connect Net dialog box, select <const1> from
the POWER section.
- Click OK.
<const1>
is added to the Scratch Pad. - Collapse the
<const1>
signal.The pin that you connected now shows check marks in the Connectivity column of the Scratch Pad.
- Select the my_mult_0/in2 pin in the
Scratch Pad.
This command highlights the pins in the currently open Schematic window, and shows the updated connections.
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, you will 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]
. - From the Tcl Console, type the following
command:
select_objects [get_cells count_out[3]_i_1]
This lets you quickly identify the
LUT3
that drives thecount_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
-
- Click the Cell Properties tab to view the cell properties and select the Truth Table tab.
- Click Edit LUT Equation to view the equation for the
LUT3. Note the LUT equation:
O= I1 & !I2 + I0 & I2
- Click Cancel to close the window.
- From the Tcl Console, type the following
command:
select_objects [get_cells count_out[7]_i_1]
This command selects the LUT2 that drives the
count_out_reg[7]
register, which drives LED 7 on the KCU105 board. The only inputs aretog_state_reg
for pin I0 andmul_out_pre_reg[7]
for pin I1. You need to replace the LUT2 with a 3-input LUT and connect the output of counter registerdivClk_reg[24]
to the additional input pin. - In the Vivado ECO Navigator, under Edit, click
Create Cell.
The Create Cell dialog box opens.
- In the Cell name field, enter
ECO_LUT3
. - In the Search field, enter
LUT3
. - Select LUT3 as the cell type and copy the LUT
equation O=I1 & !I2 + I0 & I2
from cell
count_out[3]_i_1
. - Click OK.
ECO_LUT3
is added to the Scratch Pad and the schematic. - Right-click the newly added
ECO_LUT3
cell in the Scratch Pad, then select Mark and the color red.Note: Marking theECO_LUT3
cell makes it easier to locate.
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 pinI0
- Net
divClk_reg_n_0_[24]
connected to pinI1
- Net
tog_state
connected to pinI2
ofECO_LUT3
- Net
- In the Cell name field, enter
- Locate the
tog_state
net driven by thetog_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]
- Connect the
I2
pin of the newly addedECO_LUT3
cell by doing the following:- Hold down the Ctrl key and select
pin I2 in the Scratch Pad. This
selects pin
I2
in addition to the already selectedtog_state
net. - Click Connect Net.
- Hold down the Ctrl key and select
pin I2 in the Scratch Pad. This
selects pin
- 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]]
- Connect the
I0
pin of the newly addedECO_LUT3
cell by doing the following:- Hold down the CTRL key and select pin
I0 in the Scratch Pad. This selects pin
I0
in addition to the already selectedmul_out_pre[7]
net. - Click Connect Net.Note: If a message box appears stating that some objects are marked DONT_TOUCH, click Unset Property and Continue.
- Hold down the CTRL key and select pin
I0 in the Scratch Pad. This selects pin
- 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]]
- Connect the
I1
pin of the newly addedECO_LUT3
cell by doing the following:- Hold down the CTRL key and select pin
I1 from the Scratch Pad. This selects pin
I1
in addition to the already selecteddivClk_reg_n_0_[24]
net. - Click Connect Net.
Next, you need to connect the updated logic function implemented in the newly created
LUT3
to theD
input ofcount_out_reg[7]
. The first step is to delete theLUT2
that was previously connected to theD
input.
- Hold down the CTRL key and select pin
I1 from the Scratch Pad. This selects pin
- 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]
- In the main toolbar, click the Delete button to delete the selected cell.
- Select the net connected to the
D
input of thecount_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]
- Connect the
O
pin of the newly addedECO_LUT3
cell by doing the following:- Hold down the CTRL key and select pin
O
from the Scratch Pad. - Click Connect Net.
- Hold down the CTRL key and select pin