cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Visitor
Visitor
3,863 Views
Registered: ‎06-13-2017

Cell locations

Jump to solution

Hello Guys;

I am new to Vivado (and to FPGA in general).

I am trying to access cell locations using the property "LOC" (something like:

set loc [get_property LOC $cell]).  The locations I am seeing are in the form "SLICE_X**, SLICE_Y**".

I seeking coordinates  expressed in real (meaningful) units (such as microns, Angstroms...etc). How can I get such coordinates?...

Your help is highly appreciated.....

 

--Hussein;

0 Kudos
1 Solution

Accepted Solutions
Highlighted
Guide
Guide
6,146 Views
Registered: ‎01-23-2009

From a quick look at the documentation and the tool (I have never used them), the RPM_X and RPM_Y are the RPM_GRID based coordinates of a site. These are still "logical" coordinates, but are a unified coordinate system between the different types of resources on the die - see UG903, Chapter 5, "Absolute RPM Grid-Based Coordinates" (v2017.1, p.160).

 

Like the SLICE_XxxYyy notation, this still isn't based on any physical measure, but it does have the advantage of placing all resources (SLICE, BRAM, DSP, etc...) on the same grid system. But again, the grid doesn't guarantee anything about "true distance on the die" - but it is probably the closest thing that you can get.

 

And to get the RPM_X and RPM_Y coordinates of a cell in your design you should use

 

set x [get_property RPM_X [get_sites -of_objects $cell]]

 

(assuming $cell is a cell object, gotten with a get_cells command, not simply a cell name)

 

Avrum

View solution in original post

Tags (1)
0 Kudos
6 Replies
Highlighted
Guide
Guide
3,840 Views
Registered: ‎01-23-2009

The only location information that is available is the SLICE_XxxYyy location on the die. This is the location in the grid of SLICEs, and cannot be converted to any measurement unit. The SLICE locations tell us relative location in that slice X+1 is the slice immediately to the right of slice X, and slice Y+1 is the slice immediately above slice Y. However, slices are not uniformly distributed across the die; columns of slices are interspersed with columns of block RAMs,  DSP cells, clocking resources and I/O resources, and rows of SLICES are interspersed with horizontal clocking resources. This is in addition to the "other" things on the die like the configuration controller, PCIe blocks, high speed transceivers, etc...

 

So there is no way to get physical information in a measurement unit.

 

The bigger question is why you want this? This information has no practical value in the FPGA design and implementation process...

 

Avrum

0 Kudos
Highlighted
Moderator
Moderator
3,831 Views
Registered: ‎09-15-2016

Hi @hetawil,

 

In addition to @avrumw's perfect answer, if you are new to FPGA and Vivado, looking at the architecture initially might help understand things better. Also you can check out the two documents on CLBs and clocking resources for further reading-

https://www.xilinx.com/support/documentation/user_guides/ug472_7Series_Clocking.pdf

https://www.xilinx.com/support/documentation/user_guides/ug474_7Series_CLB.pdf

 

Regards,
Prathik
-----------------------------------------------------------------------------------------------
Please mark the post as an answer "Accept as solution" in case it helps to resolve your query.
Helpful answer -> Give Kudos
-----------------------------------------------------------------------------------------------

 

0 Kudos
Highlighted
Visitor
Visitor
3,803 Views
Registered: ‎06-13-2017

Avrum;

  Thanks much for the thorough reply....

  I am working on a flow in which I need to stitch a group of cells based on a distance metric (Scan chain stitching kind of thing, except the application here is different.). So the cells ought be stitched such that the total tour distance is minimum (travelling sales man kind of model). So, the flow involves generating a quick placement (using place_design), followed by dumping the locations into a file. The locations are then loaded into a C++ based stitching algorithm, which upon running generates the optimal tour. That is why I need meaningful numerical coordinates...

 

So another questions here...if I try the following:

   set loc [get_propery LOC $cell]

   set x [get_property RPM_X $loc]

   set y [get_property RPM_Y $loc] 

 I believe RPM stands for "Relatively Placed Macro". The computed x and y seem to exhibit numerical values. So, my question is: are these the real coordinates of the slice location.

 

Again, thanks so much...

 

-Hussein; 

 

 

0 Kudos
Highlighted
Visitor
Visitor
3,802 Views
Registered: ‎06-13-2017

Prathik;

   Thanks much....

 

--Hussein;

0 Kudos
Highlighted
Guide
Guide
6,147 Views
Registered: ‎01-23-2009

From a quick look at the documentation and the tool (I have never used them), the RPM_X and RPM_Y are the RPM_GRID based coordinates of a site. These are still "logical" coordinates, but are a unified coordinate system between the different types of resources on the die - see UG903, Chapter 5, "Absolute RPM Grid-Based Coordinates" (v2017.1, p.160).

 

Like the SLICE_XxxYyy notation, this still isn't based on any physical measure, but it does have the advantage of placing all resources (SLICE, BRAM, DSP, etc...) on the same grid system. But again, the grid doesn't guarantee anything about "true distance on the die" - but it is probably the closest thing that you can get.

 

And to get the RPM_X and RPM_Y coordinates of a cell in your design you should use

 

set x [get_property RPM_X [get_sites -of_objects $cell]]

 

(assuming $cell is a cell object, gotten with a get_cells command, not simply a cell name)

 

Avrum

View solution in original post

Tags (1)
0 Kudos
Highlighted
Visitor
Visitor
3,779 Views
Registered: ‎06-13-2017

Avrum;

   Thanks for all your help....

 

--Hussein;

0 Kudos