【VHDL】深度講解二進制無符號和有符號加法處理溢出的問題


1.Unsigned adders

這個比較簡單,只需在A、B前面擴展一位0防止溢出,溢出的數填到第n位cout,n-1到0位就是sum。

2.Signed adders

一開始也搞不懂下圖中為什么要擴展符號位,兩個符號位了怎么加?   往下看↓

 

2.1 Analysis

在真正開始使用Verilog做signed加法運算前,我們先來看看實際上二進制singed加法是如何運算?

Normal Condition (沒有Overflow)

(+6) + (-3) = (+3)

為了節省resource,我們故意使用4 bit的+6與3 bit的-3相加,若直接將兩個signed值相加,答案為-7,很顯然答案並不正確。

因為4 bit與3 bit相加,結果可能進位到5 bit,正確的作法是將4 bit的+6做signed extension到5 bit,且3 bit的-3也要做signed extension到5 bit后,然后才相加,若最后進位到6 bit,則不考慮6 bit的值。

在此補充一下何謂Singed Extension?簡單的說,當以較多bit顯示signed型態的值時,重復signed bit補齊。

就意義上來說,就是3 bit的signed值若要以5 bit表示時,必須補上signed bit才能在5 bit表示,所以101要變成11101。

Boundary Condition (正Overflow)

 (+7) + (+3) = (+10)

為了節省resource,我們一樣故意使用4 bit的+7與3 bit的+3相加,若直接將兩個signed值相加,答案為-6,很顯然答案並不正確。

根據上個例子的經驗,+7與+3必須做signed extension才能相加,這樣才能得到正確答案+10。

不過現在問題來了,+10必須動到5 bit才能顯示,若輸出的值域為4 bit,只能-8 ~ +7,+10很顯然已經正overflow了‧

若只能以4 bit表示,因為是正的,MSB必須是0(SUM[3]=0),所以若MSB是1就表示由進位而來,也就是正overflow了(此例的SUM[3]為1,所以已經正overflow),再加上因為目前運算結果為5 bit,且是正,所以SUM[5]必須為0。

也就是說,若SUM[5]=0且SUM[4]=1時,為正overflow,所以01010對於4 bit來說,是正overflow。

Boundary Condition (負Overflow)

(-5) + (-4) = (-9)

同樣為了節省resource,我們故意使用4 bit的-5與3 bit的-4相加,若直接將兩個signed值相加,答案為-1,很顯然的答案並不正確。

根據前面兩個例子,-5與-4一樣必須做signed extension才能相加,這樣才能得到正確答案-9‧進位到6 bit的1要舍去,所以答案是10111‧

 

問題一樣來了,-9必須動到5 bit才能顯示,若輸出的值域是4 bit,只能-8 ~ +7,-9很顯然已經是負overflow了。

若只能以4 bit表示,因為是負的,MSB必須是1(SUM[3]=1),所以若MSB是0就表示由進位而來,也就是負overflow了(此例的SUM[3]為0,所以已經負overflow),再加上因為目前運算結果為5 bit,且是負,所以SUM[5]必須為1‧

也就是說,若SUM[5]為1且SUM[4]為0時,為負overflow,所以10111對於4 bit來說,是負overflow。

 

2.2 Summary

根據之前三個實際的例子,我們得到以下結論:

m bit + m bit =< (m+1) bit m bit + n bit =< (m+1) bit,其中n < m ul style='list-style:disc outside none;' > m bit與n bit都必須先做signed extension到(m+1) bit才能相加 若結果有到(m+2) bit則忽略之,實際的結果為(m+1) bit 若Sum[m+1] ^ Sum[m]為1,表示有overflow 若Sum[m+1]為0且Sum[m]為1,則為正overflow 若Sum[m+1]為1且Sum[m]為0,則為負overflow

 

[1]如何實現有符號無符號加減法,如何處理overflowhttp://www.eeskill.com/article/id/45756

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM