diff --git a/seg7/README.md b/seg7/README.md new file mode 100644 index 0000000..da28159 --- /dev/null +++ b/seg7/README.md @@ -0,0 +1,19 @@ +# Active High 7 Segment Decoder + +### 7 Segment Decoder + +Every digit from 0 to 9 can be displayed using the 7 segments labelled a through g as follows: + +![7 segment display](Untitled.png) + +### Input + +4 bit number ranging from 0 to 9 + +### Output + +7 bit number with MSB corresponding to A and LSB to G. The output is in accordance with the definiton of the active high condition, with + +1 = ON + +0 = OFF \ No newline at end of file diff --git a/seg7/Untitled.png b/seg7/Untitled.png new file mode 100644 index 0000000..0c622a5 Binary files /dev/null and b/seg7/Untitled.png differ diff --git a/seg7/seg7.v b/seg7/seg7.v new file mode 100644 index 0000000..aa9d6e3 --- /dev/null +++ b/seg7/seg7.v @@ -0,0 +1,28 @@ +module seg7( + bcd, + seg +); + +input [3:0] bcd; +output reg [6:0] seg; +//reg [6:0] seg; + +always @(bcd) begin + case (bcd) + 0 : seg = 7'b1111110; + 1 : seg = 7'b0110000; + 2 : seg = 7'b1101101; + 3 : seg = 7'b1111001; + 4 : seg = 7'b0110011; + 5 : seg = 7'b1011011; + 6 : seg = 7'b1011111; + 7 : seg = 7'b1110000; + 8 : seg = 7'b1111111; + 9 : seg = 7'b1111011; + //switch off 7 segment character when the bcd digit is not a decimal number. + default : seg = 7'b0000000; + + endcase +end + +endmodule \ No newline at end of file diff --git a/seg7/seg7_tb.v b/seg7/seg7_tb.v new file mode 100644 index 0000000..23c51bf --- /dev/null +++ b/seg7/seg7_tb.v @@ -0,0 +1,85 @@ +`include "seg7.v" + +module seg7_tb(); + +reg [3:0] bcd; +wire [6:0] seg; + +seg7 uut( + .bcd(bcd), + .seg(seg) +); + +initial begin + $dumpfile("seg7_tb.vcd"); + $dumpvars(0, seg7_tb); + + bcd = 4'b0; + + #200 $finish; +end + +always #20 bcd = bcd + 1; + +always @(bcd) begin + #5; + $display("%b",seg); + $write(" "); + + if (seg[6]) begin //a + $write("_"); + end + else begin + $write(" "); + end + + $write("\n"); + + if (seg[1]) begin //f + $write("|"); + end + else begin + $write(" "); + end + + if (seg[0]) begin //g + $write("_"); + end + else begin + $write(" "); + end + + if (seg[5]) begin //b + $write("|"); + end + else begin + $write(" "); + end + + $write("\n"); + + if (seg[2]) begin //e + $write("|"); + end + else begin + $write(" "); + end + + if (seg[3]) begin //d + $write("_"); + end + else begin + $write(" "); + end + + if (seg[4]) begin //c + $write("|"); + end + else begin + $write(" "); + end + + $write("\n\n"); +end + +endmodule \ No newline at end of file