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
dual port blockram fails to synthesize ECP5 #3205
Comments
If you end up with any cell type starting with
I'm not entirely up to date on the current state of memory inference (afaik a lot of work has been put into it lately), but true dual port memories have historically always been a pain point with yosys. |
The current BRAM mapper in Yosys does not support mapping to true dual-port BRAMs. This is part of the improvements that @mwkmwkmwk is working to bring with an improved pass at some point in the future. |
oh, I forgot about this issue, actually this should be already working on my #3189 branch, would you like to be a test subject? |
@mwkmwkmwk I have tried to use your branch but
See this gist for the output of yosys, nextpnr and ecppack one after the other. For reference I used these versions:
Essentially the most recent versions of everything at the time of writing except yosys using your branch. What I did is take some input from pins route that to a tdp bram ports and route the output to other pins. I have attached the verilog files and the lpf. Exact commands I used can be seen in the gist. |
That error doesn't seem at all related to the BRAM inference patch, I'll have a look. |
So I tried some more and it the error indeed has nothing to do with the blockrams. What I did was instantiate some input and output registers to read/write ram operations from/to. These primitives seem to be the problem. Anyway I have been playing with it some more more and I have some observations:
|
The pass still prints the final mapping rule picked, and using As for output registers, this pass supports a single register for synchronous ports just like the old one, only now with a few more features on it. Second output register (aka pipelining register) is still not supported (and is out of scope for |
Is that something a person not really familiar with the codebase could work on? I would like to start contributing but honestly it's hard for me to follow the path from requirement to where I need to be in the codebase. Especially since the entire flow is essentially split over multiple repos. |
Steps to reproduce the issue
I have a true dual port block ram module as generated by the clash-compiler:
Running yosys works without issues:
But when running nextpnr with the command:
It fails with the message:
I assume this means ECP5 doesn't support a true dual port blockram right now? Is there anything I can do to help make it supported :)?
The text was updated successfully, but these errors were encountered: