-
Notifications
You must be signed in to change notification settings - Fork 16
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
Memories doesn't synthetise to BRAM in Quartus toolchain #749
Comments
The Quartus synthesis logic options might be of some help here. In particular, Add Pass-Through Logic to Inferred RAMs logic option might help with transparent RAMs (like the Coreblocks example), and Allow Any RAM Size For Recognition logic option should allow small block RAM synthesis (though I doubt this will help). The asynchronous read warnings you get are weird - both of the examples you posted use synchronous reads. |
I believe this might go away in future Amaranth versions, I found some related comments while working on updating Amaranth (like this one). |
Could you test with the branch from PR #754? |
Giving this a very quick look, this pattern implements soft transparency logic and it's possible that Quartus dislikes it. Does it recognize properly if you disable transparency? |
On amaranth 0.5.3 all memories are correctly inferred: 👍 Current logs for previously unrecognized transparent ones: All nodes that synthetise to BRAMs in the core are: Other Some of identical LiteX SoC memories still generate incorrect
comment in rtl source:
So both issues are (probably) resolved. I will further verify LiteX ones later |
Nice! |
Warnings for mentioned LiteX turned out to be false-positive, as expected. |
Some memories fail to be synthesised to FPGA BRAM, [while running quartus toolchain targeted to DE2-115 (EP4CE115) with LiteX]
Instruction caches sythetises to 74k LUTs taking most of the device :(
There are two kinds errors in icache and some other blocks (including in the LiteX generated outside SoC!):
276007 : RAM logic is uninferred due to asynchronous read logic
276004: is uninferred due to inappropriate RAM size File
(I'm ignoring this one for now)Logs:
Not recognized LiteX memory example:
What's interesting - some of similiar LiteX rams are recognized correctly; and some are async on purpose and generate the same warning.
Not recognized Coreblocks (Amaranth) memory example:
This is probably an quartus issue, because it happens independently in different Amarnth and LiteX generated rams that look fine. Some workaround is needed.
The text was updated successfully, but these errors were encountered: