+ Post New Thread
Results 1 to 9 of 9
  1. #1
    Full Member level 3
    Points: 1,549, Level: 8

    Join Date
    Jul 2013
    Posts
    178
    Helped
    1 / 1
    Points
    1,549
    Level
    8

    Problem with "find_routing_path" command in Tcl

    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,

    •   Alt15th March 2017, 20:58

      advertising

        
       

  2. #2
    Super Moderator
    Points: 27,178, Level: 40
    ads-ee's Avatar
    Join Date
    Sep 2013
    Location
    USA
    Posts
    6,174
    Helped
    1518 / 1518
    Points
    27,178
    Level
    40

    Re: Problem with "find_routing_path" command in Tcl

    You should be using the slice name.

    e.g. selecting the D pin of a BFF bel shows the following General properties:
    Click image for larger version. 

Name:	Capture.PNG 
Views:	0 
Size:	5.8 KB 
ID:	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[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]



  3. #3
    Full Member level 3
    Points: 1,549, Level: 8

    Join Date
    Jul 2013
    Posts
    178
    Helped
    1 / 1
    Points
    1,549
    Level
    8

    Re: Problem with "find_routing_path" command in Tcl

    Quote Originally Posted by ads-ee View Post
    You should be using the slice name.

    e.g. selecting the D pin of a BFF bel shows the following General properties:
    Click image for larger version. 

Name:	Capture.PNG 
Views:	0 
Size:	5.8 KB 
ID:	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[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 !



    •   Alt15th March 2017, 22:18

      advertising

        
       

  4. #4
    Super Moderator
    Points: 27,178, Level: 40
    ads-ee's Avatar
    Join Date
    Sep 2013
    Location
    USA
    Posts
    6,174
    Helped
    1518 / 1518
    Points
    27,178
    Level
    40

    Re: Problem with "find_routing_path" command in Tcl

    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:
    get_nets p_0_in[461]
    p_0_in[461]
    
    get_site_pins -of [get_nets p_0_in[461]]
    SLICE_X2Y1/BX SLICE_X1Y0/CX SLICE_X1Y0/BQ
    
    lindex used to extract the Q output (which you'll notice is BQ not Q)
    lindex [get_site_pins -of [get_nets p_0_in[461]]] 2
    SLICE_X1Y0/BQ
    
    get_nodes -of [lindex [get_site_pins -of [get_nets p_0_in[461]]] 2]
    CLBLL_L_X2Y0/CLBLL_L_BQ
    
    lindex [get_nodes -of [lindex [get_site_pins -of [get_nets p_0_in[461]]] 2] ] 0
    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.


    1 members found this post helpful.

    •   Alt16th March 2017, 00:45

      advertising

        
       

  5. #5
    Full Member level 3
    Points: 1,549, Level: 8

    Join Date
    Jul 2013
    Posts
    178
    Helped
    1 / 1
    Points
    1,549
    Level
    8

    Re: Problem with "find_routing_path" command in Tcl

    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:
    WARNING: [Vivado 12-507] No nets matched 'SPFF1/Q'.



  6. #6
    Super Moderator
    Points: 27,178, Level: 40
    ads-ee's Avatar
    Join Date
    Sep 2013
    Location
    USA
    Posts
    6,174
    Helped
    1518 / 1518
    Points
    27,178
    Level
    40

    Re: Problem with "find_routing_path" command in Tcl

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

    Did you mistype the [get_nets netff1]?



  7. #7
    Full Member level 3
    Points: 1,549, Level: 8

    Join Date
    Jul 2013
    Posts
    178
    Helped
    1 / 1
    Points
    1,549
    Level
    8

    Re: Problem with "find_routing_path" command in Tcl

    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



    •   Alt15th May 2017, 18:17

      advertising

        
       

  8. #8
    Super Moderator
    Points: 27,178, Level: 40
    ads-ee's Avatar
    Join Date
    Sep 2013
    Location
    USA
    Posts
    6,174
    Helped
    1518 / 1518
    Points
    27,178
    Level
    40

    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


    1 members found this post helpful.

  9. #9
    Full Member level 3
    Points: 1,549, Level: 8

    Join Date
    Jul 2013
    Posts
    178
    Helped
    1 / 1
    Points
    1,549
    Level
    8

    Re: Problem with "find_routing_path" command in Tcl

    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
    
        }



--[[ ]]--