cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Visitor
Visitor
2,321 Views
Registered: ‎05-27-2016

Working w/ the new USER_SLR_ASSIGNMENT cell property

Jump to solution

In the 2018.1 release notes (UG973), I see the following options which seems like it might be a good starting place to address some SLR-related issues I am observing:

 

Prevent SLR-crossing violations using the USER_SLR_ASSIGNMENT cell property

which assigns hierarchical cells to SLRs and prevents them from being partitioned
across SLRs. This is a soft constraint which gives both the placer and physical
optimization greater flexibility to replicate and improve performance.

 

I do not see any details on how to actually use this directive. Does anyone have any examples of how this can be used. I would imagine I set the directive on a path like any other, but am not sure what other options might be available (I presume I need to set the target SLR for instance?)

 

Thanks,

Justin

0 Kudos
1 Solution

Accepted Solutions
Highlighted
Scholar
Scholar
2,544 Views
Registered: ‎06-20-2017

Take a look at UG912.  Looks like you can only use it in XDC.  E.g.,

set_property USER_SLR_ASSIGNMENT SLR1 [get_cells {cell1 cell2}]
Mike

View solution in original post

0 Kudos
6 Replies
Highlighted
Scholar
Scholar
2,545 Views
Registered: ‎06-20-2017

Take a look at UG912.  Looks like you can only use it in XDC.  E.g.,

set_property USER_SLR_ASSIGNMENT SLR1 [get_cells {cell1 cell2}]
Mike

View solution in original post

0 Kudos
Highlighted
Visitor
Visitor
2,228 Views
Registered: ‎05-27-2016

Thanks for the pointer, I will give this a shot and see what happens.

0 Kudos
Highlighted
Visitor
Visitor
2,218 Views
Registered: ‎05-27-2016

So I added something like this to my XDC file:

 

set_property USER_SLR_ASSIGNMENT SLR2 [get_cells -hierarchical -filter {NAME =~ *SomeModuleInstance.*}]
set_property USER_SLR_ASSIGNMENT SLR1 [get_cells -hierarchical -filter {NAME =~ *SomeOtherModuleInstance.*}]
set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hierarchical -filter {NAME =~ *YetAnotherModuleInstance.*}]

...Which is not precisely what I want, but should have been good enough to show that this works before I dug in and setup a more refined mapping . Vivado 2018.1 does not seem to balk at the properties existing but never seems to look at them or acknowledge their existence either.

 

The "placed.rpt" seems to indicate an approximate 50/50 LUT split between SLR0 and SLR1, which is same as it was before I added in the properties:

+-----------+-------+---------+------------+-------------+---------------+-----------+-------+------+------+
| SLR Index |  CLBs | (%)CLBs | Total LUTs | Memory LUTs | (%)Total LUTs | Registers | BRAMs | URAM | DSPs |
+-----------+-------+---------+------------+-------------+---------------+-----------+-------+------+------+
| SLR2      |     0 |    0.00 |          0 |           0 |          0.00 |         0 |     0 |    0 |    0 |
| SLR1      | 19339 |   39.26 |      90624 |        2807 |         23.00 |    112564 |    41 |   75 |   17 |
| SLR0      | 21198 |   43.03 |      82985 |       12462 |         21.06 |    128680 |   255 |  300 |    0 |
+-----------+-------+---------+------------+-------------+---------------+-----------+-------+------+------+
| Total     | 40537 |         |     173609 |       15269 |               |    241244 |   296 |  375 |   17 |
+-----------+-------+---------+------------+-------------+---------------+-----------+-------+------+------+

...I am trying to avoid setting up pblocks and such as I think the tool just needs a gentle nudge to determine which logic is and is not related to do the right thing. Has anyone else tried this new property and managed to get Vivado to pick it up?

0 Kudos
Highlighted
Visitor
Visitor
2,203 Views
Registered: ‎05-27-2016

I had a mistake in my filter above and Vivado was pointing that out in a non-obvious way.

 

INFO: [Common 17-55] 'set_property' expects at least one object. [proj/my.xdc:288]

...Once I tracked that down and corrected it I was able to coax to the tool into listening to my SLR mapping recommendations.

0 Kudos
Highlighted
Visitor
Visitor
1,338 Views
Registered: ‎09-26-2018

UG949 on page 270 documents two ways to utilize the USER_SLR_ASSIGNMENT property.  The OP is asking about the second one, for which there is still not example provided.  The property says you can explicitly assign a hierarchy to a specific SLR (either SLR0, SLR1, or SLR2 for current devices) and that appears to work.  However, it also says you can specify any arbitrary string value, and it will allow the placer the freedom to do the SLR assignment, and yet prevent the placer from allowing the hierarchy to span multiple SLRs.  I would like to see a working example of this syntax. I've tried the following, and it errors out in Vivado:

set_property USER_SLR_ASSIGNMENT SLR_NOSPAN [get_cells foo/*]
ERROR: [Vivado 12-6380] The given SLR name : SLR_NOSPAN is not a valid SLR name. The list of valid SLR names are : SLR0, SLR1, SLR2
set_property USER_SLR_ASSIGNMENT "SLR_NOSPAN" [get_cells foo/*]
ERROR: [Vivado 12-6380] The given SLR name : SLR_NOSPAN is not a valid SLR name. The list of valid SLR names are : SLR0, SLR1, SLR2
set_property USER_SLR_ASSIGNMENT "SLR" [get_cells foo/*]
ERROR: [Vivado 12-6380] The given SLR name : SLR is not a valid SLR name. The list of valid SLR names are : SLR0, SLR1, SLR2

Is this feature working?  What's the expected syntax?

From UG9498, version 2018.3, page 271:

Set this property to a string value, which is applied to hierarchical cells and ignored on leaf cells. The value you set for this property influences the logic partitioning as follows: • SLR name: When a hierarchical cell is assigned the name of an SLR (SLR0, SLR1, SLR2, etc.), the placer attempts to place the entire cell within the specified SLR. • String value: When a hierarchical cell is assigned an arbitrary string value, the placer chooses the SLR. This prevents cells from being partitioned into multiple SLRs. Note: If multiple cells have the same U

 

0 Kudos
Highlighted
Visitor
Visitor
1,333 Views
Registered: ‎09-26-2018
Update to my comment above. I found better documentation in UG912. Here is sample XDC syntax that Vivado accepts. Note that each individual group name attempts to assign to the same SLR - so you need different group names for each logical hierarchy if you want them to got to individual SLRs while disallowing the spanning of SLRs for each hierarchy. This is pretty simple to assign in a Tcl script (rather than XDC) with a foreach.
set_property USER_SLR_ASSIGNMENT group_1 [get_cells foo/*]
set_property USER_SLR_ASSIGNMENT group_2 [get_cells bar/*]