**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)