Skip to content

How should I get unrouted nets on the module instance level? #1281

@Han-sok

Description

@Han-sok

Hi, I am trying to learn how to route selected pins that are unrouted in the design using RapidWright.
To make a mock example, I synthesized the DMA PCIe example design and intentionally ripped the ports of "xdma_app_i" instance.
I stored the .dcp and .edn (EDIF export file) from Vivado and read those files in RapidWright.

However, when I open the design and search through the netlist, the nets that were ripped in Vivado are not there.
I can verify this by opening up the "net_list.txt" file I created.
Image

Below is the Java code I am using to do that:

import com.xilinx.rapidwright.design.*;
import com.xilinx.rapidwright.design.SitePinInst;
import com.xilinx.rapidwright.edif.EDIFCell;
import com.xilinx.rapidwright.edif.EDIFCellInst;
import com.xilinx.rapidwright.edif.EDIFNet;
import com.xilinx.rapidwright.edif.EDIFPortInst;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Collection;

public class RoutingTest {
    public static void main(String[] args) {
        String dcpPath = "/home/hansok/Projects/RW_practice/project_2/";
        Design design = Design.readCheckpoint(dcpPath + "today_test.dcp", dcpPath + "today_test.edn");

        System.out.println("Design loaded: " + design.getName());

        EDIFCell top_cell = design.getNetlist().getTopCell();
        EDIFCellInst cell_app = top_cell.getCellInst("xdma_app_i");

        // Store text to a file.
        String outputPath = "/home/hansok/Projects/RW_practice/project_2/net_list.txt";
        String filePath = dcpPath + "nets.txt";

        try (FileWriter writer = new FileWriter(outputPath)) {
            for (Net net : design.getNets()) {
                if (net.getName().startsWith("xdma_app_i")) {
                    continue;
                } else if (net.getName().startsWith("xdma_1_ex_i")) {
                    continue;
                } else {
                    writer.write(net.getName() + "\n");
                }
            }
            System.out.println("Net list written to: " + outputPath);
        } catch (IOException e) {
            System.err.println("Failed to write net list: " + e.getMessage());
        }

        for (Net n : design.getNets()) {
            if (n.getName().startsWith("m_axi")) {
                for (SitePinInst pin : n.getPins()) {
                    if (!pin.isRouted() && !pin.isOutPin()) {
                        System.out.println("Net " + n.getName() + " has unrouted pin: " + pin.getName() + " in tile: " + pin.getTile().getName());
                    }
                }
            }
        }

    }
}

If I reopen the design in Vivado, those nets are still there, and I can highlight them with the Tcl command,
highlight_objects -color red [get_nets * -filter {ROUTE_STATUS == UNROUTED}].
and I can see the highlighted nets as shown in the screenshot below.
Image

Should I create a fake routing to some register for those ripped nets and store the .dcp file again to make those unrouted nets visible in RapidWright?
Please let me know the correct way to achieve this.

Thank you.

Best,
Han-sok

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions