Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Problem with "find_routing_path" command in Tcl

Status
Not open for further replies.

msdarvishi

Full Member level 4
Joined
Jul 30, 2013
Messages
230
Helped
1
Reputation
2
Reaction score
1
Trophy points
18
Activity points
2,349
Deal all,

I am using Vivado Design Suite 2016.1 on Linux machine and trying for manual routing activities.

I am trying to use the find_routing_path command in Tcl to find a routing path between two nodes as described in page 380 / 1305 of UG835 (v2014.2) June 4, 2014 but it does not work in my case !

In my design, I have a D flip-flop entitled "Inst_sync/DOUT1_reg placed in site SLICE_X1Y51 and tile CLBLL_L_X2Y51 and BEL A5FF that its Q output must be connected to another D flip-flop entitled "Inst_sync/DOUT2_reg located in the same SLICE and CLB but in BEL AFF. AS shown in the attached figure, there is a net connected between two mentioned flip-flops.

I have defined the command as follows:

Code:
find_routing_path -from [get_bel_pins CLBLL_L_X2Y51/A5FF/Q] -to get_bel_pins[CLBLL_L_X2Y51/BFF/D]

that did not work and once again like below:

Code:
find_routing_path -from [get_nodes -of [get_site_pins -of [get_nets Inst_sync/DOUT1_reg/Q]] 0] -to [get_nodes -of [get_site_pins -of [get_nets Inst_sync/DOUT2_reg/D]] 1]

that did not work again ! Both trials returned the following error messages:

Code:
ERROR: [Common 17-56] '-from <node>' expects exactly one object got '0'.

or
Code:
ERROR: [Common 17-161] Invalid option value 'Inst_sync_rst/DOUT2]' specified for 'from'.


I have followed the command description in the link provided above but it does not work ! Can anybody help me to solve this problem? Kind replies and solutions are mostly appreciated.

Thanks,
 

Attachments

  • Screenshot-1.png
    Screenshot-1.png
    10.7 KB · Views: 97

You should be using the slice name.

e.g. selecting the D pin of a BFF bel shows the following General properties:
Capture.PNG
If you use the following command in the Tcl console: get_bel_pins SLICE_X6Y55/BFF/* you will get the following back:
SLICE_X6Y55/BFF/CE SLICE_X6Y55/BFF/CK SLICE_X6Y55/BFF/D SLICE_X6Y55/BFF/SR SLICE_X6Y55/BFF/Q

You also seem to have a typo for the -to get_bel_pins command:
Code:
This:
find_routing_path -from [get_bel_pins CLBLL_L_X2Y51/A5FF/Q] -to get_bel_pins[B][COLOR="#FF0000"][[/COLOR][/B]CLBLL_L_X2Y51/BFF/D]
should be this:
find_routing_path -from [get_bel_pins SLICE_X0Y51/A5FF/Q] -to [get_bel_pins SLICE_X0Y51/BFF/D]
 

You should be using the slice name.

e.g. selecting the D pin of a BFF bel shows the following General properties:
View attachment 136991
If you use the following command in the Tcl console: get_bel_pins SLICE_X6Y55/BFF/* you will get the following back:
SLICE_X6Y55/BFF/CE SLICE_X6Y55/BFF/CK SLICE_X6Y55/BFF/D SLICE_X6Y55/BFF/SR SLICE_X6Y55/BFF/Q

You also seem to have a typo for the -to get_bel_pins command:
Code:
This:
find_routing_path -from [get_bel_pins CLBLL_L_X2Y51/A5FF/Q] -to get_bel_pins[B][COLOR="#FF0000"][[/COLOR][/B]CLBLL_L_X2Y51/BFF/D]
should be this:
find_routing_path -from [get_bel_pins SLICE_X0Y51/A5FF/Q] -to [get_bel_pins SLICE_X0Y51/BFF/D]


Dear @ads-ee

Thanks for your reply and nice explanation. With the corrections, primarily I did the following command:

Code:
find_routing_path -from [get_bel_pins SLICE_X0Y51/A5FF/Q] -to [get_bel_pins SLICE_X0Y51/BFF/D]

that returns the following error message:

ERROR: [Vivado 12-2475] The list of nodes contains an object that is not recognized as a node.

then, I tried with the following command:

Code:
find_routing_path -from [get_nodes SLICE_X0Y51/A5FF/Q] -to [get_nodes SLICE_X0Y51/BFF/D]

that returns some warnings and 1 error message:

WARNING: [Vivado 12-2677] 'get_nodes' without an -of_object switch is potentially runtime- and memory-intensive. Please consider supplying an -of_object switch. You can also press CTRL-C from the command prompt or click cancel in the Vivado IDE at any point to interrupt the command.
WARNING: [Vivado 12-2683] No nodes matched 'get_nodes SLICE_X0Y51/A5FF/Q'

get_nodes: Time (s): cpu = 00:00:14 ; elapsed = 00:00:14 . Memory (MB): peak = 9444.074 ; gain = 0.000 ; free physical = 4884 ; free virtual = 17277
WARNING: [Vivado 12-2677] 'get_nodes' without an -of_object switch is potentially runtime- and memory-intensive. Please consider supplying an -of_object switch. You can also press CTRL-C from the command prompt or click cancel in the Vivado IDE at any point to interrupt the command.
WARNING: [Vivado 12-2683] No nodes matched 'get_nodes SLICE_X0Y51/BFF/D'

get_nodes: Time (s): cpu = 00:00:14 ; elapsed = 00:00:14 . Memory (MB): peak = 9444.074 ; gain = 0.000 ; free physical = 4884 ; free virtual = 17277
ERROR: [Common 17-56] '-from <node>' expects exactly one object got '0'.


It seems weird ! Do you have any idea?

Thank in advance for your help !
 

A slice location that specifies down to a pin is not a node, which is why you have the error "got '0'".

I suggest that you should try out the sub-commands before attempting to use them in a routing path query. First see if they produce a list of objects before even attempting to run the query.

I also just took a look at the example of the query and it seems to have a lot more than just a simple -from some_site -to some_site.
Code:
find_routing_path -from [lindex [get_nodes -of [get_site_pins -of [get_nets wbOutputData_OBUF[14]]]] 0] \
-to [lindex [get_nodes -of [get_site_pins -of [get_nets wbOutputData_OBUF[14]]]] 1]
Specifically none of your attempts has a lindex query to pull the item from the lists produced by the get commands, which might result in issues as some of these queries come back with multiple items in the list.

e.g. from a design I have open with a used BFF in a slice.
Code:
[COLOR="#0000FF"]get_nets p_0_in[461][/COLOR]
p_0_in[461]

[COLOR="#0000FF"]get_site_pins -of [get_nets p_0_in[461]][/COLOR]
SLICE_X2Y1/BX SLICE_X1Y0/CX SLICE_X1Y0/BQ

[I][B]lindex used to extract the Q output (which you'll notice is BQ not Q)[/B][/I]
[COLOR="#0000FF"]lindex [get_site_pins -of [get_nets p_0_in[461]]] 2[/COLOR]
SLICE_X1Y0/BQ

[COLOR="#0000FF"]get_nodes -of [lindex [get_site_pins -of [get_nets p_0_in[461]]] 2][/COLOR]
CLBLL_L_X2Y0/CLBLL_L_BQ

[COLOR="#0000FF"]lindex [get_nodes -of [lindex [get_site_pins -of [get_nets p_0_in[461]]] 2] ] 0[/COLOR]
CLBLL_L_X2Y0/CLBLL_L_BQ
As you can see I actually tested this by building up from the first command performed (get_nets).

Note: looking back over my commands I think the example is wrong as the get_site_pins command will produce two items in the list and the next get_nodes query will fail due to the list object. I ran into the same issue when I was trying out the commands in my sequence above.
 
Dear @ads-ee,

This problem for a defined instance in VHDL file (two source and destination flip-flops).

Now, I tried to create two flip-flops (FDCE) using Tcl scripts (creat_cell) and apply the find_routing_path command in order to give the routing path between a startpoint flipflop and an endpoint flip-flop. The cell creation and placement goes very well in Tcl scripts, but while I try to apply the find_routing_path command, it say the it does not understand the defined cell ! It is noticable that each created and placed cell with Tcl scripts is created in the Leaf cells windows as shown in the attached figure and their color are different as those who are already defined in my VHDL code (I mean the StartPoint_DFF and EndPoint_DFF).

I have my trials and error message here. Do you have any idea or hint about this issue, please?

Thanks and Regards,


Code:
create_cell -reference FDCE SPFF1
place_cell SPFF1 SLICE_X5Y49/AFF

create_cell -reference FDCE EPFF1
place_cell EPFF1 SLICE_X5Y49/A5FF

create_net netff1
connect_net -net netff1 -objects {SPFF1/Q  EPFF1/D}
route_design -nets [get_nets netff1]

Prior to apply find_routing_path, I tried to test this by building up from the first command performed (get_nets) as you have explained above in older posts. But it gives the following Warning !

Code:
get_nets SPFF1/Q

Code:
[COLOR="#FF8C00"]WARNING: [Vivado 12-507] No nets matched 'SPFF1/Q'.[/COLOR]
 

SPFF1/Q isn't a net so the warning is valid...

Did you mistype the [get_nets netff1]?
 

Dear ads-ee,

Again, I did the following trial. It works and does not give any warning message, but It says No path found while I see a routed path (netff1) between two flip-flops !!! It seems weird !

Code:
get_nets netff1
get_site_pins -of [get_nets netff1]
lindex [get_site_pins -of [get_nets netff1]]
get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]
lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]]
get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]
lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]]
find_routing_path -from [lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]]]  -to [lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]]]


Result:
Code:
No path found


While by Clicking on the Load net direction in Net Properties window in Vivado, I see the following direction for the netff1:

Code:
CLBLL_L_AQ   CLBLL_LOGIC_OUTS0    BYP_ALT0    BYP_L0    CLBLL_L_AX
 

Re: Problem with &quot;find_routing_path&quot; command in Tcl

The path has to be unrouted or not fully routed for the find_routing_path to work.

Doing an unroute on the path results in the following find_routing_path (for my location)

CLBLL_L_X2Y0/CLBLL_LL_AQ CLBLL_L_X2Y0/CLBLL_LOGIC_OUTS4 INT_L_X2Y0/BYP_ALT1 INT_L_X2Y0/BYP_L1 CLBLL_L_X2Y0/CLBLL_LL_AX

- - - Updated - - -

The description of find_routing_path in UG835:
Description
Finds a routing solution between two nodes on an unrouted, or partially routed net, in an
implemented design
 
Thank you dear @ads-ee for your great hint ! Now, it works ! Indeed, in my former scripts, after creation og netff1, I should not route it to be able to use find_routing_path. Here is my final trial with deletion of slice number that gives exactly the same routing direction as determined by vivado .

Code:
get_nets netff1

get_site_pins -of [get_nets netff1]
lindex [get_site_pins -of [get_nets netff1]]

get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]
lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]]

get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]
lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]]

find_routing_path -from [lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]]]  -to [lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]]]

set find_routing_path [find_routing_path -from [lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 1]]]  -to [lindex [get_nodes -of [lindex [get_site_pins -of [get_nets netff1]] 0]]]]
foreach j $find_routing_path {
    regex {.*/(.*)} INT_L_X4Y49/$j match sub1
    puts $sub1
    incr i

    }
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top