One of the most challenges and exciting aspects of programmable logic design can be achieving timing closure and ensuring data transfer is safely transferred across all clock domains. Typically, at this point of the design there could be a significant number of warnings generated by Vivado relating to the timing, design rule check, and methodology checks.
When we open the implementation view to observe these methodology, DRC and CDC issues there will of course be numerous messages raised of several different severities from informational to advisories, warnings, and critical warnings.
Working through these messages to determine the key issues at hand can be a challenge — this is where Vivado's waiver system comes into play. Using waivers, we can review a warning and then waive it, reducing the noise so to speak and allowing us to focus on the critical warnings.
Of course, before we waive a warning it is important that we review it and understand the issue and why it can be waived.
Let's take a look at how we can use the waiver system in a design example. For this example, I am going to use the Ultra96-V2 MIPI camera design as it is significant and provides several different message types we can examine, if we remove the constraints.
When we first open the implementation of the design, we have the following messages:
- DRC = 24 warnings
- Methodology = 4 critical, 14 warnings and 4 advisories
- CDC = 17 critical warnings, 124 warnings and 71 Info
We can see the different messages in the reports tab at the bottoms. Here, we can see the DRC and methodology rules. To run the CDC report, we need to use the Reports->Timing-> Report CDC.
Now, we can start reviewing the messages and raising waivers as necessary to allow us to focus on the critical warnings.
Raising a waiver is simple we can right click on the selected warning and from the pop-up menu select create waiver.
Examining the CDC report in the timing window of the example we are using shows 124 warnings. These warnings are CDC-15, which indicates a clock enable controlled CDC structure has been detected. The analysis of these warnings also shows the CDC is safe, as such we can waive these warnings to enable us to focus on the critical warnings.
Once we have implemented the waiver, we are able to keep working on the design focusing upon un-waived messages. We should also see the number of messages in the un-waived reports to be reduced in line with the number of messages waived.
If we want to save time, we can group together several messages to waive a group of messages.
When we run future reports on the DRC, timing and methodology, we have the option of applying waivers, reporting only the waived paths, or ignoring all waivers.
This provides the ability to review and manage waivers if necessary.
Along with using the GUI to manage our waivers, we can also use TCL commands to script the waiver creation and deletion.
Using TCL, we can report the waivers with the command report_waivers as well — this will list all the violation and waivers in the current design and can helpfully be saved into a text file.
We can even use the command write_waivers to write out the waivers that we have created to an XDC file for use in later implementations.
When correctly used, the waiver system can offer significant benefits in the backend Vivado design, enabling the engineering team to focus upon the critical issues at hand.
Obviously, to be effective, the waivers should be reviewed by the design team!