-
Notifications
You must be signed in to change notification settings - Fork 229
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
axis_async_fifo write pointer CDC #18
Comments
The FIFO uses a handshake synchronizer in frame FIFO mode. So in this case metastability doesn't matter as the synchronization path is via the wr_ptr_update(_sync) regs, and the source wr_ptr_sync_gray_reg is not updated until the acknowledgement comes back from the destination clock domain. In frame FIFO mode, the grey coded sync doesn't work properly because it doesn't increment, it jumps by the whole frame size, which defeats the point of the gray code. |
But, I suppose it could make sense to un-alias the sync registers used by the different modes by changing the register names. That should at least make it easier to understand, and could also make setting up timing constraints more straightforward. |
OK, I guess for the Apropos constraints, we are currently adding some code to the quartus_pro constraints to automatically apply the What do you think about that idea? |
Yes, that would be excellent. I did some poking around and wasn't able to figure out how to do that, but if there is a way to automatically apply the constraints, that would definitely make things more streamlined. It would be great if it also worked for Quartus Prime as well as Quartus Prime Pro, but I suspect that may not be possible. It would also be great to find a way to make the constraints work without having to specify clock groups (so you timing failures for stuff paths that didn't get explicitly constrained), but I was running in to issues the last time I tried to do that. |
Hi sir, I was trying to implement the axis_fifo in cocotb on Gitpod platform. I am getting the following error
I tried solving this error, But couldn't solve this!! I installed the pytest package using pip install pytest as well. I hope I can get some help on this from you sir! Thanks and Regards! |
While going after the items reported by the CDC related DRCs of intel quartus 21.3, most of the items seem to be OK from an RTL perspective. But one item catched my eye, which is
verilog-axis/rtl/axis_async_fifo.v
Line 225 in ce8dcda
I don't get the reason why it is OK in
FRAME_FIFO
mode to read the first stage of the synchronisation chain of the write pointer.Another item is that in CDCs it is usually not a good idea to add logic in between the last flop of the source clock and the first flop of the destination clock, see
verilog-axis/rtl/axis_async_fifo.v
Lines 486 to 487 in ce8dcda
This special is actually worse, because depending on the condition the input of the synchronizer chain is either driven by the source clock or the destination clock.
The text was updated successfully, but these errors were encountered: