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 Vivados waiver system come 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.
Lets take a look at how we can use the waiver system in a design example, for this example I am going to use the Ultra96V2 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 bottom, 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 warning are CDC-15 which inidiactes a clock enable controlled CDC structure has been detected. The analysis of these warning also shows the CDC is safe, as such we can waive these warnings to enable us to focus on the critical warnings.
Creating a Waiver
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.
To save time if we want, 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.
Reporting Waived Messages
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 also report the waivers with the command report_waivers this will list all the violation and waivers in the current design and can helpfully be saved into a text file.
We can also use the command write_waivers to write out the waivers we have created to an XDC file for use in later implementations.
When correctly used the waiver system can offer significant benefits in the back end Vivado design, enabling the engineering team to focus upon the critical issues at hand.
Of course, to be effective the waivers should be reviewed by the design team.