Untitled
unknown
plain_text
a year ago
2.3 kB
8
Indexable
`timescale 1ns / 1ps
module LabL4;
// Declare inputs and output with 32-bit width
reg [31:0] a0, a1, a2, a3;
reg [1:0] c;
wire [31:0] z;
// Instantiate the 4-to-1 multiplexer
yMux4to1 #(32) mux4to1(z, a0, a1, a2, a3, c);
// Testbench variables
reg [31:0] expected_z;
integer pass_count, fail_count;
// Test the multiplexer
initial begin
// Initialize counters
pass_count = 0;
fail_count = 0;
// Display header
$display("c a0 a1 a2 a3 | Expected z Actual z Result");
$display("----------------------------------------------------------------------------------------|------------------ ---------- ------");
// Apply different combinations of random inputs and check results
repeat (10) begin // Repeat 10 times
// Generate random 32-bit values for inputs and select lines
a0 = $random;
a1 = $random;
a2 = $random;
a3 = $random;
c = $random % 4; // Ensure c is in the range 0 to 3
// Calculate expected output
case (c)
2'b00: expected_z = a0;
2'b01: expected_z = a1;
2'b10: expected_z = a2;
2'b11: expected_z = a3;
default: expected_z = 32'hx; // Undefined case
endcase
#10; // Wait for 10 time units
// Check if the output is as expected
if (z === expected_z) begin
pass_count = pass_count + 1;
$display("%b %h %h %h %h | %h %h PASS", c, a0, a1, a2, a3, expected_z, z);
end else begin
fail_count = fail_count + 1;
$display("%b %h %h %h %h | %h %h FAIL", c, a0, a1, a2, a3, expected_z, z);
end
end
// Display summary
$display("----------------------------------------------------------------------------------------|------------------ ---------- ------");
$display("Total Tests: %d", pass_count + fail_count);
$display("Passed: %d", pass_count);
$display("Failed: %d", fail_count);
// Finish simulation
$finish;
end
endmodule
Editor is loading...
Leave a Comment