- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
HI,
Im using a DCFIFO (dual clock fifo) to transfer clock domains. i genreated a DCFIFO, but i get timing violations from 1 clock to the other regards Fifo components. should i "set_flase_path" for all clock_A to clock_B paths (the clock are not related)?Link Copied
11 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I believe there are some recommended timing constraints to use with dcfifo's that might help, see:
page 20 of ug_fifo.pdf "Embedded constraint settings"- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
--- Quote Start --- I believe there are some recommended timing constraints to use with dcfifo's that might help, see: page 20 of ug_fifo.pdf "Embedded constraint settings" --- Quote End --- Hi, thank for the answer. i already look into that, and the document is unclear. first it has this: "When using the Quartus Prime TimeQuest timing analyzer with a design that contains a DCFIFO blockapply the following false paths to avoid timing failures in the synchronization registers" then after few line we have that: "The false path assignments are automatically added through the HDL-embedded Synopsis designconstraint (SDC) commands when you compile your design. The related message is shown under theTimeQuest timing analyzer report" it saying that it adding it using an "HDL-embedded" SDC ...:confused: any ways, i added those and i still have timing issues. the question remains: Do i add a "false path" between those clocks? :confused:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
the false path in the documents refer to something else:
• For paths crossing from the write into the read domain, apply a false path assignment between the delayed_wrptr_g and rs_dgwp registers: set_false_path -from [get_registers {*dcfifo*delayed_wrptr_g[*]}] -to [get_registers {*dcfifo*rs_dgwp*}] • For paths crossing from the read into the write domain, apply a false path assignment between the rdptr_g and ws_dgrp registers: set_false_path -from [get_registers {*dcfifo*rdptr_g[*]}] -to [get_registers {*dcfifo*ws_dgrp*}] im asking if i need to false path between clocks .....- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There are two ways forward,
If your clock domains are completely asynchronous then you could use a set_clock_groups command to completely cut timing between the domains. The downside is that it might cut paths that you didnt realise were being made in your design. Or you can manually false path the clock crossing paths. This is more time consuming but you could avoid other issues by catching all the paths crossing the domain. Also you can check the SDCs that are used in the design through timequest using report sdc- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
thanks for all your comments. so just to be sure, its ok to write on the SDC file : set_false_path -from [get_clocks {clka}] -to [get_clocks {clkb}] set_false_path -from [get_clocks {clkb}] -to [get_clocks {clka}] when i have a dcfifo crossing the clock domain?- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I'm also using dc_fifo for synchronizing data between different clock domains. So I set that clocks exclusive in timequest: set_clock_groups -asynchronous -group {clk_a} -group {clk_b} No timing violations occur. Jens- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
thanks,
it seems to work. Q: does the DCFIFO guarantees 100% error free data trasnfer from one domain to the other?- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yes, but you have to take care about the fill level. Do not write to a full Fifo and not read from an empty Fifo. I'm using wrusedw and rdusedw for checking that.
Jens- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I use underflow protection for the read...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
be aware if you use the usedw that they get updated with a latency of one clock-cycle...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
the output latency of usedw depends on parameter settings. It can be more than one rd- or wr-clock. Please refer SCFIFO and DCFIFO IP Cores User Guide.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page