Issue with connecting previously removed cell pins to net #1241
-
|
Hi, I am trying to learn how to use RapidWright—more specifically how to create and manage nets. One of the test cases that I tried was to remove and re-add an existing net. These are the steps that I took:
However, when I try to print the nets present in the design after step 7, I get the following output in my Python terminal: As you can see, only the extra pin (which wasn't a part of the old net) is successfully connected to the new net, whereas the ones that I am trying to re-use (O and I5 in my code) don't get connected at all (and without any error messages from the library). Am I doing something wrong or could this possibly be a bug? The only solution I found to it was to write and load a new checkpoint between step 5 and 6, but this doesn't feel like a sustainable option for larger designs. The board that I am using for my design is the Virtex UltraScale+ (xcvu19p-fsva3824-2-e). Below is my full code. Sorry for advance if the my question is weirdly formatted. This is the first time I am posting on GitHub! I appreciate any help I can get :) /Chrysella Edit: It is worth mentioning that the line This seems to indicate that the net Code: |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
|
Thanks @chrmarlyn for your example code! You are approaching this in a straight forward way and I think it will help us better document these APIs and how to think about using them. One important thing to understand about RapidWright and designs from Vivado in general is that there is a logical netlist and a physical netlist. In RapidWright, we represent the logical netlist with all of the objects that start with The physical netlist is represented by the more generic names such as In short, to connect and disconnect cells from both the logical and physical netlist, the best way to proceed is it use the methods # ...
from com.xilinx.rapidwright.eco import ECOTools
loadedDesign = Design.readCheckpoint("dummy_exp.dcp")
target_net = loadedDesign.getNet("old_net")
# First remove all the sinks
ECOTools.disconnectNet(loadedDesign, target_net.getLogicalHierNet().getLeafHierPortInsts(False));
# Then remove the source
ECOTools.disconnectNet(loadedDesign, target_net.getLogicalHierNet().getLeafHierPortInsts());
loadedDesign.removeNet(target_net);
new_net = loadedDesign.createNet("new_net");
ECOTools.connectNet(loadedDesign, loadedDesign.getCell("test_LUT6_0"), "O", new_net);
ECOTools.connectNet(loadedDesign, loadedDesign.getCell("test_LUT6_1"), "I0", new_net);
ECOTools.connectNet(loadedDesign, loadedDesign.getCell("test_LUT6_1"), "I5", new_net);
# This router is extremely basic, in most cases you'll want use the RWRoute router (see com.xilinx.rapidwright.rwroute.RWRoute)
Router(loadedDesign).routeDesign();
loadedDesign.writeCheckpoint("final.dcp");After running this and loading Here is the Device view (physical netlist): Hope that helps. |
Beta Was this translation helpful? Give feedback.


Thanks @chrmarlyn for your example code! You are approaching this in a straight forward way and I think it will help us better document these APIs and how to think about using them. One important thing to understand about RapidWright and designs from Vivado in general is that there is a logical netlist and a physical netlist. In RapidWright, we represent the logical netlist with all of the objects that start with
EDIF*(EDIFCell,EDIFPort,EDIFCellInst,EDIFNet, andEDIFPortInst, see this diagram to help map them to what is shown in Vivado's schematic viewer).The physical netlist is represented by the more generic names such as
Cell,Net,SiteInst,SitePinInst. When modifying an implemen…