Lint analyzes suspicious source patterns, while synthesis warnings describe issues encountered when interpreting or implementing RTL. Width mismatches, undriven nets, unused signals, multiple drivers and inferred latches are valuable clues. Classify each warning and justify any waiver rather than treating a successful exit code as a clean design review.

Worked example

default_nettype none and explicit widths make this small adder's interface easy to inspect. The example deliberately preserves its carry. Compare tool warnings before and after introducing a misspelled signal or a narrow output in a separate experiment.

Verilog
`default_nettype none
module checked_add(input [3:0] a,b,output [4:0] sum);
  assign sum={1'b0,a}+{1'b0,b};
endmodule
`default_nettype wire

What to watch for

Suppressing all warnings removes information about potential functional differences. Waivers should identify the exact warning, design intent and reason it is acceptable.

Try it yourself

Should an inferred-latch warning always be ignored because the source uses reg?

Answer: No. reg is a procedural type, not permission to infer unintended storage. Review assignment coverage and the intended circuit.

How to study this topic

Save the example in a .v file and identify its top module before compiling. Separate stimulus and observation from synthesizable RTL. Change one input, width or boundary condition at a time, predict the result, and compare that prediction with simulation. A syntax check does not establish synthesis support or timing closure.

Continue learning

Previous: Resource inference and coding pitfalls

Next: Timing constraints and gate-level simulation

Browse the complete Verilog index

Explore related programmes

These recorded programmes are upcoming. This article is general educational content, not a syllabus or course sample.

Verilog