## BCD to Decimal Decoder with Preset/Reset實驗報告 ### B1095165 黃瑄凱 指導教授:林宏益 ## 一、實驗目的 >將十位數字轉BCD表示。並對此解碼器增加預設和重置的功能用來控制解碼器的初始狀態。 ## 二、實驗原理&實驗背景 ### 原理: >在這個實驗中的原理是將BCD(Binary-Coded Decimal)碼轉換成對應的十進制數字,並具有Preset(預設)和Reset(重置)的功能。 ### 背景: #### BCD編碼: BCD(Binary-Coded Decimal)編碼是一種用於將十進制數字轉換為二進制表示的方法。在BCD編碼中,每個十進制數字(0到9)都由其二進制表示的4位數組成。例如,十進制數字2表示為BCD碼0010,而十進制數字7表示為BCD碼0111。這種編碼方式的好處是它直接將十進制數字映射到二進制,使得在數位電路中進行數字操作變得更容易。 #### 解碼器: 在數位電路中,解碼器是一種電路元件,其功能是將特定的輸入編碼映射到輸出。在本實驗中,解碼器的作用是將4位的BCD輸入映射到對應的十進制數字。舉例來說,當BCD輸入為0010時,解碼器應該輸出十進制數字2。解碼器的設計使用邏輯閘(AND、OR、NOT閘)以及可能的觸發器(Flip-Flops)來實現。這允許在數位電路中執行BCD到十進制的轉換操作。 ## 三、實驗材料: * Verilog程式碼 * Vivado軟體 ## 四、實驗步驟: 1.創建新的Vivado專案。 2.設計RTL程式碼。 3.建立testbench檔案,生成不同的BCD來驗證解碼器。 4.進行模擬,產生波形圖,並讓RTL產生邏輯電路。 5.檢查模擬結果,確保BCD to Decimal正確執行。 6.比對模擬結果和預期結果。 ## 五、實驗結果: ![](https://hackmd.io/_uploads/BkOg9Az-a.png) ![](https://hackmd.io/_uploads/H1xC5RfZp.png) ![](https://hackmd.io/_uploads/B1pecAGW6.png) ## 六、實驗討論: 1.請撰寫RTL與testbench並驗證正確性: ``` // RTL片段 module BCD_to_Decimal ( input [3:0] BCD_input, input reset, input preset, output reg [9:0] dec_output ); always @(*) begin // 當reset信號為低電平時,將dec_output設置為0 if (reset == 1'b0) dec_output = 0; // 當preset信號為高電平時,將dec_output設置為固定值10'b0000001111 else if (preset == 1'b1) dec_output = 10'b0000001111; else begin // 在其他情況下,將dec_output設置為固定值10'b1111111111 // 根據BCD_input的值,逐位地將dec_output的相應位設置為0 case (BCD_input) 4'd0: dec_output[0] = 0; 4'd1: dec_output[1] = 0; 4'd2: dec_output[2] = 0; 4'd3: dec_output[3] = 0; 4'd4: dec_output[4] = 0; 4'd5: dec_output[5] = 0; 4'd6: dec_output[6] = 0; 4'd7: dec_output[7] = 0; 4'd8: dec_output[8] = 0; 4'd9: dec_output[9] = 0; endcase end end // 其他部分... endmodule ``` 2.請說明所撰寫的 RTL 與 schematic 是否有差別?: >RTL代碼提供了一個文字描述的高級硬體描述,它描述了BCD到十進制解碼器的行為和邏輯操作。 >Schematic則是一個圖形表示,通過圖形符號展示了硬體元件(如閘和觸發器)的物理連接。 >差別在於RTL代碼提供了抽象的邏輯描述,而schematic提供了實際連接和元件的物理佈局。 >通過對比RTL代碼中的邏輯操作和schematic中的連接,確保了它們的功能等價性。 3.依據Vivado所提供的分析報告(功率分析、面積報告或時序),提供你什麼樣的想法?: 功率分析: >功率分析報告提供有關FPGA在不同操作模式下的功耗信息。可以評估硬體的功耗,並確定在不同的操作情境下,硬體是否符合電源供應需求。如果設計對功耗敏感,可以提供有關如何降低功耗的建議,例如使用低功耗元件或調整時鐘頻率。 面積報告: >面積報告提供了有關FPGA資源使用情況的詳細信息。可以檢查設計使用了多少邏輯單元、RAM、觸發器等資源。如果你的設計需要滿足資源約束,則可以確保它在這方面是有效的。如果面積使用率過高,可以考慮優化設計以節省資源。 時序分析: >時序分析報告提供有關信號延遲和時序約束的信息。可以確保設計滿足所設定的時序約束,以確保正確的操作。如果有時序問題,報告將識別並描述這些問題,並提供改進的建議 ## 七、實驗心得: 在這個實驗中,實現了一個BCD到十進制解碼器,該解碼器具有Preset(預設)和Reset(重置)的功能。這個實驗不僅讓我熟悉了Verilog硬體描述語言的使用,還提供了深入了解數位邏輯設計的機會。 首先,我們編寫了RTL(Register-Transfer Level)代碼,用於描述BCD到十進制解碼器的行為。這需要我們理解BCD碼的解碼邏輯以及如何處理Reset和Preset信號。通過模擬,我們確保了解碼器的正確性,並觀察了不同輸入情況下的輸出。 其次,創建了一個測試台(testbench),用於生成不同的BCD輸入,以驗證解碼器的操作。這包括了在不同模式下測試Reset和Preset信號的行為,並確保解碼器正確地將BCD碼轉換為十進制數字。 最後,使用Vivado工具分析了我的設計。功率分析報告提供了有關硬體功耗的信息,面積報告描述了資源使用情況,時序分析報告確保了時序約束的滿足。這些報告幫助我們評估了我們的設計性能,並提供了改進設計的方向。 這個實驗增加了我們在數位邏輯設計和硬體描述方面的知識和技能。我們學會了如何使用Verilog來建模和驗證數位電路,並深入了解了FPGA設計的一些關鍵概念。 ## 八、參考文獻: 北国无红豆. "​1​BCD码、十进制互相转换." CSDN博客, 2021. https://blog.csdn.net/weixin_63135906/article/details/128960727 卷卷小菜鸡. "十进制数转换BCD码." CSDN博客, 2022. https://blog.csdn.net/cjl24/article/details/123378638