SystemVerilog Blocking Assignments

Blocking Assignments in SystemVerilog

·       SystemVerilog employs blocking assignments for sequential execution of statements.

·       These assignments execute in the order they appear in the code.

·       When encountering a blocking assignment, subsequent statements wait until it completes.

 

·       They are essential for modeling synchronous digital logic behaviors, like register transfers and sequential operations.

blocking assignments in systemverilog

Example 1: Simple Blocking Assignment

 Demonstration within a SystemVerilog module:

  • Declares 4-bit input and output variables.
  • Illustrates the immediate value transfer using a blocking assignment.
module BlockingAssignment1;
      // Declare a 4-bit input and output
      logic [3:0] input_data;
      logic [3:0] output_data;

      initial begin
          // Blocking assignment
          input_data = 4'b1010;
          output_data = input_data; // output_data gets input_data's value immediately
          $display("Output data = %b", output_data); // Displays the output_data value
      end
  endmodule

Outcome:

 

Shows how `output_data` immediately receives the value of `input_data`.

Output data = 1010
           V C S   S i m u l a t i o n   R e p o r t

Example 2: Blocking Assignments in a Loop

 Demonstrates the usage of blocking assignments within a loop:

·       Declares 4-bit input and output variables.

 

·       Utilizes a ‘for’ loop for sequential assignments and displays the values.

  module BlockingAssignmentLoop;
      // Declare a 4-bit input and output
      logic [3:0] input_data;
      logic [3:0] output_data;

      initial begin
          // Loop with blocking assignments
          for (int i = 0; i < 4; i++) begin
              input_data = i; // Assigns 'i' value to input_data
              output_data = input_data; // Assigns input_data to output_data
              $display("Output data = %b", output_data); // Displays the output_data value
          end
      end
  endmodule

Outcome:

 

Displays the sequential values of `output_data` within each loop iteration, showcasing the effect of blocking assignments.

Output data = 0000
Output data = 0001
Output data = 0010
Output data = 0011
           V C S   S i m u l a t i o n   R e p o r t

Blocking assignments play a crucial role in defining the sequential behavior of digital circuits, ensuring step-by-step execution for accurate modeling of hardware designs.

Applications of Blocking Assignments:

  • Useful for modeling synchronous digital logic behaviors like register transfers and sequential operations.
  • Commonly used in designs where sequential execution and order of operations are critical.

Benefits of Blocking Assignments in SystemVerilog:

  • Facilitate clear and predictable code flow by enforcing a sequential execution model.
  • Ideal for implementing procedural behavior, especially in digital hardware design.
Scroll to Top