# 上數 BCD to 7段顯示器 實驗報告
報告內容:
---
- 使用7段顯示器的真值表編碼來設計程式,且給予輸入與輸出波形,當上數到F數值時,會清除從0開始執行,重複迴圈式的運作。
- 觀察波形中是否有重複的方波,正緣和負緣之間差了多少clk值
實驗目的:
---
- 將七段顯示器真值表之編碼轉為verilog的形式來呈現結果並嘗試以同步清除來進行重複執行的功能。
- 設計上數七段顯示並有載入和同步清除的功能,觀察波形中的數值。
- 藉由七段顯示器電路圖來構思程式

## 實驗結果:
▼此圖為七段顯示器之方波波形圖

▼此圖為七段顯示器之真直表波形圖

## 程式碼:
```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來表現相對應之波形,並觀察是否有同步清除的功能,以確保可以重複值形,由於過去有經驗,對於硬體上的七段顯示器並不陌生,但轉為須使用程式設計的方式來製作時,有些地方尚未完全的明白,在撰寫程式時,不斷的使用老師提供的概念來撰寫,相信有這樣的經驗,未來課程中使用到硬體,能更快速的上手。