We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

Showing results for 
Search instead for 
Did you mean: 
Observer kaveirious
Registered: ‎08-25-2007

Difference between warning and critical warning

What is the difference between a warning and a critical warning?


Is a warning something that *might* affect some definition of a result (performance QoR, expected bit-level behavior, etc) and a critical warning something that *will/shall* affect and alter the intended or expected outcome?


Why is not a critical warning always an error? Are there any critical warnings that do not terminate the synthesis, co-simulation, or c-simulation process?


Thank you in advance.

Nikolaos Kavvadias

0 Kudos
3 Replies
Scholar u4223374
Registered: ‎04-26-2015

Re: Difference between warning and critical warning

I'm not sure that I've ever seen a critical warning from HLS - although I may well have just failed to remember them (or remembered them as errors). Can you give an example?


Generally warnings are one of the following:


  • "I can't do what you're asking for" - like unrolling a loop with a variable tripcount. The results should still be correct, but you need to check over what you're asking the tool to do. Similarly, if HLS can't meet pipelining requirements or timing estimates then it'll warn you.
  • "I've done something clever" - when you use an integer as your loop index and HLS (correctly) recognizes that the loop actually terminates in fewer than 2^31-1 iterations. I don't know why this is a warning, it should just be an info.
  • "I think you've made a mistake" - a common example is when HLS thinks you're accessing an array out of the array bounds. Often the program will still work in C simulation, but it'll die in hardware.
  • "You're doing something inefficient" - often, in my experience, a false alarm. Either you're doing something inefficient-but-small (accessing variable-indexed bits from a 4-bit value is not going to take a lot of hardware) or you're doing something inefficient-and-large (eg. fully-partitioning a 128-element array) because that's what you need for performance.
Observer kaveirious
Registered: ‎08-25-2007

Re: Difference between warning and critical warning

Thank you u4223374 for your answer.


I have encountered 3 cases of critical warnings so far in the "SYNCHK" stage, for example this one:


CRITICAL WARNING: [SYNCHK 200-42] path/file.cpp:line: pointer comparison is not supported.

A critical warning is anticipated in a number of use cases of the Tcl-based flow for the tools, only that they are not listed anywhere. In the logs, it is actually suggested to the user to:


Please review all ERROR, CRITICAL WARNING, and WARNING messages during placement to understand the cause for failure.

It is not clear why a CRITICAL WARNING causing a failure should not just be an ERROR.


0 Kudos
Xilinx Employee
Xilinx Employee
Registered: ‎08-01-2008

Re: Difference between warning and critical warning

  • ERROR - An ERROR condition implies an issue has been encountered which will render design results unusable and cannot be resolved without user intervention.
  • CRITICAL WARNING - A CRITICAL WARNING message indicates that certain input/constraints will either not be applied or are outside the best practices for a FPGA family. User action is strongly recommended.

      Note: Since this is a two word value, it must be enclosed in {} or "".

  • WARNING - A WARNING message indicates that design results may be sub-optimal because constraints or specifications may not be applied as intended. User action may be taken or may be reserved.
  • INFO - An INFO message is the same as a STATUS message, but includes a severity and message ID tag. An INFO message includes a message ID to allow further investigation through answer records if needed.
  • STATUS - A STATUS message communicates general status of the process and feedback to the user regarding design processing. A STATUS message does not include a message ID.


Every message delivered by the tool has a unique global message ID that consists of an application sub-system code and a message identifier. This results in a message ID that looks like the following:

"Common 17-54"
"Netlist 29-28"
"Synth 8-3295"

Use this command to customize the message severity returned by the tool to specific levels appropriate to your usage.

Note: You can restore the message severity of a specific message ID to its original setting with the reset_msg_severity command.


The following example reduces or downgrades the significance of message ID "Common 17-54" from a CRITICAL WARNING to a WARNING so that it causes less concern when encountered:

set_msg_severity "Common 17-54" WARNING

The following example elevates or upgrades a common INFO message to a Critical Warning:

set_msg_severity "Common 17-81" "CRITICAL WARNING"

The severity of a DRC check can be set using the set_property command.

Example: Run the below command in Tcl console of Vivado to set the severity of "NSTD-1" to Warning

set_property SEVERITY {Warning} [get_drc_checks NSTD-1] 
Thanks and Regards
Please mark the post as an answer "Accept as solution" in case it helped resolve your query.
Give kudos in case a post in case it guided to the solution.