Files
FPGA_Uni/Quartus/A1_Q1/seven_seg.sv
T

53 lines
1.3 KiB
Systemverilog

`ifndef SEVEN_SEG_H_SV
`define SEVEN_SEG_H_SV
module seven_seg(
input logic [3:0] num,
input logic [0:0] rbi_inv,
output logic [7:0] segments);
always_comb begin
case (num)
4'b0000: segments = (rbi_inv) ? ~(8'b01111111) : ~(8'b00000000); // zero or blank
4'b0001: segments = ~(8'b00001101);
4'b0010: segments = ~(8'b10110111);
4'b0011: segments = ~(8'b10011111);
4'b0100: segments = ~(8'b11001101);
4'b0101: segments = ~(8'b11011011);
4'b0110: segments = ~(8'b11111011);
4'b0111: segments = ~(8'b00001111);
4'b1000: segments = ~(8'b11111111);
4'b1001: segments = ~(8'b11001111);
4'b1010: segments = ~(8'b11101111);
4'b1011: segments = ~(8'b11111001);
4'b1100: segments = ~(8'b01110011);
4'b1101: segments = ~(8'b10111101);
4'b1110: segments = ~(8'b11110011);
4'b1111: segments = ~(8'b11100011);
default: segments = ~(8'bxxxxxxxx);
endcase
end
endmodule
module seven_seg_2digit(
input logic [3:0] b, // left
input logic [3:0] a, // right
output logic [7:0] seg_b, // left
output logic [7:0] seg_a); // right
// seg_b
seven_seg left_digit(
.num(b),
.rbi_inv(1'b0), // blanking enabled
.segments(seg_b)
);
// seg_a
seven_seg right_digit(
.num(a),
.rbi_inv(1'b1), // blanking disabled
.segments(seg_a)
);
endmodule
`endif