10-02-2017 12:06 PM
Is there a way in Vivado do get a list of all nets crossing between two clock domains? I want to make sure that I have proper CDC protection on all the nets that need it. Also, is there a way to get a list of any SRL shift register inferences on these nets?
10-02-2017 01:55 PM
First, I want to be sure you are aware of the clock interaction report. This report allows you to see all the constraint relationships between the different clocks. You can get a report via the report_clock_interaction command, or you can see it graphically using the "Report Clock Interaction" link in an opened synthesized or implemented design, or from Tools -> Timing -> Report Clock Interaction. While the main goal of this command is to understand the constraint interaction between different clocks, it also ends up showing you which clocks have paths to other clocks, and, from there, you can see the paths by selecting and right-clicking on a box and selecting "Report Timing".
Next, be aware that Vivado has the ability to analyze clock domain crossing circuits using the report_cdc command or graphically from the Tools -> Timing -> Report CDC. This report will analyze the structure of your clock domain crossing circuits to ensure that they "look valid". This includes making sure that your metastability chains have not been replaced by SRLs...
Next, there is a mechanism to ensure that your metastability chains do not get replaced by SRLs - this is one of the many functions of the ASYNC_REG property. This property should be set on all the flip-flops in the metastability chain - see this post on what the ASYNC_REG property does. One thing that isn't mentioned specifically in that post (but is implied by the fact that the flip-flops are DONT_TOUCH) is that these flip-flops are now ineligible for being packed into an SRL.
Finally, with Vivado and Tcl there are ways of doing anything. It is certainly possible to write a script to find "any SRL whose input comes from a different clock domain". But I would use the stuff I described above first. If you still feel you need a direct Tcl way of doing this, we can explore this later.