# **Vivado usage (4-bit full adder )** --- 姓名:李彥霆 學號:B1095105 指導老師:林宏益 --- --- # **1. 實驗目的** 將4-bit full adder verilog code於軟體實現 # **2.實驗原理** * 因半加法器沒有考慮進位傳輸的問題,故無法執行兩組 2 位元以上的二進位數相加,即半加法器缺少一個進位輸入端,當兩個較低位元之二進位數相加後,若有進位產生時,進位輸入可作為傳送進位與上一位元相加之用。 * 若在半加法器上多加一個輸入變數,就便成了全加法器 (Full Adder),故全加法器有加數、被加數與進位輸入等 3 個輸入變數,分別標示為 x、y 與Ci ,而此 3 個二進位數相加後,亦會產生一個和 (Sum) 與可能的進位 (Carry) 等 2 個輸出變數,分別標示為 S 與Co 。 ![](https://hackmd.io/_uploads/Hkp-erKg6.png) * 利用卡諾圖法對以上真值表進行邏輯化簡,可得簡化後之布林函數式為 ![](https://hackmd.io/_uploads/BJ7tlHtgp.png) * 最後將化簡所得之布林函數,使用邏輯閘來實現全加法器之邏輯電路,如下圖(a)所示。 ![](https://hackmd.io/_uploads/r12l-Htxa.png) > 註:上圖 (a) 與 (b) 皆可用來執行全法加器運算功能之邏輯電路圖,而這兩個電路之輸出 S皆為 S = x ⊕ y ⊕ Ci,而為使全加法器之邏輯電路圖有不同的表示方式,進位輸出Co 採用邏輯功能相同,但表示形式不同之布林函數式 ,即圖 (a) 之進位輸出![](https://hackmd.io/_uploads/ByK9-rYe6.png),而圖 (b) 之進位輸出![](https://hackmd.io/_uploads/BJI3ZBYx6.png) * 欲對兩組 n 位元之二進位數相加,必須串接 n 個全加器才能完成。若欲將兩組 4 位元之二進位數,被加數 x = x4x3x2x1與加數 y = y4y3y2y1執行加法運算規則如下: ![](https://hackmd.io/_uploads/ByHLGBYgp.png) * 根據上面之運算式可知,並行加法電路之原理是將較低位元之加數與被加數相加所得之進位,直接傳送至較高位元之進位輸入端,再與較高位元之加數與被加數相加所得之進位,再直接傳送至更高位元之進位輸入端,依此類推,便可執行 n 個位元之加法運算,此種加法器稱漣波進位加法器 (Ripple Carry Adder),亦可稱為並行加法器 (Parallel Adder)。![](https://hackmd.io/_uploads/rk7nzSFeT.png) # **3.實驗結果** #### **GTKWave波形圖** ![](https://hackmd.io/_uploads/ByjEwSKgp.png) | u3 | u2 | u1 | u0 | | --- | --- | --- | --- | | 黃 | 橘 | 紅 | 綠 | #### **Vivado波形圖** ![](https://hackmd.io/_uploads/rJCiirYep.png) #### **Vivado schematic圖** > Synthesis前 ![](https://hackmd.io/_uploads/S1EwprKxp.png) > Synthesis後 ![](https://hackmd.io/_uploads/S1kfPB9l6.png) # **4.實驗心得** 這次的作業是第一次運用vivado來跑模擬,過程有點陌生,但其實只要照著講義先在VScode上將RTL寫好、模擬一次,再照著老師的上課講義一步一步操作vivado就可以完成這次的作業了,最麻煩的其實是在下載軟體和前置作業的設定,花費的時間漫長許多,也因為下載失敗而重複了幾次。 # **5.參考文獻** 崑山科技大學開放式課程/►【電機工程系】邏輯設計(Logic Design) 《數位學習認證通過》 組合邏輯電路設計─算術運算電路(p.6~p.8) (http://ocw.ksu.edu.tw/mod/resource/view.php?id=89)