Fix FrameData wiring for NULL tiles at the border #161
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.
The current demo fabric looks somewhat like this:
FrameData and FrameStrobe are wired from tile to tile. The horizontal arrows show how FrameData is wired and the vertical arrows show how FrameStrobe is wired. NULL tiles are omitted, therefore FrameData and FrameStrobe are not passed on.
This is a problem because, for example, the lower left NULL tile does not pass on its FrameStrobe to the W_IOs above and it does not pass its FrameStrobe to the termination tiles to its right.
What has been done on current master to prevent this problem? For FrameStrobe: if the previous tile is NULL, skip it and connect directly to the next tile. For the termination tiles nothing has been done since they have no configuration bits.
But if you want to create a fabric where the termination tiles contain a switch matrix or you want IO tiles in the first and last row this approach no longer works.
Therefore, this PR makes two changes:
Tile_Y{y}_FrameData
directly to it.This allows for tiles that need config bits in the first and last row, e.g. N_IO and S_IO.
There is another problem with the current workaround: It was only intended as a solution for for NULL tiles around the border of the fabric. If there is a NULL tile anywhere else, the next tile will get connected to the FrameStrobe of the column and not to the previous non-NULL tile.
In this case the second W_IO tile won't be connected to the FrameStrobe of the W_IO two tiles before it, but both W_IO tiles will get connected to the FrameStrobe of the column. This is logically correct, but the FrameStrobe of the column will have a higher fanout which is not wanted.
For this reason, I have changed the current solution to only apply for tiles in the second column (FrameData) and tiles in the second last row (FrameStrobe).
A proper solution would allow for a variable amount of NULL tiles between tiles and still connect the FrameStrobe to the previous non-NULL tile.