天天看點

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

超前進位加法器&行波進位加法器

  • 八位超前進位加法器
    • 原理
    • 設計檔案
    • 綜合電路
    • 測試檔案
    • 仿真波形
  • 八位行波進位加法器
    • 原理
    • 設計檔案
    • 測試檔案
    • 仿真波形
  • 總結

八位超前進位加法器

原理

有學弟問我,超前進位加法器中的

p=add1 ^ add2

g=add1 & add2

是什麼意思,是以這篇文章就稍微贅述一點吧~

所謂超前進位,首先應該明白進位是什麼。

8+4=12

,其中的

1

就是進位,其中的

2

才是結果。

那麼在二進制中,

1+1=10

,其中的

1

就是進位,

就是結果。

明白了進位和結果,那麼多位的數字是怎麼計算呢?

其實上面的計算應該是

1+1+上一位的進位=10

,是以兩個數字的計算應該涉及三個内容——加數,被加數,上一位的進位。

在一位二進制加法中,

a

b

分别表示兩個加數,

cin

表示上一位的進位,

cout

表示下一位的進位,

sum

表示結果,我們列出其真值表:

add1 add2 cin cout sum
1 1
1 1
1 1 1
1 1
1 1 1
1 1 1
1 1 1 1 1

以數字**

1

為真**,數字**

為假**,

a

表示

1

a'

表示

,這樣的形式。學過離散數學或者數字電路的同學應該多少會點吧,“·”代表“與”,“+”代表“或”,是以上面的真值表,寫成表達式,就是:

經過部分化簡:

同理:

找到兩個等式的相同部分,都有

a⊕b

,其中

代表“異或”,在

Verilog

中用“^”表示,即

a^b

,是以令

p = add1 ^ add2

,現在知道幹什麼用的了嘛?

沒錯,就是中間變量而已,同理

g = add1 & add2

也是中間變量,這樣就可以把上面兩個等式改寫成:

cout = g | (cin & p)

sum = add1 ^ add2 ^ cin

(其實就是變短了一點點而已)

不過呢,适當的使用中間變量,可能會讓你的代碼精簡許多~

此外,我發現一個網站可以通過真值表生成表達式:http://www.32x8.com/index.html

設計檔案

上面的代碼應該看起來很長,像老太太的裹腳布,但這也就是所謂的超前進位。

Verilog

中“塊”和

assign

語句都是并行執行的,上面有許多

assign

語句,是以從

c[0]

c[7]

,根據第一步的

cin

,就可以同步計算出每一位的進位(超前進位),以及最後的結果,這些是同時完成的,也就完成了超前進位加法器。

綜合電路

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

點選

RTL-ANALYSIS——Synthesis

,可以檢視綜合電路圖:

19

個元件,

26

IO

口,

56

根線

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

測試檔案

還有些同學,對測試檔案的了解也還是不夠深刻,這裡稍提一嘴,測試檔案就是給電路加激勵資訊,使電路運作。至于加提示資訊之類的,各自加油就好啦~

仿真波形

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器
四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

右鍵某一信号,選擇相應的進制數,以

10+9

為例,最終輸出

cout=0

sum=19

那麼之後的

10+11

為什麼沒有進位使

cout=1

呢?

把他們轉換成二進制觀察一下就明白啦~

八位行波進位加法器

當時不知道在哪聽的這個名字,就一直用下了,其實這個應該叫做行波進位加法器——由N個全加器級聯而成,是以被我叫成了級聯進位emmm

原理

如上所說,行波進位加法器是由

N

個全加器級聯而成,比如

8

位的加法器可以由

8

個一位全加器級聯而成,也可以由

2

個四位全加器構成,差別就是所綜合出的電路大小。

設計檔案

方式一

這是把上述原理複現了一邊,上一步的進位輸出,傳入到下一位計算的進位輸入。

綜合後的電路如下,

48

個元件,

26

IO

口,

65

根線

綜合電路

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

方式二

上面的語句重複性太大,就用子產品例化的方式來寫

其中的

add_1_unit

子產品如下:

綜合後的電路如下,全展開後有

48

個元件,

26

IO

口,

97

根線

綜合電路

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

其中的每一個單元如下:

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

全展開後如下:

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

兩種寫法

資料總線的數量有差別:一個是

65

根線,一個是

97

根線。

代碼量有差別:一個

40

行左右,一個總共

27

行左右。

優缺點不言而喻。

測試檔案

都是八位加法器,與超前進位加法器也沒差別

還是放一下吧:

仿真波形

與超前進位一緻,用二進制檢視一下如下圖:

四位行波進位加法器_超前進位加法器&行波進位加法器超前進位加法器&行波進位加法器

總結

行波進位加法器,由于後一位的進位依賴于前一位的進位,是以關鍵路徑更長,限制速度,性能不高,

超前進位加法器,由于進位計算是并行的,是以關鍵路徑短,速度快,但是位寬越寬,也就代表會綜合出更複雜的、面積更大的電路。