SDVD/design/segment_display/display_converter.sv

63 lines
1.4 KiB
Systemverilog

/**
* 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 segments and special
* characters.
*
* @author: Dilanthi Prentice, Waylon Cude
* @date: 6/12/25
*
****/
module display_converter(
input logic [4:0] digit,
output logic [6:0] segment
);
localparam ROM_SIZE=32;
//ROM lookup table for seven segment display
//blanks are unused space we could add characters to.
localparam logic [6:0] segment_rom [0:ROM_SIZE-1] = '{
7'b1111110, //0
7'b0000110, //1
7'b1101101, //2
7'b1111001, //3
7'b0110011, //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