Step 4: Making the ECO Modifications - 2023.2 English

Vivado Design Suite Tutorial: Implementation (UG986)

Document ID
UG986
Release Date
2023-10-18
Version
2023.2 English
  1. In the Flow Navigator, select the Project Manager.
  2. In the Design Runs window, right-click on impl_1 and select Open Run Directory.
  3. 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.


  4. 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.
  5. From the main menu, select File > Checkpoint > Open.

    The Open Checkpoint dialog box opens.

  6. 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.

  7. Click Yes.
  8. From the main menu, select Layout > ECO.

    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, and 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, 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.


  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.



    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.

  12. In the Scratch Pad, select the my_mult_0/in2[3], my_mult_0/in2[2], and my_mult_0/in2[0] pins.
  13. In the Edit section of the Vivado ECO Navigator, click Connect Net.

    The Connect Net dialog box opens.



  14. In the Connect Net dialog box, select <const0> from the GROUND section.

  15. Click OK.

    <const0> is added to the Scratch Pad.

  16. Collapse the <const0> signal.

    The three pins that you connected now show check marks in the Connectivity column of the Scratch Pad.



  17. In the Scratch Pad, select the my_mult_0/in2[1] pin.
  18. Click Connect Net.

    The Connect Net dialog box opens.

  19. In the Connect Net dialog box, select <const1> from the POWER section.

  20. Click OK.

    <const1> is added to the Scratch Pad.

  21. Collapse the <const1> signal.

    The pin that you connected now shows check marks in the Connectivity column of the Scratch Pad.



  22. 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, 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].

  23. 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 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.

  27. 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 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.

    1. In the Cell name field, enter ECO_LUT3.
    2. In the Search field, enter LUT3.
    3. Select LUT3 as the cell type and copy the LUT equation O=I1 & !I2 + I0 & I2 from cell count_out[3]_i_1.
    4. Click OK.

      ECO_LUT3 is added to the Scratch Pad and the schematic.

    5. 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.


      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:
    1. 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.
    2. Click Connect Net.


  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:
    1. 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.
    2. 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:
    1. 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.
    2. 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]
  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:
    1. Hold down the CTRL key and select pin O from the Scratch Pad.
    2. Click Connect Net.