Skip to main content

Verilog System Functions & Tasks for Simulation

· loading · loading · ·
Hardware Design Verilog System Functions Verilog Tasks Simulation Testbench Randomization
Hardware Design
Axolot Logic
Author
Axolot Logic
Digital Design Engineer
Table of Contents
Verilog HDL Series - This article is part of a series.
Part 16: This Article

⚙️ Verilog System Functions & Tasks
#

Verilog provides many built-in system functions (prefixed with $) to help with simulation, data manipulation, and runtime control. These are not synthesizable and should only be used in testbenches or simulation-only environments.


🎲 Randomization Functions
#

FunctionDescriptionExample
$randomReturns a 32-bit signed pseudo-random intr = $random;
$urandomReturns 32-bit unsigned random numberr = $urandom;
$urandom_range(min, max)Bounded unsigned randomr = $urandom_range(0, 15);

Use for test stimulus generation in testbenches.


🛑 Simulation Control Tasks
#

TaskDescriptionExample
$stopPauses simulation and enters debugger (if supported)$stop;
$finishEnds simulation cleanly$finish;
$fatalEnds simulation with error (like assert)$fatal(1, "Error!");

➗ Math and Conversion Functions
#

FunctionDescriptionExample
$clog2(x)Returns ceiling of log base 2localparam W = $clog2(10);
$bits(x)Returns number of bits in variable$bits(my_reg)
$signed(x)Converts to signedout = $signed(data);
$unsigned(x)Converts to unsignedout = $unsigned(signed_data);

$clog2 is useful for parameterizing memory widths, counters, etc.


module tb_system_tasks;

    reg [7:0] r1, r2;
    reg [3:0] index;
    reg signed [15:0] s_val = -10;
    reg [15:0] u_val;

    initial begin
        // Randomization
        r1 = $urandom;
        r2 = $urandom_range(0, 15);
        $display("Random r1 = %0d, r2 (0-15) = %0d", r1, r2);

        // Math & conversion
        index = $clog2(10);  // = 4
        $display("clog2(10) = %0d", index);

        u_val = $unsigned(s_val);
        $display("s_val = %0d, u_val = %0d", s_val, u_val);

        // Simulation control
        #20 $finish;
    end

endmodule

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

Related

Verilog Delay Controls: #Delay, @Event, Wait
· loading · loading
Hardware Design Verilog Delay Event Control Wait Statement Simulation Testbench
Hardware Design
Verilog Command-Line Input: $plusargs for Testbench Control
· loading · loading
Hardware Design Verilog Command Line Plusargs Testbench Simulation Control Hardware Verification
Hardware Design
Verilog Hierarchical Reference: Accessing Internal Signals
· loading · loading
Hardware Design Verilog Hierarchical Reference Force Release Testbench Simulation Debugging Hardware Verification
Hardware Design
Verilog Simulation Basics & Testbench Design
· loading · loading
Hardware Design Verilog Simulation Testbench Timescale Simulation Regions Hardware Verification
Hardware Design
Verilog VCD: Waveform Dumping for Simulation Analysis
· loading · loading
Hardware Design Verilog VCD Waveform Viewing Simulation Analysis Testbench GTKWave
Hardware Design
Verilog initial Block: Testbench & Simulation Essentials
· loading · loading
Hardware Design Verilog Initial Verilog Testbench Simulation Hardware Verification Digital Design
Hardware Design