1 Commits

Author SHA1 Message Date
uelen da7d026d06 Add testbench for the seconds display
NOTE: This doesn't actually compile yet, but it should once changes to
the seconds display are pushed
2025-05-17 12:40:20 -07:00
3 changed files with 57 additions and 85 deletions
-60
View File
@@ -1,60 +0,0 @@
/**
* display_converter.sv - decodes a 5 bit digit input into its seven segment
* display equivalent using a lookup table. Display can
* do 0 - 9, A - F, individual segmentsm and special
* characters.
* @author: Dilanthi Prentice, Waylon Cude
* @date: [not sure when its due yet]
*
*
****/
module display_converter(
input logic [4:0] digit,
output logic [6:0] segment
);
localparam ROM_SIZE=32;
//ROM lookup table for seven segment display
localparam logic [6:0] segment_rom [0:ROM_SIZE-1] = '{
7'b1111110, //0
7'b0000110, //1
7'b1101101, //2
7'b1111001, //3
7'b1011011, //4
7'b1011011, //5
7'b1011111, //6
7'b1110000, //7
7'b1111111, //8
7'b1111011, //9
7'b1110111, //A
7'b0011111, //B
7'b1001110, //C
7'b0111101, //D
7'b1001111, //E
7'b1000111, //F
7'b1000000, //segment a
7'b0100000, //segment b
7'b0010000, //segment c
7'b0001000, //segment d
7'b0000100, //segment e
7'b0000001, //segment f
7'b0110111, //H
7'b0001110, //L
7'b1110111, //R
7'b0000110, //l
7'b0000101, //r
7'b0000000, //blank
7'b0000000, //blank
7'b0000000, //blank
7'b0000000, //blank
7'b0000000 //blank
};
//use digit input to index segment_rom lookup table.
assign segment = segment_rom[digit];
endmodule
+6 -25
View File
@@ -1,29 +1,10 @@
/*** module seconds_display(
* seconds_display.sv - convert a seconds counter to a seven segement display. input logic clk,
* input logic reset,
* @author: Dilanthi Prentice, Waylon Cude input [$clog2(60)-1:0] counter,
* @date:[unsure of due date] output [7:0] display_tens,
* output [7:0] display_ones
*/
module seconds_display
(
input [$clog2(60)-1:0] seconds,
output [6:0] display_tens,
output [6:0] display_ones
); );
logic [4:0] ones_digit;
logic [4:0] tens_digit;
always_comb
begin
ones_digit = seconds % 10;
tens_digit = seconds / 10;
end
//instantiate the display_converter to convert the counter
//to a seven segment display number
display_converter ones (ones_digit, display_ones);
display_converter tens (tens_digit, display_tens);
endmodule endmodule
+51
View File
@@ -0,0 +1,51 @@
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++;
$display("Failed ones test case, displayed = %b, expected = %b",
display_ones,
expected_ones);
end
else
if (display_tens !== expected_tens) begin
errors++;
$display("Failed tens test case, displayed = %b, expected = %b",
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