FPGA中(zhōng)正(zhèng)負數和(hé)定(dìng)點(diǎn)小數的(de)表(biǎo)示方(fāng)法
本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!作者(zhě):姬姬姬
在(zài)日(rì)常生(shēng)活中(zhōng),我(wǒ)们(men)常常需要(yào)到(dào)正(zhèng)數與(yǔ)負數,比如(rú)南(nán)北(běi)两(liǎng)級气(qì)温(wēn)常年(nián)为(wèi)零(líng)度(dù)以(yǐ)下(xià),这(zhè)个(gè)时(shí)候我(wǒ)们(men)就(jiù)需要(yào)負數来(lái)表(biǎo)示温(wēn)度(dù)。那(nà)麼(me)在(zài)FPGA工程里(lǐ)面(miàn)也(yě)是(shì)这(zhè)樣(yàng),我(wǒ)们(men)如(rú)果(guǒ)想(xiǎng)要(yào)做温(wēn)度(dù)監测工程,自(zì)然而(ér)然的(de)就(jiù)会(huì)需要(yào)到(dào)負數来(lái)表(biǎo)达(dá)零(líng)下(xià)的(de)温(wēn)度(dù)。當然FPGA中(zhōng)除了(le)數字(zì)正(zhèng)負的(de)表(biǎo)达(dá),還(huán)需要(yào)用(yòng)到(dào)小數。在(zài)加減乘除的(de)運算中(zhōng),小數的(de)出(chū)現(xiàn)是(shì)不(bù)可(kě)避免的(de)。作为(wèi)FPGA工程师(shī),我(wǒ)们(men)无法保證所(suǒ)有(yǒu)設計(jì)都不(bù)出(chū)現(xiàn)負數或(huò)者(zhě)小數的(de)情(qíng)況,不(bù)能(néng)避免我(wǒ)们(men)就(jiù)客服(fú),今天(tiān)就(jiù)为(wèi)大家(jiā)分(fēn)享一(yī)下(xià)FPGA中(zhōng)負數與(yǔ)小數的(de)表(biǎo)达(dá)。
一(yī)、負數的(de)表(biǎo)达(dá)
關(guān)于(yú)負數,大家(jiā)都知道(dào)在(zài)任何正(zhèng)數前(qián)加上(shàng)負号(hào)便成(chéng)了(le)負數,比如(rú)“π”前(qián)面(miàn)加上(shàng)負号(hào)为(wèi)“-π”,“0.178”前(qián)面(miàn)加上(shàng)負号(hào)为(wèi)“-0.178”。FPGA傳輸信(xìn)号(hào)使用(yòng)的(de)是(shì)二(èr)進(jìn)制表(biǎo)达(dá),同(tóng)樣(yàng)二(èr)進(jìn)制的(de)負數表(biǎo)达(dá)也(yě)是(shì)在(zài)正(zhèng)數前(qián)面(miàn)增加一(yī)个(gè)負号(hào)。即“1110”加負号(hào)为(wèi)“-1110”,“1010100”前(qián)面(miàn)加負号(hào)为(wèi)“-1010100”。
明(míng)确了(le)二(èr)進(jìn)制負數的(de)表(biǎo)达(dá),我(wǒ)们(men)再来(lái)考慮如(rú)何通(tòng)过(guò)信(xìn)号(hào)傳輸。在(zài)計(jì)算機(jī)中(zhōng),數字(zì)信(xìn)号(hào)的(de)大小常用(yòng)有(yǒu)限位的(de)二(èr)進(jìn)制數表(biǎo)示。信(xìn)号(hào)1为(wèi)高(gāo)電(diàn)平,信(xìn)号(hào)0为(wèi)低電(diàn)平,高(gāo)低電(diàn)平的(de)變(biàn)化(huà)即可(kě)得到(dào)对(duì)應(yìng)的(de)信(xìn)号(hào)。想(xiǎng)要(yào)傳輸多(duō)位信(xìn)号(hào),就(jiù)增加对(duì)應(yìng)的(de)線(xiàn)即改變(biàn)位宽(kuān)。例如(rú)我(wǒ)们(men)需要(yào)傳輸五(wǔ)位二(èr)進(jìn)制數10100就(jiù)需要(yào)5条(tiáo)線(xiàn),第(dì)一(yī)条(tiáo)線(xiàn)为(wèi)高(gāo)電(diàn)平傳輸“1”,第(dì)二(èr)条(tiáo)線(xiàn)为(wèi)低電(diàn)平傳輸“0”,第(dì)三(sān)条(tiáo)線(xiàn)为(wèi)高(gāo)電(diàn)平傳輸“1”,第(dì)四(sì)条(tiáo)線(xiàn)为(wèi)低電(diàn)平傳輸“0”,第(dì)五(wǔ)条(tiáo)線(xiàn)为(wèi)低電(diàn)平傳輸“0”。記(jì)住信(xìn)号(hào)傳輸的(de)原理,我(wǒ)们(men)来(lái)考慮負數的(de)表(biǎo)示。
在(zài)表(biǎo)示負數之前(qián),我(wǒ)们(men)需要(yào)明(míng)确一(yī)个(gè)理念—約定(dìng),即你我(wǒ)双(shuāng)方(fāng)一(yī)起遵守一(yī)个(gè)協議從而(ér)达(dá)成(chéng)合作。就(jiù)如(rú)手(shǒu)機(jī)制造商和(hé)耳(ěr)機(jī)制造商合作一(yī)樣(yàng),如(rú)果(guǒ)想(xiǎng)要(yào)耳(ěr)機(jī)與(yǔ)手(shǒu)機(jī)达(dá)成(chéng)适配,就(jiù)需要(yào)达(dá)成(chéng)約定(dìng)使用(yòng)一(yī)个(gè)标(biāo)準。比如(rú)一(yī)致(zhì)的(de)使用(yòng)圆(yuán)孔,或(huò)者(zhě)約定(dìng)使用(yòng)type-c接口(kǒu);同(tóng)时(shí)也(yě)要(yào)約定(dìng)使用(yòng)國(guó)際标(biāo)準還(huán)是(shì)國(guó)家(jiā)标(biāo)準。如(rú)果(guǒ)沒(méi)有(yǒu)达(dá)成(chéng)約定(dìng),两(liǎng)个(gè)廠(chǎng)家(jiā)想(xiǎng)當然的(de)進(jìn)行設計(jì),手(shǒu)機(jī)使用(yòng)了(le)國(guó)際标(biāo)準的(de)type-c接口(kǒu),耳(ěr)機(jī)卻是(shì)國(guó)家(jiā)标(biāo)準的(de)圆(yuán)孔,那(nà)想(xiǎng)要(yào)达(dá)成(chéng)最(zuì)終(zhōng)合作也(yě)只(zhī)会(huì)變(biàn)成(chéng)一(yī)场空,无論如(rú)何都是(shì)无法成(chéng)功傳輸聲音(yīn)的(de)。關(guān)于(yú)數據(jù)傳輸也(yě)是(shì)一(yī)樣(yàng)的(de),甲乙两(liǎng)个(gè)模块(kuài)之間(jiān)需要(yào)傳輸數據(jù),一(yī)起約定(dìng)了(le)共(gòng)傳輸六(liù)位數據(jù),但是(shì)第(dì)一(yī)位數據(jù)不(bù)考慮,只(zhī)取(qǔ)後(hòu)五(wǔ)位。即傳輸信(xìn)号(hào)为(wèi)“101011”,其实表(biǎo)达(dá)的(de)为(wèi)“01011”。这(zhè)个(gè)时(shí)候两(liǎng)个(gè)模块(kuài)之間(jiān)一(yī)方(fāng)沒(méi)有(yǒu)遵守約定(dìng),就(jiù)会(huì)得出(chū)两(liǎng)種(zhǒng)截然不(bù)同(tóng)的(de)結果(guǒ)。
理解(jiě)了(le)約定(dìng)的(de)概念,我(wǒ)们(men)自(zì)然而(ér)然就(jiù)解(jiě)決了(le)負數的(de)問(wèn)題(tí)。前(qián)面(miàn)说(shuō)过(guò)負數是(shì)在(zài)數的(de)前(qián)面(miàn)增加一(yī)个(gè)負數符号(hào),那(nà)麼(me)我(wǒ)们(men)就(jiù)可(kě)以(yǐ)事(shì)先(xiān)約定(dìng)一(yī)条(tiáo)表(biǎo)示正(zhèng)負的(de)線(xiàn),并且此(cǐ)線(xiàn)为(wèi)傳輸數據(jù)的(de)第(dì)一(yī)条(tiáo)線(xiàn),高(gāo)電(diàn)平1为(wèi)負,低電(diàn)平0为(wèi)正(zhèng)。这(zhè)时(shí)傳輸的(de)數據(jù)就(jiù)如(rú)下(xià)表(biǎo)所(suǒ)示:
|
二(èr)進(jìn)制信(xìn)号(hào)表(biǎo)示 |
約定(dìng)前(qián)的(de)十(shí)進(jìn)制表(biǎo)示 |
約定(dìng)後(hòu)的(de)十(shí)進(jìn)制表(biǎo)示 |
|
001 |
1 |
+1 |
|
101 |
5 |
-1 |
|
010 |
2 |
+2 |
|
011 |
3 |
+3 |
|
111 |
7 |
-3 |
可(kě)以(yǐ)看(kàn)出(chū),我(wǒ)们(men)約定(dìng)为(wèi)将第(dì)一(yī)位表(biǎo)示正(zhèng)負是(shì)完全(quán)沒(méi)有(yǒu)問(wèn)題(tí)的(de),當然我(wǒ)们(men)也(yě)發(fà)現(xiàn),約定(dìng)前(qián)和(hé)約定(dìng)後(hòu)的(de)數值是(shì)完全(quán)不(bù)一(yī)樣(yàng)的(de)。因(yīn)此(cǐ)在(zài)設計(jì)代(dài)碼的(de)时(shí)候一(yī)定(dìng)要(yào)注意(yì),模块(kuài)與(yǔ)模块(kuài)之間(jiān)的(de)傳輸,一(yī)定(dìng)要(yào)同(tóng)时(shí)遵守同(tóng)一(yī)約定(dìng)。遵守約定(dìng)後(hòu),不(bù)論我(wǒ)们(men)是(shì)約定(dìng)第(dì)幾(jǐ)条(tiáo)線(xiàn)表(biǎo)示正(zhèng)負,都可(kě)以(yǐ)达(dá)到(dào)數據(jù)正(zhèng)确傳輸的(de)效果(guǒ)。
二(èr)、小數的(de)表(biǎo)达(dá)
学習了(le)負數的(de)表(biǎo)达(dá),感(gǎn)受了(le)約定(dìng)的(de)力量(liàng),那(nà)麼(me)小數的(de)表(biǎo)达(dá)也(yě)就(jiù)迎刃而(ér)解(jiě)了(le)。这(zhè)里(lǐ)有(yǒu)的(de)同(tóng)学会(huì)問(wèn),我(wǒ)也(yě)需要(yào)增加一(yī)根(gēn)線(xiàn)表(biǎo)示小數點(diǎn)吗,其实是(shì)不(bù)用(yòng)的(de)。就(jiù)算加入(rù)了(le)一(yī)条(tiáo)線(xiàn),電(diàn)平不(bù)会(huì)有(yǒu)變(biàn)化(huà),不(bù)但給(gěi)數值的(de)表(biǎo)示增加了(le)困難,還(huán)浪費了(le)資源,屬于(yú)多(duō)此(cǐ)一(yī)舉的(de)行为(wèi)。但是(shì)我(wǒ)们(men)也(yě)知道(dào)一(yī)个(gè)3位二(èr)進(jìn)制數字(zì)“101”,小數點(diǎn)的(de)位置不(bù)同(tóng)时(shí),对(duì)應(yìng)的(de)值就(jiù)不(bù)同(tóng)。同(tóng)樣(yàng)我(wǒ)们(men)需要(yào)在(zài)事(shì)先(xiān)約定(dìng)好(hǎo),这(zhè)里(lǐ)的(de)約定(dìng),即是(shì)小數點(diǎn)的(de)位置。并不(bù)需要(yào)将小數點(diǎn)实際的(de)表(biǎo)示出(chū)来(lái),但是(shì)傳輸信(xìn)号(hào)双(shuāng)方(fāng)需要(yào)約定(dìng)好(hǎo),并且互相都以(yǐ)小數點(diǎn)位置是(shì)已知的(de)为(wèi)基礎進(jìn)行信(xìn)号(hào)傳輸的(de)。
比如(rú)对(duì)于(yú)刚刚的(de)3位二(èr)進(jìn)制數字(zì)“101”,定(dìng)位小數點(diǎn)在(zài)第(dì)二(èr)位之後(hòu),那(nà)麼(me)此(cǐ)二(èr)進(jìn)制數字(zì)为(wèi)“10.1”即十(shí)進(jìn)制的(de)“2.5”。我(wǒ)们(men)管(guǎn)小數點(diǎn)位置固定(dìng)的(de)數稱为(wèi)定(dìng)點(diǎn)小數。确定(dìng)了(le)小數點(diǎn)的(de)位置,自(zì)然而(ér)然我(wǒ)麼(me)就(jiù)确定(dìng)了(le)小數點(diǎn)後(hòu)有(yǒu)幾(jǐ)位數。我(wǒ)们(men)使用(yòng)Qn来(lái)表(biǎo)示小數點(diǎn)後(hòu)有(yǒu)n位的(de)定(dìng)點(diǎn)小數,如(rú)同(tóng)樣(yàng)是(shì)5位二(èr)進(jìn)制數字(zì)“10101”,将其不(bù)同(tóng)小數位置表(biǎo)示出(chū)来(lái)如(rú)下(xià):

因(yīn)此(cǐ)我(wǒ)们(men)只(zhī)要(yào)定(dìng)位了(le)小數點(diǎn)後(hòu)需要(yào)跟幾(jǐ)位數字(zì),就(jiù)可(kě)以(yǐ)在(zài)FPGA中(zhōng)表(biǎo)达(dá)小數。比如(rú)約定(dìng)6位二(èr)進(jìn)制數字(zì)的(de)小數點(diǎn)之後(hòu)有(yǒu)4位就(jiù)叫做Q4格式的(de)定(dìng)點(diǎn)小數,随機(jī)拿一(yī)个(gè)數字(zì)表(biǎo)达(dá)即“0.1010”;比如(rú)約定(dìng)10为(wèi)二(èr)進(jìn)制的(de)小數點(diǎn)之後(hòu)有(yǒu)7位就(jiù)叫做Q7格式的(de)定(dìng)點(diǎn)小數,随機(jī)拿一(yī)个(gè)數字(zì)表(biǎo)达(dá)即“011.0111010”。
以(yǐ)上(shàng)就(jiù)是(shì)FPGA中(zhōng)負數和(hé)小數的(de)表(biǎo)达(dá),我(wǒ)们(men)再来(lái)回(huí)顧一(yī)下(xià),負數的(de)表(biǎo)达(dá)方(fāng)式为(wèi)增加一(yī)位信(xìn)号(hào),小數的(de)表(biǎo)达(dá)方(fāng)式則是(shì)定(dìng)位小數點(diǎn)。但是(shì)不(bù)論是(shì)哪種(zhǒng)方(fāng)式,我(wǒ)们(men)都想(xiǎng)傳达(dá)給(gěi)大家(jiā)一(yī)个(gè)思(sī)想(xiǎng),就(jiù)是(shì)不(bù)論多(duō)麼(me)複雜的(de)傳輸內(nèi)容,傳輸數據(jù)双(shuāng)方(fāng)都可(kě)以(yǐ)对(duì)其進(jìn)行約定(dìng),只(zhī)要(yào)約定(dìng)达(dá)成(chéng)一(yī)致(zhì),那(nà)麼(me)傳輸任何數據(jù)都沒(méi)有(yǒu)問(wèn)題(tí)了(le)。
明(míng)德揚專注FPGA研究,本(běn)人(rén)正(zhèng)在(zài)連(lián)载两(liǎng)本(běn)書(shū)籍: 《基于(yú)FPGA至(zhì)簡設計(jì)法实現(xiàn)的(de)图(tú)像邊(biān)緣檢测系(xì)統》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=691)、《ASIC和(hé)FPGA时(shí)序約束(shù)理論與(yǔ)應(yìng)用(yòng)》(http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=705),有(yǒu)興趣點(diǎn)擊观看(kàn)。也(yě)欢迎加入(rù)群(qún)(838209674),及(jí)时(shí)獲取(qǔ)最(zuì)新的(de)文(wén)章(zhāng)信(xìn)息,个(gè)性(xìng)化(huà)問(wèn)題(tí)也(yě)可(kě)以(yǐ)找(zhǎo)我(wǒ)哦:Q 1744527324(明(míng)德揚小冉)。















