Compare commits
1 Commits
4b041651d4
..
wcude
| Author | SHA1 | Date | |
|---|---|---|---|
| da7d026d06 |
@@ -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
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user