---
# System prepended metadata

title: 'hw-2 BCD to Decimal Decoder with Preset/Reset 張家凱 '

---

**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 -暴力輸入**
![](https://hackmd.io/_uploads/Bk6JUMQWT.png)
----->結果吻合預期
觀察波形圖
![](https://hackmd.io/_uploads/HJpSUzXZp.png)
----->同樣吻合預期
2.放入vivado做模擬
run simulation 確認輸出與輸入埠正確
----->查看波形
![](https://hackmd.io/_uploads/HJIvxvmWp.png)
----->符合預期

RTL ANALYSIS 的schematic 圖
![](https://hackmd.io/_uploads/H1UpWvQZT.png)
![](https://hackmd.io/_uploads/H1ylfDm-T.png)
![](https://hackmd.io/_uploads/SkeWfPX-T.png)
![](https://hackmd.io/_uploads/HkmZzwXZT.png)
![](https://hackmd.io/_uploads/BJuZGPXZT.png)
![](https://hackmd.io/_uploads/S16ZzD7Zp.png)
----->10個多工器吻合預期

IMPLEMENTATION 
schematic:
![](https://hackmd.io/_uploads/Bk164wQZ6.png)




分析報告與心得:
![](https://hackmd.io/_uploads/HkV3SD7Wa.png)
在分析報告中，我的logic power為0.032w，雖然不是特別耗能，但是我覺得我的if else 語句造成elaborated schematic 圖超級長!，應該是RTL CODE沒有設計好，也許有更好的解法尚未想到。

FPGA 驗證
---
**當preset=1 reset=1** **輸出:1111000000**
![](https://hackmd.io/_uploads/SkUiwdpz6.jpg)
                                                     
**reset_n=1 preset=0**
**輸入:0000 輸出:0111111111**
![](https://hackmd.io/_uploads/B1RpUdTMT.jpg)

**輸入:0001 輸出:1011111111**
![](https://hackmd.io/_uploads/r1wdddTGa.jpg)














