數學運算(一)—— 無符號數加法器
數學運算(二)——無符號數乘法器結構
數學運算(三)——無符號數除法器
數學運算(四)——帶符號整數的運算
數學運算(五)——定點數和科學計數的四則運算(待更)
數學運算(六)——矩陣計算(待更)
數學運算(七)——通用非線性函數計算(待更)
數學運算(八)——通用非線性函數的CORDIC方法(待更)
之前我們聊了很多的數學運算的實現,但是都是無符號數,但是如果有符號怎麼辦呢?我們現在來說道說道。
在計算之前,我們老生常談的說一說原碼,反碼和補碼。首先原碼就是符號位和數值位的拼接,符號位「0」代表正數,「1」代表負數。反碼正數符號位為「0」後面添加絕對值的無符號數表示;負數符號位為「1」後面添加絕對值的無符號整數的各比特位取反表示。補碼是正數符號位是「0」,後面添加絕對值的無符號數表示,負數符號位是「1」後面是絕對值的無符號整數的各位取反,然後還要加上1。其實這裡的道理很簡單,取反是因為要用溢出來實現正負加法實際上是絕對值減法,取反加一實際上就是之前的數減一,而減的這個一實際上是因為雙零的緣故。
這樣原本帶符號數的加法,還要識別符號位再決定是加是減,如是用了補碼,就簡單的多了。如圖便是帶符號數的加法器設計
這裡面為什麼結果還要加一個原碼變補碼呢?原因是原碼變補碼和補碼變原碼設計是一樣的!只使用一個設計模塊正好是邏輯復用。
那要是做乘法怎麼辦?乘法就沒這麼簡單了(實際上也不難)利用乘法交換律,一部分計算符號部分,另一邊計算樹枝部分,再把他們合起來就是了。對於除法運算也是一樣的,就是有一點,餘數必須是正整數。乘法器和除法器的結構如下圖。