`include "seven_seg.sv" module seven_seg_tb(); logic [3:0] in_num; logic [0:0] in_rbi_inv; logic [7:0] out_segments; logic [7:0] true_segments[17]; seven_seg dut(in_num, in_rbi_inv, out_segments); integer N; integer i; integer error_count; initial begin // Initialise truth table true_segments[0 ] = ~(8'b10111111); true_segments[1 ] = ~(8'b10000110); true_segments[2 ] = ~(8'b11011011); true_segments[3 ] = ~(8'b11001111); true_segments[4 ] = ~(8'b11100110); true_segments[5 ] = ~(8'b11101101); true_segments[6 ] = ~(8'b11111101); true_segments[7 ] = ~(8'b10000111); true_segments[8 ] = ~(8'b11111111); true_segments[9 ] = ~(8'b11100111); true_segments[10] = ~(8'b11110111); true_segments[11] = ~(8'b11111100); true_segments[12] = ~(8'b10111001); true_segments[13] = ~(8'b11011110); true_segments[14] = ~(8'b11111001); true_segments[15] = ~(8'b11110001); true_segments[16] = ~(8'b00000000); // Special case for RBI $display("Beginning seven-segment tests"); in_num = 4'd0; in_rbi_inv = 1'b0; error_count = 0; #1; if (out_segments !== true_segments[16]) begin $display("\t\x1b[38;5;9mNumber 0b%b failed to decode to 0b%b, producing 0b%b\x1b[m", in_num, true_segments[16], out_segments); error_count = error_count + 1; end for (N=1; N < 15; ++N) begin in_num = in_num + 1; #1; if (out_segments !== true_segments[N]) begin $display("\t\x1b[38;5;9mNumber 0b%b failed to decode to 0b%b, producing 0b%b\x1b[m", in_num, true_segments[N], out_segments); error_count = error_count + 1; end end in_num = 4'd0; in_rbi_inv = 1'b1; for (N=0; N < 15; ++N) begin #1; if (out_segments !== true_segments[N]) begin $display("\t\x1b[38;5;9mNumber 0b%b failed to decode to 0b%b, producing 0b%b\x1b[m", in_num, true_segments[N], out_segments); error_count = error_count + 1; end in_num = in_num + 1; end if (error_count == 0) $display("\x1b[38;5;10mAll seven-segment tests passing\x1b[m"); else $display("\x1b[38;5;9m%0d seven-segment test(s) failing\x1b[m", error_count); end endmodule