byuccl / RapidSmith2

RapidSmith2 - the Vivado successor to RapidSmith. Released Jan 4, 2017.
Other
41 stars 13 forks source link

"Duplicate" LOCK_PINS properties in TCP export #344

Closed DallonTG closed 5 years ago

DallonTG commented 6 years ago

If you place two LUTs onto the same fracturable LUT (so a single dual output LUT is being used in a slice), then the two LUTs are sharing the same logical and physical input pins.

Because of this, it is possible to end up with a placement.xdc that contains something like the following:

set_property LOCK_PINS { I0:A1 I1:A2 I2:A3 } [get_cells {s_OBUF_inst_i_1}] 
set_property LOCK_PINS { I0:A1 I1:A2 I2:A3 } [get_cells {cout_OBUF_inst_i_1}]

Here, these are two LUT cells that have been placed on the same fracturable LUT (one on the 5LUT and one on the 6LUT). The command to set the "LOCK_PINS" property is the same besides the "get_cells" portion of it. The first one will succeed, the second will fail with a warning like this:

CRITICAL WARNING: [Vivado 12-2497] Could not set property 'LOCK_PINS' because 'fail to lock pin of instance 'cout_OBUF_inst_i_1' placed at site SLICE_X88Y141: SLICE_X88Y141: Conflicting nets for physical connection C2 driven by SLICE_X88Y141.C2.C2: 1: b_IBUF, 2: a_IBUF'.

I believe this warning only occurs because the LUTs share the same input pins and so the constraint doesn't need (and can't be) set twice. To fix this, I think it makes sense to just edit the TCP export to identify these cases and only include one property in the placement.xdc.

DallonTG commented 5 years ago

I think I was mistaken when I made this issue. Will re-open if it turns out I was right before.