-
Notifications
You must be signed in to change notification settings - Fork 156
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
Generate Quartus specific code #242
Comments
FWIW using the vivado codegen with quartus has always worked for us. |
I would be surprised if that wasn't the case for the 0.7 branch. However, now that the master branch has explicit clock lines and clock enables, I wouldn't know if that was necessarily the case for i.e. the The reason being that, Xilinx blockRams have complete chip-enables, while Intel/Altera blockRams only have read and write enables; and the generated HDL in Vivado code-path corresponds to a chip-enable. So when you have a gated clock, and you use the Vivado code-path, I'm not 100% sure that Quartus will infer a blockRam with read and write enables. |
I think it'd be better to generalize the argument to clash and the template language. For example, make the argument a freeform string and pass it to a template and allow matching against it. I invoke[0]:
And I have a blackbox like:
This would allow users to more easily extend or provide libraries that target other HDL toolchains. In practice there are a wide combination of them so this might be more useful. For example, I believe Microsemi tools use Synopsys for the synthesis tool but have their own place-and-route. Yet, there is also the Lattice Semiconductor iCE40 FPGAs, where iCECub2 (EDA toolchain) can use Synopsys, or their own synthesis engine. And I've seen different results between them for techmapping and e.g. inference results. So you might have I think in practice we may only want to target a couple, but this is just a suggestion. [0] (The imaginary |
Looking, for example at:
clash-compiler/clash-lib/prims/verilog/CLaSH_Explicit_BlockRam.json
Lines 27 to 39 in c9d7812
we can see that the generated code for Vivado is actually the most reasonable, and it is the non-Vivado path, the one used for Quartus, that is slightly more convoluted. The reason for this is, that, historically, Clash has only done conditional code-gen for Xilinx/Vivado.
So what needs to be done is to add Quartus-specific codegen paths, so that all non-Quartus synthesis tools get to see the reasonable code for examples such as the one mentioned above.
The text was updated successfully, but these errors were encountered: