New route from Source to Sink

76 views
Skip to first unread message

qaarah

unread,
May 20, 2020, 4:52:42 AM5/20/20
to RapidWright
Hi, 
I am a newbie to Rapidwright. I am interested to create a new net from a source, For example  A slice and cell ( SLICE_X2Y98/B5LUT), to a sink, IOB_X1Y136/Y3. 
I case of source I can define cell like that.
Cell src = design.getSiteInstFromSiteName("SLICE_X6Y159").getCell("B6LUT");

Could someone explain for sink what can be used, if I have a location of a user I/Opin of an IOB?
Thanks, 
Best Regards, 
qaa

RapidWright

unread,
May 20, 2020, 3:55:54 PM5/20/20
to RapidWright
Hi Qaa,

Take a quick look at one of the examples: 


This program creates a circuit from scratch (IOs that connect to a LUT/AND gate) that hopefully should demonstrate what you are looking for.  If not, feel free to ask clarifying questions here.

Thanks,

Chris

qaarah

unread,
May 21, 2020, 10:14:57 PM5/21/20
to RapidWright
Hi Chris, 
Thanks for your example and response. I took a look on the example and still cold not find the exact solution for my problem. 
First of all I have already a design as a dcp. Where I want to create a new net (Also route) from
SLICE_X2Y98/B5LUT to IOB_X1Y136/Y3.

Here I consider First location as a source and other as sink. I want to route some of the nets to the unused IO pins.
How can I create  net from source to sink.? Do I need to unroute the sites first and then reroute again to make those nets working? How can I know the routing congestions if any?
Here are some steps I tried. But only src and sink are created without a net. If you could proived steps missing to do this, would be nice. 
Thanks
design = Design.readCheckpoint("checkpoint.dcp")
src
= design.getSiteInstFromSiteName("SLICE_X6Y159").getCell("AFF")
snk
= design.createAndPlaceIOB("snk", PinType.OUT, "AB22", "LVCMOS18")
outNet
= design.createNet("src")
outNet
.connect(src, "Q")
outNet
.connect(snk, "I")
design
.routeSites()
design
.writeCheckpoint("typicalRoute.dcp")

RapidWright

unread,
May 22, 2020, 5:15:29 PM5/22/20
to RapidWright
There are appears to be an inconsistency in your initial request vs. the code you have provided.  It sounds like you want the (output?) of the LUT at SLICE_X2Y98/B5LUT to drive the input on the IOB_X1Y136?  As far as I know, Y3 is not a pin on an IO site, are you referring to the package pin name?

The source code example you provide mostly makes sense, but does not match the same locations as the initial request (SLICE_X2Y98 vs. SLICE_X6Y159), it also is using a FF vs. a LUT as the source.  At first glance, the code appears to not have an issue, but it is hard to tell what might be the problem if you are encountering one.

If you could perhaps share the original DCP that you are using (checkpoint.dcp) or a similar example, then I might be able to help you more, but its hard to see what might be going wrong here.

qaarah

unread,
May 23, 2020, 10:47:55 AM5/23/20
to RapidWright
Hey Chris!


On Friday, May 22, 2020 at 11:15:29 PM UTC+2, RapidWright wrote:
There are appears to be an inconsistency in your initial request vs. the code you have provided.  It sounds like you want the (output?) of the LUT at SLICE_X2Y98/B5LUT to drive the input on the IOB_X1Y136?  As far as I know, Y3 is not a pin on an IO site, are you referring to the package pin name?
Sorry for inconsistency , Later on I tried something that I wanted to do. You have got the point right. I want to drive the inputs of IOB (If there are unused pins) from the output of LUT or Register. Y3 is the package pin name. 
The source code example you provide mostly makes sense, but does not match the same locations as the initial request (SLICE_X2Y98 vs. SLICE_X6Y159), it also is using a FF vs. a LUT as the source.  At first glance, the code appears to not have an issue, but it is hard to tell what might be the problem if you are encountering one.
The location in the initial request was LUT and now FF. I want to take the output of both, which may additionally drive the input of IOB. 
If you could perhaps share the original DCP that you are using (checkpoint.dcp) or a similar example, then I might be able to help you more, but its hard to see what might be going wrong here.
I would like to inob you the original dcp. 
Thanks, 
Best 
Qaa 

qaarah

unread,
May 30, 2020, 9:41:02 AM5/30/20
to RapidWright
Hi, 
Using the above code, I get errors while compiling these two commands. This return the dcp without any new net and connection from src to sink. (Using typical router)
design.routeSites()
router.routeDesign();

However, using the code below, I am able to get partially routed net. 
src = design.getSiteInstFromSiteName("SLICE_X6Y159").getCell("AFF")
snk = design.createAndPlaceIOB("snk", PinType.OUT, "AF23", "LVCMOS18")
outputnetname = "newnet"
outNet = design.createNet("newnet")
outNet.connect(src, "Q")
outNet.connect(snk, "I")
srcNode = outNet.getSource().getRouteNode()
snkNode = outNet.getSinkPins().get(0).getRouteNode();
router = Router(design)
newpath= DesignTools.findRoutingPath(srcNode, snkNode)
outNet.getPIPs().addAll(newpath)
outNet.lockRouting()
design.writeCheckpoint("newNet.dcp")

In Vivado, It can be observed that the Net is partially routed, there is routing conflict and the color of the new net is yellow. How to fully route a new net and resolve confilcts. 
Thanks, 
Best, 
Qaa
Reply all
Reply to author
Forward
0 new messages