SDVD/verification/segment_display/seconds_display_tb.sv
Waylon Cude 3b30a32045
All checks were successful
ci/woodpecker/push/test-workflow Pipeline was successful
Moved 7 segment display logic to subdirectory
Also fixed up the one type I found in the seconds display
2025-05-19 15:48:05 -07:00

55 lines
1.5 KiB
Systemverilog

`timescale 1ns / 1ps
module seconds_display_tb;
int errors = 0;
logic [5:0] seconds;
wire [6:0] display_tens;
wire [6:0] display_ones;
logic [6:0] expected_tens;
logic [6:0] expected_ones;
seconds_display Dut(.*);
initial begin
$display("Testing seconds_display");
for (seconds=0; seconds<60; seconds++) begin
expected_ones = encode_number(seconds % 10);
expected_tens = encode_number(seconds /10);
#1
if (display_ones !== expected_ones) begin
errors++;
$error("Failed ones test case, seconds = %d, displayed = %b, expected = %b",
seconds,
display_ones,
expected_ones);
end
else
if (display_tens !== expected_tens) begin
errors++;
$error("Failed tens test case, seconds = %d, displayed = %b, expected = %b",
seconds,
display_tens,
expected_tens);
end
end
if (errors == 0)
$display("All tests passing");
end
endmodule
function automatic logic [6:0] encode_number(logic [5:0] num);
case (num)
0: return 7'b1111110;
1: return 7'b0000110;
2: return 7'b1101101;
3: return 7'b1111001;
4: return 7'b0110011;
5: return 7'b1011011;
6: return 7'b1011111;
7: return 7'b1110000;
8: return 7'b1111111;
9: return 7'b1111011;
endcase
endfunction