Skip to main content

Verilog Synthesis: From RTL to Gate-Level Netlist

· loading · loading · ·
Hardware Design Verilog Synthesis RTL Design Gate Level Netlist FPGA Design ASIC Design
Hardware Design
Axolot Logic
Author
Axolot Logic
Digital Design Engineer
Table of Contents
Verilog HDL Series - This article is part of a series.
Part 18: This Article

🏗️ What is Synthesis?
#

Synthesis is the process of transforming RTL Verilog code into a gate-level netlist that can be mapped onto physical hardware (FPGA or ASIC).

🔧 What happens during synthesis:
#

  • Converts always/assign logic into gates and flip-flops.
  • Resolves parameters and logic expressions.
  • Applies optimization for area, speed, and power.

⚠️ Constructs to Avoid in Synthesizable Code
#

ConstructWhy It’s ProblematicUse Instead
initial blockNot supported in synthesisUse reset logic
#delaySimulation-only delayUse clocked always
$display, $monitorNot synthesizableUse in testbenches only
for, while (variable bound)May not convergeUse generate with fixed range
Dynamic memoryUnsupported in hardwareUse fixed-size arrays

🎨 How RTL Coding Style Affects Synthesis
#

✅ Good Practices:
#

  • Use always @(posedge clk) + <= (non-blocking) for sequential logic.
  • Use always @(*) + = (blocking) for combinational logic.
  • Fully assign outputs to avoid unintended latches.
  • Keep sensitivity lists complete or use (*).

❌ Bad Practices:
#

  • Mixing = and <= in the same block.
  • Partial assignments → inferred latches.
  • Using simulation-only constructs in synthesizable code.

❗ Example: Unintended Latch Inference
#

always @(*) begin
  if (en)
    y = a;  // Latch inferred if en is false
end

✅ Corrected version:

always @(*) begin
  if (en)
    y = a;
  else
    y = 0;
end

🔁 Summary Table
#

TopicBehavioral SimGate-Level SimSynthesis
Simulation speedFastSlowN/A
RTL constructsAllowedFlattenedSynthesizable
Timing modelingApproximateAccurateDeterministic
UsageFunctional testFinal verificationNetlist generation
Delay supportYes (#)Yes (SDF)No

Verilog HDL Series - This article is part of a series.
Part 18: This Article

Related

Verilog Assignments: Procedural vs. Continuous Explained
· loading · loading
Hardware Design Verilog Assignments Continuous Assignment Procedural Assignment RTL Design Hardware Description Language
Hardware Design
Verilog Control Flow: if, case, loops & RTL Guidelines
· loading · loading
Hardware Design Verilog Control Flow Verilog If-Else Verilog Case Verilog Loops RTL Design
Hardware Design
Hardware Design Abstraction Levels in Verilog
·238 words·2 mins· loading · loading
Hardware Design Hardware Abstraction RTL Design Gate Level Transistor Level Digital Design
Hardware Design
Verilog Blocking vs. Non-Blocking Assignments
· loading · loading
Hardware Design Verilog Assignments Blocking Assignment NonBlocking Assignment RTL Design Sequential Logic
Hardware Design
Verilog Namespaces: Understanding Scope and Modularity
· loading · loading
Hardware Design Verilog Namespace Verilog Scope Modularity RTL Design Hardware Description Language
Hardware Design
Verilog Parameters: Making Modules Reusable & Configurable
· loading · loading
Hardware Design Verilog Parameters Reusable Design Configurable Modules RTL Design Hardware Description Language
Hardware Design