A linear random testbench is a type of testbench that uses random input stimuli to test a digital design. It is called "linear" because the input stimuli are generated in a sequential, linear fashion, as opposed to a more complex state machine-based approach. Here's an example of a simple linear random testbench:
module tb(); // Declare inputs and outputs logic clk; logic rst; logic [7:0] data_in; logic [7:0] data_out; // Clock generator always #(5ns) clk = ~clk; // Instantiate DUT dut u_dut(clk, rst, data_in, data_out); // Random input generator initial begin // Reset DUT rst = 1; @(posedge clk); rst = 0; // Loop over a set number of test iterations for (int i = 0; i < 100; i++) begin // Generate random input data data_in = $random; // Wait a few clock cycles repeat (10) @(posedge clk); // Check that DUT output matches input data if (data_out !== data_in) begin $error("DUT output does not match input data"); end end end endmodule
In this example, the testbench uses a random input generator to generate 100 sets of input stimuli. Each set of input stimuli consists of a random 8-bit value generated using the built-in
$random function. After each set of input stimuli is generated, the testbench waits for a few clock cycles before checking that the DUT output matches the input data. If the output does not match the input, an error is generated.
Linear random testbenches can be effective in catching a wide range of design bugs, as they generate random input stimuli that can test the design in ways that the designer may not have anticipated. However, they can also be less effective in testing specific scenarios or edge cases, as the input stimuli are generated randomly and may not cover all possible scenarios.