**BCD to Decimal Decoder with Preset/Reset**
b1105167 張家凱
**一、目的** -用verilog實現BCD to Decimal Decoder with Preset/Reset並提供vivado模擬報告。
**二、工具**-vscode,xilinx-vivado
**三、方法與步驟**-詳細說明
1.先在vscode寫出RTL檔與testbench並驗證其結果
RTL CODE:
```verilog=
module bcd_to_decimal (
A, // I 1-bit first inout bit
B, // I 1-bit second input bit
C, // I 1-bit third input bit
D, // I 1-bit fourth input bit
reset_n,
preset,
O // O 10-bit output
);
input A,B,C,D,reset_n,preset;
output [9:0]O;
reg [9:0]O;
always @(A or B or C or D or reset_n or preset)
begin
casez ({reset_n, preset})
2'b0x :
O = 10'b00_0000_0000;
2'b11 :
O = 10'b00_0000_1111;
2'b10 :
if ({D, C, B, A} == 4'b0000)
O = 10'b11_1111_1110;
else if({D, C, B, A} == 4'b0001)
O = 10'b11_1111_1101;
else if({D, C, B, A} == 4'b0010)
O = 10'b11_1111_1011;
else if({D, C, B, A} == 4'b0011)
O = 10'b11_1111_0111;
else if({D, C, B, A} == 4'b0100)
O = 10'b11_1110_1111;
else if({D, C, B, A} == 4'b0101)
O = 10'b11_1101_1111;
else if({D, C, B, A} == 4'b0110)
O = 10'b11_1011_1111;
else if({D, C, B, A} == 4'b0111)
O = 10'b11_0111_1111;
else if({D, C, B, A} == 4'b1000)
O = 10'b10_1111_1111;
else if({D, C, B, A} == 4'b1001)
O = 10'b01_1111_1111;
else
O = 10'b11_1111_1111;
default:
O = 10'b11_1111_1111;
endcase
end
endmodule
```
**testbench -暴力輸入**

----->結果吻合預期
觀察波形圖

----->同樣吻合預期
2.放入vivado做模擬
run simulation 確認輸出與輸入埠正確
----->查看波形

----->符合預期
RTL ANALYSIS 的schematic 圖






----->10個多工器吻合預期
IMPLEMENTATION
schematic:

分析報告與心得:

在分析報告中,我的logic power為0.032w,雖然不是特別耗能,但是我覺得我的if else 語句造成elaborated schematic 圖超級長!,應該是RTL CODE沒有設計好,也許有更好的解法尚未想到。
FPGA 驗證
---
**當preset=1 reset=1** **輸出:1111000000**

**reset_n=1 preset=0**
**輸入:0000 輸出:0111111111**

**輸入:0001 輸出:1011111111**
