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