From 4b041651d492e2838d86565ce825953d12eeab29 Mon Sep 17 00:00:00 2001 From: dilanthi Date: Sat, 17 May 2025 20:38:52 -0700 Subject: [PATCH] added seven segment display logic / seconds counter --- design/display_converter.sv | 60 +++++++++++++++++++++++++++++++++++++ design/seconds_display.sv | 31 +++++++++++++++---- 2 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 design/display_converter.sv diff --git a/design/display_converter.sv b/design/display_converter.sv new file mode 100644 index 0000000..acc9d8e --- /dev/null +++ b/design/display_converter.sv @@ -0,0 +1,60 @@ +/** +* 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 diff --git a/design/seconds_display.sv b/design/seconds_display.sv index 5ea6b3e..f715a3a 100644 --- a/design/seconds_display.sv +++ b/design/seconds_display.sv @@ -1,10 +1,29 @@ -module seconds_display( - input logic clk, - input logic reset, - input [$clog2(60)-1:0] counter, - output [7:0] display_tens, - output [7:0] display_ones +/*** +* seconds_display.sv - convert a seconds counter to a seven segement display. +* +* @author: Dilanthi Prentice, Waylon Cude +* @date:[unsure of due date] +* +*/ +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