Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Special handling of first and last row of fabric #297

Open
mole99 opened this issue Jan 24, 2025 · 1 comment
Open

Special handling of first and last row of fabric #297

mole99 opened this issue Jan 24, 2025 · 1 comment
Labels
bug Something isn't working

Comments

@mole99
Copy link
Contributor

mole99 commented Jan 24, 2025

When ConfigBitMode is set to FRAME_BASED, FABulous will:

  1. Unconditionally generate FrameStrobe signals for all columns ✅
  2. Generate FrameData signals for all rows except for the first and last ❌

Point 2 may look like a feature at first, if none of the tiles in the first and last row use configuration bits (as is the case in the example fabric), then there is no need to generate FrameData signals, right?

  • What if you want to use different tiles in the first and last row, e.g. N_IO and S_IO?
  • There is no way to configure this behavior.
  • There is no way to disable this behavior.

Your first reaction might be to make this behavior optional, but the better approach is to remove this feature now and reimplement it correctly1 at a later time.

My PR in #161 fixes the FrameData generation for the first and last row by removing the hardcoded exception. Additionally, if the first tile in a row is NULL, than Tile_Y{y}_FrameData is correctly connected to the second tile.

This works fine if you are using e.g. only N_IO and S_IO tiles in the first and last row (as in my case). But if these tiles are termination tiles without any configuration bits (as in the example fabric) or any mix of them, then some tiles have no FrameData inputs and FrameData_O outputs, resulting in a broken fabric.

This means my PR depends on every tile, no matter if it has config bits or not, having FrameData/FrameData_o inputs/outputs, which is a sensible assumption. Remember: for FrameStrobe signals this is already the case, why should FrameData be any different? See #296 for tracking this dependent issue.

I would like to hear your feedback before I bring PR #161 up to date and integrate the fixes for #296 into it. Thanks!

Footnotes

  1. A correct reimplementation would be one that handles FrameData as well as FrameStrobe signals: If all tiles of a row or column don't use any configuration bits, only then FABulous should disable the FrameData/FrameStrobe signals for that row/column. The problem is that tiles will always need to be generated with FrameData/FrameStrobe signals (independent of whether they use any config bits at all), since there is no way of knowing in advance how the tiles will get stitched (and that's a good thing, because it keeps FABulous flexible). So it's probably best to forget about this “feature” altogether, as it really makes no real difference whether the first and last row have FrameData signals or not ;)

@mole99
Copy link
Contributor Author

mole99 commented Feb 5, 2025

Still needs #311

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant