# 七段顯示器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**


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
```
**結果:**

Schematic
---
RTL

IMPLEMENTATION

POWER

工作站模擬
---
Verdi Tool


Wave

**結果與預期相符--->成功!!**
FPGA 驗證
---
**reset_n=0**
全部------>顯示H

**reset_n=1**
輸入:0000------>顯示0

**reset_n=1**
輸入:0001------>顯示1

**reset_n=1**
輸入:0010------>顯示2

**reset_n=1**
輸入:0011------>顯示3

**reset_n=1**
輸入:0100------>顯示4

**reset_n=1**
輸入:0101------>顯示5

**reset_n=1**
輸入:0110------>顯示6

**reset_n=1**
輸入:0111------>顯示7

**reset_n=1**
輸入:1000------>顯示8

**reset_n=1**
輸入:1001------>顯示9

**reset_n=1**
輸入:1010------>顯示A

**reset_n=1**
輸入:1011------>顯示b

**reset_n=1**
輸入:1100------>顯示C

**reset_n=1**
輸入:1101------>顯示d

**reset_n=1**
輸入:1110------>顯示E

**reset_n=1**
輸入:1111------>顯示F
