[Interchange] Exports DeviceResources Routing (Wires and Nodes) Info in Multiple Messages #1017
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Since RapidWright has exported Interchange data as a single message, there has been a limitation on exporting the routing information (specifically
Node
andWire
objects) because of the high number of these objects exceeded the message size limitations of Cap'n Proto.This PR attempts to resolve this issue by exporting the entire device first (without routing data) as a single message and then exporting multiple messages following. After the initial device message, there is one message for each row of tiles in the device (
Device.getRows()
in RapidWright orget_property ROWS [get_parts [get_property PART [current_project]]]
in Vivado). All of theWire
andNode
objects that exist or are based in that row of tiles are included in the message.For example, if you were exporting the
xcvp1902
device (currently the largest device), there would be 1457 Cap'n Proto messages total in the file (1 device, 1456 routing). In this scheme, theDeviceResources.Device
object is the top level for both types of messages. In the device message, the fieldswires
andnodes
are set tonull
to signify that messages will come later to populate those fields. In the routing messages, only thewires
andnodes
fields are populated with the wires and nodes that exist in that row of tiles. If the device resources file is to be generated without routing resources, only one device message is written to the file and thewires
andnodes
entries will have a size of 0.A verification step was added to verify these new messages could be read and that the wires and nodes match the RapidWright device model. For large devices (like the xcvp1902, the verification process can take up to an hour or more depending on the host). Also, it will require more Java heap memory and
-Xmx32736m
(32GB) is a recommended option to the JVM.Given the time and memory requirements of the verification step, this has now been made optional and must be turned on through the command line option
--verify
.This PR also includes PR #1014.