最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

小夥伴們好,又見面了,小編今天要講的是基於硬件描述語言的半加器以及全加器的原理以及二者的區別。

那麼,還是原來那樣,我們首先來介紹一下半加器和全加器的基本概念:

根據百度百科對於半加器的定義,半加器電路(half-adder)其實就是指對兩個輸入數據位a和b相加,然後輸出一個結果位s和進位c,是沒有進位輸入的加法器電路(如果存在進位輸入的話那麼就是全加器電路了)。

而全加器電路(full-adder)是用門電路實現兩個二進制數相加並求出和的組合線路,稱為一位全加器。一位全加器可以處理低位進位,並輸出本位加法進位。多個一位全加器進行級聯可以得到多位全加器。但是我們通俗地講,全加器電路其實就是指對兩個輸入數據位a和b和一個進位數據Cin相加,然後輸出一個結果位Sum和進位Cout,是有進位輸入的加法器電路。

最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

我們再來說明一下半加器和全加器的區別:

1.相加時進位的有無的區別:半加器沒有接收進位的輸入端,而全加器有進位輸入端

2.相加二進制數位數的區別:全加器在將兩個多位二進制數相加時,除了最低位外,每一位都要考慮來自低位的進位,而半加器則不用考慮,只需要考慮兩個輸入端相加即可,是實現兩個一位二進制數的加法運算電路。

3.真值表和邏輯函數的區別:

最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

半加器真值表中,輸出的邏輯函數為:s=a’b+ab’;c=ab;

最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

全加器真值表中,輸出的邏輯函數為:s=a⊕b⊕Cin;Cout=ab+Cin(a+b);

所以,其實,全加器和半加器也就多了那麼一個相加的輸入位,全加器就是三位相加,半加器就是二位相加,這樣理解其實就夠了。

接下來,我們通過Verilog的設計代碼來更好地瞭解半加器的原理吧

最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

Code

最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

TestBench

很明顯,五行最簡單的代碼以及一個公式,就把全加器的原理通過Verilog語言設計勾勒出來了,足以證明Verilog語言是如此得方便與神奇!

這裡,“{}”符號表示的是“拼接位”,即先計算a與b的值,當a與b為“0”和“1”時,它們之和為1,那麼就是{01},對應c和s;當a與b為“1”和“1”時,它們之和為2,那麼就是轉換為二進制就是{10},同樣對應c和s等等。下面是其仿真時序圖,可以看出,完全符合半加器的真值表,說明該設計的成功!

最經典的Verilog學習案例:半加器和全加器的原理以及二者的區別

Simulatioin

至於加法器的代碼呢,小編也就不重複添加了,跟半加器的代碼差不了多少,用到的依舊是“{}”位拼接符號會比較簡便一些,大家可以自行編寫設計。對於半加器以及加法器的應用呢,依舊是很廣泛的,但是需要依賴於其它的設計,單獨設計半加器,可能在現實中起不到什麼很有效的作用。一般是作為加法器的基本模塊,當多個加法器組合在一起的時候,就可以作為“計算器”來計算了,早期的大型計算機就是利用了無數的加法器來實現複雜的運算的。所以說,複雜的工程,缺少不了許許多多的基本的知識模塊,現代如此高智能的新科技的發明依舊是站在前人的肩膀上的,而不是因為現代人比前人聰明,這個道理,大家應該要懂得。

小夥伴們如果在學習的時候遇到一些問題的話,歡迎留言討論,小編會一一回復的~


分享到:


相關文章: