1
Files
quartus-7-segment-counter/SegDriver.sv
2023-03-23 21:30:10 +01:00

48 lines
1.2 KiB
Systemverilog

`default_nettype none
module SingleSegDriver(
input var logic[3:0] bcdin,
output var logic[6:0] segments
);
// The segments are enabled on a low logic level
always_comb case (bcdin)
// +----a----+
// | |
// f b
// | |
// +----g----+
// | |
// e c
// | |
// +----d----+ gfedcba
4'b0000: segments = ~7'b0111111;
4'b0001: segments = ~7'b0000110;
4'b0010: segments = ~7'b1011011;
4'b0011: segments = ~7'b1001111;
4'b0100: segments = ~7'b1100110;
4'b0101: segments = ~7'b1101101;
4'b0110: segments = ~7'b1111101;
4'b0111: segments = ~7'b0000111;
4'b1000: segments = ~7'b1111111;
4'b1001: segments = ~7'b1100111;
default: segments = ~7'b0;
endcase
endmodule
module SegDriver
#(parameter integer DIGITS = 4)(
input var logic[3:0] bcdin[DIGITS-1:0],
output var logic[6:0] segments[DIGITS-1:0]
);
genvar ii;
generate
for (ii = 0; ii < DIGITS; ii = ii + 1) begin : generate_seg_drivers
SingleSegDriver ssd(
.bcdin(bcdin[ii]),
.segments(segments[ii])
);
end
endgenerate
endmodule