---
# System prepended metadata

title: 七段顯示器
tags: [Templates, Book]

---

# 七段顯示器with reset(common anode)
B1105167 張家凱

目的
---
當reset_n=1，則輸入有效
當輸入:
**D=0 C=0 B=0 A=0** 則七段顯示器顯示0----->
輸出:
**a=0 b=0 c=0 d=0 e=0 f=0 g=1 dp=1**
(因共陰故0的地方亮)
     ...以此類推...

當reset_n=0，則輸入無效
輸入:
**D=x C=x B=x A=x** 七段顯示器顯示H---->
輸出:
**a=1 b=0 c=0 d=1 e=0 f=0 g=0 dp=1**
![](https://hackmd.io/_uploads/B1K4LdoGa.png)

![](https://hackmd.io/_uploads/ryufr_oG6.png)


HDL CODE說明
---
``` verilog 
module segment7 (
           A,
           B,
           C,
           D,
           reset_n,
           disp
);

input reset_n,A,B,C,D;
reg   [7:0] disp;
output [7:0] disp;
wire [4:0] BCD_code;

assign BCD_code={reset_n,D,C,B,A};

always @(BCD_code)
case (BCD_code)
    5'b10000:
        disp=8'b0000_0011;
    5'b10001:
        disp=8'b1001_1111;
    5'b10010:
        disp=8'b0010_0101;
    5'b10011:
        disp=8'b0000_1101;
    5'b10100:
        disp=8'b1001_1001;
    5'b10101:
        disp=8'b0100_1001;
    5'b10110:
        disp=8'b0100_0001;
    5'b10111:
        disp=8'b0001_1111;
    5'b11000:
        disp=8'b0000_0001;
    5'b11001:
        disp=8'b0000_1001;
    5'b11010:
        disp=8'b0001_0001;
    5'b11011:
        disp=8'b1100_0001;
    5'b11100:
        disp=8'b0110_0011;
    5'b11101:
        disp=8'b1000_0101;
    5'b11110:
        disp=8'b0110_0001;
    5'b11111:
        disp=8'b0111_0001;


    default :
        disp=8'b10010001//五個位元32個數已經定義16個
                        //故0xxxx都是8'b10010001---->顯示H
endcase

endmodule
```


Testbench Code說明
---
1.檢測當reset_n=0 輸出是否正確
2.檢測reset_n=1 時的所有輸出
``` verilog 
module segment7_tb();

reg reset_n, D, C, B, A;
wire [7:0] disp;

integer i;//給reset_n=1時的迴圈用

initial
begin

    $dumpfile("segment7.vcd");
    $dumpvars(0, display_unit);
    $monitor("reset_n = %b, D = %b C = %b B = %b A = %b | a = %b b = %b c = %b d = %b e = %b f = %b g = %b dp = %b"
             , reset_n, D, C, B, A, disp[7],disp[6],disp[5],disp[4],disp[3],disp[2],disp[1],disp[0]);


    #10;
    reset_n=1'b0;
    A = 1'b0;
    B = 1'b0;
    C = 1'b0;
    D = 1'b0;  //測試reset有沒有用
    #10;
    reset_n=1'b0;
    A = 1'b0;
    B = 1'b1;
    C = 1'b0;
    D = 1'b1;  //測試reset有沒有用

    #10;
    reset_n=1'b1;


    for (i = 0; i <= 15 ; i = i + 1 ) //迴圈輸入從0000~1111
    begin
        D = i[3];
        C = i[2];
        B = i[1];
        A = i[0];
        #10;
    end
    #10 $finish;

end
segment7  display_unit (
              .A(A),
              .B(B),
              .C(C),
              .D(D),
              .reset_n(reset_n),
              .disp(disp)
          );


endmodule
```
**結果:**
![](https://hackmd.io/_uploads/H1b12_izp.png)
Schematic
---
RTL 
![](https://hackmd.io/_uploads/HJCgjx3zp.png)
IMPLEMENTATION
![](https://hackmd.io/_uploads/H17Faxhz6.png)
POWER
![](https://hackmd.io/_uploads/rkjapghMT.png)
工作站模擬
---
Verdi Tool
![](https://hackmd.io/_uploads/S1mnyuafa.png)
![](https://hackmd.io/_uploads/Skh-l_6zp.png)
Wave
![](https://hackmd.io/_uploads/HkUWEupfa.png)

**結果與預期相符--->成功!!**

FPGA 驗證
---
**reset_n=0**
全部------>顯示H
![S__16121859.jpg](https://hackmd.io/_uploads/Hkk8kdM7a.jpg)

**reset_n=1**
輸入:0000------>顯示0
![S__16121861.jpg](https://hackmd.io/_uploads/B10Mg_fX6.jpg)

**reset_n=1**
輸入:0001------>顯示1
![S__16121862.jpg](https://hackmd.io/_uploads/r1sQxOzQT.jpg)

**reset_n=1**
輸入:0010------>顯示2
![S__16121863.jpg](https://hackmd.io/_uploads/B1TAe_G76.jpg)

**reset_n=1**
輸入:0011------>顯示3
![S__16121864.jpg](https://hackmd.io/_uploads/ByTyW_zQa.jpg)

**reset_n=1**
輸入:0100------>顯示4
![S__16121865.jpg](https://hackmd.io/_uploads/HJBQb_zmp.jpg)

**reset_n=1**
輸入:0101------>顯示5
![S__16121866.jpg](https://hackmd.io/_uploads/rkL4buzXT.jpg)

**reset_n=1**
輸入:0110------>顯示6
![S__16121867.jpg](https://hackmd.io/_uploads/r1R4ZdGXp.jpg)

**reset_n=1**
輸入:0111------>顯示7
![S__16121868.jpg](https://hackmd.io/_uploads/B1ZLbdzQ6.jpg)

**reset_n=1**
輸入:1000------>顯示8
![S__16121869.jpg](https://hackmd.io/_uploads/HJcLZOzmT.jpg)

**reset_n=1**
輸入:1001------>顯示9
![S__16121870.jpg](https://hackmd.io/_uploads/H1Xvb_zmp.jpg)

**reset_n=1**
輸入:1010------>顯示A
![S__16121872.jpg](https://hackmd.io/_uploads/BJ5KW_MQ6.jpg)

**reset_n=1**
輸入:1011------>顯示b
![S__16121873.jpg](https://hackmd.io/_uploads/r1fq-OM7a.jpg)

**reset_n=1**
輸入:1100------>顯示C
![S__16121874.jpg](https://hackmd.io/_uploads/rkekfOzQT.jpg)

**reset_n=1**
輸入:1101------>顯示d
![S__16121875.jpg](https://hackmd.io/_uploads/HJgQG_fXa.jpg)

**reset_n=1**
輸入:1110------>顯示E
![S__16121876.jpg](https://hackmd.io/_uploads/SyZUMdfX6.jpg)

**reset_n=1**
輸入:1111------>顯示F
![S__16121877.jpg](https://hackmd.io/_uploads/S1L5MOzQa.jpg)















