-
Notifications
You must be signed in to change notification settings - Fork 52
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
mult_pipe
not inferred correctly pipelined for DSP inference
#1175
Comments
Interesting! Yeah, certainly worth seeing if tacking on that additional register just solves it. We could also consider an explicit (Xilinx-specific) instantiation, as the warning messages suggests. |
Might be interested to @andrewb1999 too |
Yeah I'm planning on looking at this eventually, should be a straight forward fix. |
Weirdly, even a Filament generated design seems to have this problem? Would be useful to figure out what behavioral RTL would generate the correct code or if we need to use something like Vivado's IP generator in the backend to make it work |
Out of curiosity, I checked what Vitis HLS does. Here is an example multiplier generated by HLS that infers a DSP:
Surprisingly enough it took setting a pretty high frequency to get the tool to actually generate that. With a 100MHz target the tool only generates a single cycle multiplier (that still maps to a DSP), or even a combinational multiplier on a large ultrascale+ device with a low frequency target. The multiplier here hits nearly 500MHz on an ultrascale+ device. |
Wow, that’s crazy. This would indicate we should switch our mult implementation to be 4 cycles. Also, @andrewb1999 and I discussed the possibility to using the mult latency insensitive interface as a “virtual operation” and backing it up with different physical implementations depending on target device (in the style of #1151). |
1 similar comment
This comment was marked as duplicate.
This comment was marked as duplicate.
Nice! Indeed, some manner of abstraction over different implementations here would be super duper cool. But as @rachitnigam has said in the past, this is much easier to imagine if we stay in the realm of sequential components and don't try to abstract over the combinational/sequential divide. |
When running resource estimation, the
main_drc_routed.rpt
file provides the following warning:My guess is that registering the final output causes the implementation to be quite the same pipeline as a DSP48 resulting in the warning. A possible solution is adding another register in the pipeline so that the first three registers in the
mult_pipe
implementation are fully pipelined while the last one is responsible for sustaining the output after thedone
signal is set to high.The text was updated successfully, but these errors were encountered: