# 上數 BCD to 7段顯示器 實驗報告 報告內容: --- - 使用7段顯示器的真值表編碼來設計程式,且給予輸入與輸出波形,當上數到F數值時,會清除從0開始執行,重複迴圈式的運作。 - 觀察波形中是否有重複的方波,正緣和負緣之間差了多少clk值 實驗目的: --- - 將七段顯示器真值表之編碼轉為verilog的形式來呈現結果並嘗試以同步清除來進行重複執行的功能。 - 設計上數七段顯示並有載入和同步清除的功能,觀察波形中的數值。 - 藉由七段顯示器電路圖來構思程式 ![](https://i.imgur.com/Tb8tkWE.jpg) ## 實驗結果: ▼此圖為七段顯示器之方波波形圖 ![](https://i.imgur.com/rio2Apd.png) ▼此圖為七段顯示器之真直表波形圖 ![](https://i.imgur.com/jp1MnJ2.png) ## 程式碼: ```verilog= module Binary_To_7Segment.v ( input [3:0] i_Binary_Num, output o_Segment_A, output o_Segment_B, output o_Segment_C, output o_Segment_D, output o_Segment_E, output o_Segment_F, output o_Segment_G ); reg [6:0] r_Hex_Encoding = 7'h00; combination. always @(i_Binary_Num) begin case (i_Binary_Num) 4'b0000 : r_Hex_Encoding <= 7'h7E; 4'b0001 : r_Hex_Encoding <= 7'h30; 4'b0010 : r_Hex_Encoding <= 7'h6D; 4'b0011 : r_Hex_Encoding <= 7'h79; 4'b0100 : r_Hex_Encoding <= 7'h33; 4'b0101 : r_Hex_Encoding <= 7'h5B; 4'b0110 : r_Hex_Encoding <= 7'h5F; 4'b0111 : r_Hex_Encoding <= 7'h70; 4'b1000 : r_Hex_Encoding <= 7'h7F; 4'b1001 : r_Hex_Encoding <= 7'h7B; 4'b1010 : r_Hex_Encoding <= 7'h77; 4'b1011 : r_Hex_Encoding <= 7'h1F; 4'b1100 : r_Hex_Encoding <= 7'h4E; 4'b1101 : r_Hex_Encoding <= 7'h3D; 4'b1110 : r_Hex_Encoding <= 7'h4F; 4'b1111 : r_Hex_Encoding <= 7'h47; endcase end // i_Clk assign o_Segment_A = r_Hex_Encoding[6]; assign o_Segment_B = r_Hex_Encoding[5]; assign o_Segment_C = r_Hex_Encoding[4]; assign o_Segment_D = r_Hex_Encoding[3]; assign o_Segment_E = r_Hex_Encoding[2]; assign o_Segment_F = r_Hex_Encoding[1]; assign o_Segment_G = r_Hex_Encoding[0]; endmodule // 二進數值 ``` ```verilog= `timescale 1ns / 1ps module tb_7segment; // 輸入 reg [3:0] i_Binary_Num; // 輸出 wire o_Segment_A,o_Segment_B,o_Segment_C,o_Segment_D,o_Segment_E,o_Segment_F,o_Segment_G; Binary_To_7Segment UUT ( i_Binary_Num, o_Segment_A, o_Segment_B, o_Segment_C, o_Segment_D, o_Segment_E, o_Segment_F, o_Segment_G); initial begin i_Binary_Num = 0; #20 i_Binary_Num = 1;//給予數值輸出從9後都會改成Abcdef #20 i_Binary_Num = 2; #20 i_Binary_Num = 3; #20 i_Binary_Num = 4; #20 i_Binary_Num = 5; #20 i_Binary_Num = 6; #20 i_Binary_Num = 7; #20 i_Binary_Num = 8; #20 i_Binary_Num = 9; #20 i_Binary_Num = 10; #20 i_Binary_Num = 11; #20 i_Binary_Num = 12; #20 i_Binary_Num = 13; #20 i_Binary_Num = 14; #20 i_Binary_Num = 15; #40; $stop; end initial begin $dumpfile("BCD.vcd"); end endmodule ``` ## 程式碼連結: https://gist.github.com/Fukuanchih/cbea8e38db8d34ce2dbf65aee83a4e34 ## 實驗心得: - 曾經有使用過7447來推動七段顯示器,七段顯示器分為共陽型與共陰型,共陽型是低太輸出型常用的IC為7447,共陰型是高態輸出型常用IC7448,論兩項不同型式的差別,差別最大為接腳位的電壓準位。 - 在邏設實驗中與過去不同於使用verilog來表現相對應之波形,並觀察是否有同步清除的功能,以確保可以重複值形,由於過去有經驗,對於硬體上的七段顯示器並不陌生,但轉為須使用程式設計的方式來製作時,有些地方尚未完全的明白,在撰寫程式時,不斷的使用老師提供的概念來撰寫,相信有這樣的經驗,未來課程中使用到硬體,能更快速的上手。