本文轉載自:明德揚FPGA科教微信公眾號
在日常生活中,我們常常需要到正數與負數,比如南北兩級氣溫常年為零度以下,這個時候我們就需要負數來表示溫度。
那么在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為正。這時傳輸的數據就如下表所示:
可以看出,我們約定為將第一位表示正負是完全沒有問題的,當然我們也發現,約定前和約定后的數值是完全不一樣的。因此在設計代碼的時候一定要注意,模塊與模塊之間的傳輸,一定要同時遵守同一約定。遵守約定后,不論我們是約定第幾條線表示正負,都可以達到數據正確傳輸的效果。
二、小數的表達
學習了負數的表達,感受了約定的力量,那么小數的表達也就迎刃而解了。這里有的同學會問,我也需要增加一根線表示小數點嗎,其實是不用的。就算加入了一條線,電平不會有變化,不但給數值的表示增加了困難,還浪費了資源,屬于多此一舉的行為。但是我們也知道一個3位二進制數字“101”,小數點的位置不同時,對應的值就不同。同樣我們需要在事先約定好,這里的約定,即是小數點的位置。并不需要將小數點實際的表示出來,但是傳輸信號雙方需要約定好,并且互相都以小數點位置是已知的為基礎進行信號傳輸的。
比如對于剛剛的3位二進制數字“101”,定位小數點在第二位之后,那么此二進制數字為“10.1”即十進制的“2.5”。我們管小數點位置固定的數稱為定點小數。確定了小數點的位置,自然而然我么就確定了小數點后有幾位數。我們使用Qn來表示小數點后有n位的定點小數,如同樣是5位二進制數字“10101”,將其不同小數位置表示出來如下:
因此我們只要定位了小數點后需要跟幾位數字,就可以在FPGA中表達小數。比如約定6位二進制數字的小數點之后有4位就叫做Q4格式的定點小數,隨機拿一個數字表達即“0.1010”;比如約定10為二進制的小數點之后有7位就叫做Q7格式的定點小數,隨機拿一個數字表達即“011.0111010”。
以上就是FPGA中負數和小數的表達,我們再來回顧一下,負數的表達方式為增加一位信號,小數的表達方式則是定位小數點。但是不論是哪種方式,我們都想傳達給大家一個思想,就是不論多么復雜的傳輸內容,傳輸數據雙方都可以對其進行約定,只要約定達成一致,那么傳輸任何數據都沒有問題了。
XC4VFX100-10FFG1152I
XCVU095-2FFVB2104E
XCVU095-2FFVC2104E
XCVU095-1FFVB2104I
XCVU095-2FFVC2104I
XCVU095-2FFVD1517E
XCVU095-1FFVC2104E
XC6VLX550T-2FF1759C
XC6VLX760-3FFG1760C
XC6VLX365T-1FF1156I
XC6VLX760-2FFG1760C