FPGA中正負數和定點小數的表示方法

2021-10-09 16:29:55 字數 2263 閱讀 1078

在日常生活中,我們常常需要到正數與負數,比如南北兩級氣溫常年為零度以下,這個時候我們就需要負數來表示溫度。那麼在fpga工程裡面也是這樣,我們如果想要做溫度監測工程,自然而然的就會需要到負數來表達零下的溫度。當然fpga中除了數字正負的表達,還需要用到小數。在加減乘除的運算中,小數的出現是不可避免的。作為fpga工程師,我們無法保證所有設計都不出現負數或者小數的情況,不能避免我們就克服,今天就為大家分享一下fpga中負數與小數的表達。

關於負數,大家都知道在任何正數前加上負號便成了負數,比如「π」前面加上負號為「-π」,「0.178」前面加上負號為「-0.178」。fpga傳輸訊號使用的是二進位制表達,同樣二進位制的負數表達也是在正數前面增加乙個負號。即「1110」加負號為「-1110」,「1010100」前面加負號為「-1010100」。

明確了二進位制負數的表達,我們再來考慮如何通過訊號傳輸。在計算機中,數碼訊號的大小常用有限位的二進位制數表示。訊號1為高電平,訊號0為低電平,高低電平的變化即可得到對應的訊號。想要傳輸多位訊號,就增加對應的線即改變位寬。例如我們需要傳輸五位二進位制數10100就需要5條線,第一條線為高電平傳輸「1」,第二條線為低電平傳輸「0」,第三條線為高電平傳輸「1」,第四條線為低電平傳輸「0」,第五條線為低電平傳輸「0」。記住訊號傳輸的原理,我們來考慮負數的表示。

在表示負數之前,我們需要明確乙個理念—約定,即你我雙方一起遵守乙個協議從而達成合作。就如手機製造商和耳機製造商合作一樣,如果想要耳機與手機達成適配,就需要達成約定使用乙個標準。比如一致的使用圓孔,或者約定使用type-c介面;同時也要約定使用國際標準還是國家標準。如果沒有達成約定,兩個廠家想當然的進行設計,手機使用了國際標準的type-c介面,耳機卻是國家標準的圓孔,那想要達成最終合作也只會變成一場空,無論如何都是無法成功傳輸聲音的。關於資料傳輸也是一樣的,甲乙兩個模組之間需要傳輸資料,一起約定了共傳輸六位資料,但是第一位資料不考慮,只取後五位。即傳輸訊號為「101011」,其實表達的為「01011」。這個時候兩個模組之間一方沒有遵守約定,就會得出兩種截然不同的結果。

理解了約定的概念,我們自然而然就解決了負數的問題。前面說過負數是在數的前面增加乙個負數符號,那麼我們就可以事先約定一條表示正負的線,並且此線為傳輸資料的第一條線,高電平1為負,低電平0為正。這時傳輸的資料就如下表所示:

二進位制訊號表示

約定前的十進位制表示

約定後的十進位制表示

0011

+11015-1

0102

+20113+3

1117

-3可以看出,我們約定為將第一位表示正負是完全沒有問題的,當然我們也發現,約定前和約定後的數值是完全不一樣的。因此在設計**的時候一定要注意,模組與模組之間的傳輸,一定要同時遵守同一約定。遵守約定後,不論我們是約定第幾條線表示正負,都可以達到資料正確傳輸的效果。

學習了負數的表達,感受了約定的力量,那麼小數的表達也就迎刃而解了。這裡有的同學會問,我也需要增加一根線表示小數點嗎,其實是不用的。就算加入了一條線,電平不會有變化,不但給數值的表示增加了困難,還浪費了資源,屬於多此一舉的行為。但是我們也知道乙個3位二進位制數字「101」,小數點的位置不同時,對應的值就不同。同樣我們需要在事先約定好,這裡的約定,即是小數點的位置。並不需要將小數點實際的表示出來,但是傳輸訊號雙方需要約定好,並且互相都以小數點位置是已知的為基礎進行訊號傳輸的。

比如對於剛剛的3位二進位制數字「101」,定位小數點在第二位之後,那麼此二進位制數字為「10.1」即十進位制的「2.5」。我們管小數點位置固定的數稱為定點小數。確定了小數點的位置,自然而然我麼就確定了小數點後有幾位數。我們使用qn來表示小數點後有n位的定點小數,如同樣是5位二進位制數字「10101」,將其不同小數字置表示出來如下:

5位二進位制數

小數點位置

對應小數表達

10101

q010101

10101

q11010.1

10101

q2101.01

10101

q310.101

10101

q41.0101

10101

q50.10101

因此我們只要定位了小數點後需要跟幾位數字,就可以在fpga中表達小數。比如約定6位二進位制數字的小數點之後有4位就叫做q4格式的定點小數,隨機拿乙個數字表達即「0.1010」;比如約定10為二進位制的小數點之後有7位就叫做q7格式的定點小數,隨機拿乙個數字表達即「011.0111010」。

以上就是fpga中負數和小數的表達,我們再來回顧一下,負數的表達方式為增加一位訊號,小數的表達方式則是定位小數點。但是不論是哪種方式,我們都想傳達給大家乙個思想,就是不論多麼複雜的傳輸內容,傳輸資料雙方都可以對其進行約定,只要約定達成一致,那麼傳輸任何資料都沒有問題了。

計算機中正負數表示

在32位系統中,int型別佔4個位元組,一共是32個2進製位,int型別的首位是符號位,0代表正數,1代表負數,int的最大值是0x7fffffff 即除了最高的1bit其他31位都為1 而最小值是0x80000000 除了最高1bit,其他31位都為0 但是我有幾個問題,在這裡記錄解答一下 關於補...

大數相加(分正負數)

給出2個大整數a,b,計算a b的結果。input 第1行 大數a 第2行 大數b a,b的長度 10000 需注意 a b有可能為負數 output 輸出a b sample input68932147586 468711654886sample output537643802472 includ...

計算機表示正負數

國內很多教材都有其為本科教材,對於計算機表示負數大概只有一句話,取反加一 並稱之為 補碼 今天偶然翻閱資料,覺得是時候徹底解決一下這個問題了。首先 二進位制補碼 只是人為定義的乙個概念,與 黃赤交角 一樣。不是在說明問題的本質,而是在解釋解決問題的辦法。計算機表示負數,運用的是 溢位原理 溢位原理,...