byuccl / rs-cad

CAD Tools (Packer, Placer, & Router) for RapidSmith2.
3 stars 1 forks source link

Set intrasite routing data structures #25

Open DallonTG opened 5 years ago

DallonTG commented 5 years ago

I am working on merging intrasite routing functionality into the master branch of RS2. It can be necessary to manually set the intrasite routing in some cases.

For instance, I've come across a few cases where the intrasite routing set by the packer does not match what Vivado decides the intrasite routing should be. If you perform inter-site routing in RS2 after RSVPack and RSVPlace, then the router will route to the site pins as determined by the packer/placer. A problem can occur when Vivado's automatic intrasite routing changes a sink site pin that a net should route to. This will, in turn, cause a corresponding route string to be invalid since it will route to an incorrect site pin.

In order to set manually set the intrasite routing in Vivado, we need to know how all the site pips in the sites are configured (including polarity selectors).

The CellDesign class already has a couple of data structures for this (pipInValues and usedSitePipsMap). After placement, we need to update these data structures with the site PIPs. I have some code that does this, but it does so by searching through all the sink route trees after everything is said and done. I think this is repeating work since the intrasite routing is already determined earlier by the packer; we just need to save the information.

Additionally, the code I have for intrasite routing only uses pipInValues, but we should probably update both pipInValues and usedSitePipsMap.