top of page

14.1. Behavioral Blocks (initial & always)

Verilog provides two fundamental procedural blocks for behavioral modeling: the initial block and the always block. These blocks contain procedural statements that execute sequentially.

14.1.1. The initial Block

Syntax and Characteristics

The initial block executes only once at the beginning of simulation at time t = 0.

Verilog

Key Properties

  • Executes exactly ONCE at time t = 0

  • Typically, NOT synthesizable (some exceptions for memory initialization)

  • Primarily used in testbenches

  • Can contain timing controls (#delay, @event, wait)

  • Multiple initial blocks execute concurrently

Common Applications

Verilog

14.1.2. The always Block

Syntax and Characteristics

The always block executes repeatedly throughout the simulation. It forms the core of RTL design and is synthesizable when written correctly.

Verilog

Sensitivity List

The sensitivity list determines when the always block executes. It can contain:

  • Edge-sensitive events: posedge clk, negedge reset

  • Level-sensitive signals: @(a or b or c) or @(*)

  • Mixed: @(posedge clk or negedge reset)

Screenshot (739).png

Types of always Blocks

A. Combinational Logic Always Block

Verilog

Key Points:

  • Use blocking assignments (=)

  • All inputs must be in sensitivity list or use @(*)

  • All outputs must be assigned in all execution paths

  • Synthesizes to combinational gates

B. Sequential Logic Always Block

Verilog

Key Points:

  • Use non-blocking assignments (<=)

  • Sensitivity list contains only clock and reset edges

  • Synthesizes to flip-flops/registers

  • Asynchronous reset: negedge rst_n in sensitivity list

  • Synchronous reset: no reset in sensitivity list

C. Latched Logic (Unintended - Usually a Bug)

Verilog

2.3 Comparison: initial vs always

Screenshot (741).png

Behavioral Modeling

Sequential & parallel Block
 

  • Instagram
  • Facebook
  • Twitter
  • LinkedIn
  • YouTube

Connect with us

bottom of page