Xilinx FPGA數(shù)字信號(hào)處理設(shè)計(jì)(設(shè)計(jì)篇)_第1頁(yè)
Xilinx FPGA數(shù)字信號(hào)處理設(shè)計(jì)(設(shè)計(jì)篇)_第2頁(yè)
Xilinx FPGA數(shù)字信號(hào)處理設(shè)計(jì)(設(shè)計(jì)篇)_第3頁(yè)
Xilinx FPGA數(shù)字信號(hào)處理設(shè)計(jì)(設(shè)計(jì)篇)_第4頁(yè)
Xilinx FPGA數(shù)字信號(hào)處理設(shè)計(jì)(設(shè)計(jì)篇)_第5頁(yè)
已閱讀5頁(yè),還剩201頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

XilinxFPGA數(shù)字信號(hào)處理設(shè)計(jì)(設(shè)計(jì)篇)目錄\h下篇設(shè)計(jì)篇\h第5章FPGA中的數(shù)字運(yùn)算\h5.1數(shù)的表示\h5.2FPGA中的四則運(yùn)算\h5.3有效數(shù)據(jù)位的計(jì)算\h5.4有限字長(zhǎng)效應(yīng)\h5.5小結(jié)\h5.6思考與練習(xí)\h第6章典型IP核的應(yīng)用\h6.1IP核在FPGA中的應(yīng)用\h6.2時(shí)鐘管理IP核\h6.3乘法器IP核\h6.4除法器IP核\h6.5存儲(chǔ)器IP核\h6.6數(shù)控振蕩器IP核\h6.7小結(jié)\h6.8思考與練習(xí)\h第7章FIR濾波器設(shè)計(jì)\h7.1數(shù)字濾波器的理論基礎(chǔ)\h7.2FIR濾波器的原理\h7.3FIR濾波器的FPGA實(shí)現(xiàn)結(jié)構(gòu)\h7.4基于累加器的FIR濾波器設(shè)計(jì)\h7.5FIR濾波器的MATLAB設(shè)計(jì)\h7.6FIR濾波器系數(shù)的量化方法\h7.7并行結(jié)構(gòu)FIR濾波器的FPGA實(shí)現(xiàn)\h7.8串行結(jié)構(gòu)FIR濾波器的FPGA實(shí)現(xiàn)\h7.9基于FIR核的FIR濾波器設(shè)計(jì)\h7.10FIR濾波器的板載測(cè)試\h7.11小結(jié)\h7.12思考與練習(xí)\h第8章IIR濾波器設(shè)計(jì)\h8.1IIR濾波器的理論基礎(chǔ)\h8.2IIR濾波器的MATLAB設(shè)計(jì)\h8.3直接型結(jié)構(gòu)IIR濾波器的FPGA實(shí)現(xiàn)\h8.4級(jí)聯(lián)型結(jié)構(gòu)IIR濾波器的FPGA實(shí)現(xiàn)\h8.5IIR濾波器的板載測(cè)試\h8.6小結(jié)\h8.7思考與練習(xí)\h第9章快速傅里葉變換的設(shè)計(jì)\h9.1FFT的原理\h9.2FFT算法的MATLAB仿真\h9.3FFT核的使用\h9.4信號(hào)識(shí)別電路的FPGA設(shè)計(jì)\h9.5信號(hào)識(shí)別電路的板載測(cè)試\h9.6小結(jié)\h9.7思考與練習(xí)下篇

設(shè)計(jì)篇第5章

FPGA中的數(shù)字運(yùn)算數(shù)字運(yùn)算主要是加、減、乘、除。FPGA中只能對(duì)二進(jìn)制數(shù)進(jìn)行運(yùn)算,生活中我們更習(xí)慣于對(duì)十進(jìn)制的實(shí)數(shù)進(jìn)行運(yùn)算。數(shù)字運(yùn)算的本質(zhì)和規(guī)律是相同的,徹底掌握FPGA中的符號(hào)數(shù)、小數(shù)、數(shù)據(jù)位擴(kuò)展等設(shè)計(jì)方法,才有可能完成更為復(fù)雜的數(shù)字信號(hào)處理算法。其實(shí)我們已經(jīng)掌握了數(shù)字運(yùn)算的本質(zhì),只需要將這些規(guī)律運(yùn)用到FPGA設(shè)計(jì)中即可。5.1數(shù)的表示在德國(guó)圖靈根著名的郭塔王宮圖書館(SchlossbiliothkezuGotha)保存著一份彌足珍貴的手稿,其標(biāo)題為“1與0,一切數(shù)字的神奇淵源,這是造物主的秘密美妙的典范。因?yàn)橐磺袩o(wú)非都來(lái)自上帝?!边@是萊布尼茲(見(jiàn)圖5-1)(GottfriedWilhelmLeibniz,1646—1716年)的手跡。但是,關(guān)于這個(gè)神奇美妙的數(shù)字系統(tǒng),萊布尼茲只有幾頁(yè)異常精練的描述。用現(xiàn)代人熟悉的表達(dá)方式,我們可以對(duì)二進(jìn)制做如下的解釋:圖5-1萊布尼茲(1646—1716年)2的0次方=12的1次方=22的2次方=42的3次方=8……依次類推,把等號(hào)右邊的數(shù)字相加,就可以得到任意一個(gè)自然數(shù),或者說(shuō)任意一個(gè)自然數(shù)均可以采用這種方式來(lái)表示。我們只需要說(shuō)明采用了2的幾次方,而舍掉了2的幾次方即可。二進(jìn)制的表述序列都從右邊開(kāi)始,第一位是2的0次方,第二位是2的1次方,第三位是2的2次方,依次類推。一切采用2的乘方的位置,用1來(lái)標(biāo)志;一切舍掉2的乘方的位置,用0來(lái)標(biāo)志。例如,對(duì)于序列11100101,根據(jù)上述表示方法,可以很容易推算出序列所表示的數(shù)值。在這個(gè)例子中,十進(jìn)制數(shù)229就可以表示為本列11100101。任何一個(gè)二進(jìn)制數(shù)最左邊的一位都是1。通過(guò)這個(gè)方法,整個(gè)自然數(shù)都可用0和1這兩個(gè)數(shù)字來(lái)代替。0與1這兩個(gè)數(shù)字很容易被電子化:有電流就是1,沒(méi)有電流就是0。這就是整個(gè)現(xiàn)代計(jì)算機(jī)技術(shù)的根本秘密所在。1679年,萊布尼茲發(fā)表了論文《二進(jìn)制算術(shù)》,對(duì)二進(jìn)制數(shù)進(jìn)行了充分的討論,并建立了二進(jìn)制數(shù)的表示方法及運(yùn)算。隨著計(jì)算機(jī)的廣泛應(yīng)用,二進(jìn)制數(shù)進(jìn)一步大顯身手。因?yàn)橛?jì)算機(jī)是用電子元件的不同狀態(tài)來(lái)表示不同的數(shù)碼的,如果要用十進(jìn)制數(shù)就要求電子元件能準(zhǔn)確地變化出10種狀態(tài),這在技術(shù)上是非常難實(shí)現(xiàn)的。二進(jìn)制數(shù)只有2個(gè)數(shù)碼,只需2種狀態(tài)就能實(shí)現(xiàn),這正如一個(gè)開(kāi)關(guān)只有開(kāi)和關(guān)兩種狀態(tài)。如果用開(kāi)表示0,關(guān)表示1,那么一個(gè)開(kāi)關(guān)的兩種狀態(tài)就可以表示一個(gè)二進(jìn)制數(shù)。由此我們不難想象,5個(gè)開(kāi)關(guān)就可以表示5個(gè)二進(jìn)制數(shù),這樣運(yùn)算起來(lái)就非常方便。5.1.1定點(diǎn)數(shù)的定義和表示1.定點(diǎn)數(shù)的定義幾乎所有的計(jì)算機(jī),以及包括FPGA在內(nèi)的數(shù)字信號(hào)處理器件,數(shù)字和信號(hào)變量都是用二進(jìn)制數(shù)來(lái)表示的。數(shù)字使用符號(hào)0和1來(lái)表示,稱為比特(BinaryDigit,bit)。其中,二進(jìn)制數(shù)的小數(shù)點(diǎn)將數(shù)字的整數(shù)部分和小數(shù)部分分開(kāi)。為了與十進(jìn)制數(shù)的小數(shù)點(diǎn)符號(hào)相區(qū)別,使用符號(hào)?來(lái)表示二進(jìn)制數(shù)的小數(shù)點(diǎn)。例如,十進(jìn)制數(shù)11.625的二進(jìn)制數(shù)表示為1011?101。二進(jìn)制數(shù)小數(shù)點(diǎn)左邊的4位1011代表整數(shù)部分,小數(shù)點(diǎn)右邊的3位101代表數(shù)字的小數(shù)部分。對(duì)于任意一個(gè)二進(jìn)制數(shù)來(lái)講,均可由B個(gè)整數(shù)位和b個(gè)小數(shù)位組成,即:aB-1aB-2...a1a0?a-1a-2...a-b(5-1)其對(duì)應(yīng)的十進(jìn)制數(shù)大?。僭O(shè)該二進(jìn)制數(shù)為正數(shù))D由給出。每一個(gè)ai的值取1或0。最左端的位aB-1稱為最高位(MostSignificantBit,MSB),最右端的位a-b稱為最低位(LeastSignificantBit,LSB)。表示一個(gè)數(shù)的一組數(shù)字稱為字,而一個(gè)字包含的位數(shù)稱為字長(zhǎng)。字長(zhǎng)的典型值是2的冪次方,如8、16、32等。字的大小通常用字節(jié)(Byte)來(lái)表示,1個(gè)字節(jié)有8個(gè)比特。2.定點(diǎn)數(shù)的表示定點(diǎn)數(shù)表示是指小數(shù)點(diǎn)在數(shù)中的位置是固定不變的二進(jìn)制數(shù)。如果用Nbit表示正小數(shù)η,則小數(shù)η的范圍為:0≤η≤(2N-1)/2N(5-3)在給定N的任何一種情況下,小數(shù)η的范圍是固定的。在數(shù)字處理中,定點(diǎn)數(shù)通常把數(shù)限制在-1~1之間,把小數(shù)點(diǎn)規(guī)定在符號(hào)位和數(shù)據(jù)位之間,而把整數(shù)位作為符號(hào)位,分別用0、1來(lái)表示正、負(fù),數(shù)的本身只有小數(shù)部分,即尾數(shù)。這是由于經(jīng)過(guò)定點(diǎn)數(shù)的乘法后,所得結(jié)果的小數(shù)點(diǎn)位置是不確定的,除非兩個(gè)乘數(shù)都是小數(shù)或整數(shù)。對(duì)于加法運(yùn)算來(lái)說(shuō),小數(shù)點(diǎn)的位置是固定的。這樣,數(shù)x的定點(diǎn)數(shù)可表示為:x=aB-1?aB-2...a1a0(5-4)式中,aB-1為符號(hào)位,B為數(shù)據(jù)的位寬,表示寄存器的長(zhǎng)度為B位。定點(diǎn)數(shù)在整個(gè)運(yùn)算過(guò)程中,所有運(yùn)算結(jié)果的絕對(duì)值不超過(guò)1,否則會(huì)出現(xiàn)溢出。但在實(shí)際問(wèn)題中,運(yùn)算的中間變量或結(jié)果有可能超過(guò)1,為使運(yùn)算正確,通常對(duì)運(yùn)算過(guò)程中的各數(shù)乘一個(gè)比例因子,以避免溢出現(xiàn)象的發(fā)生。5.1.2定點(diǎn)數(shù)的三種形式定點(diǎn)數(shù)有原碼、反碼和補(bǔ)碼三種表示方法,這三種表示方法在FPGA設(shè)計(jì)中使用得十分普遍,下面分別進(jìn)行討論。1.原碼表示法原碼表示法是指符號(hào)位加絕對(duì)值的表示法。如前所述,F(xiàn)PGA中的定點(diǎn)數(shù)通常取絕對(duì)值小于1,也就是說(shuō)小數(shù)點(diǎn)通常位于符號(hào)位與尾數(shù)之間。符號(hào)位通常用0表示正號(hào),用1表示負(fù)號(hào)。例如,二進(jìn)制數(shù)(x)2=0?110表示+0.75,(x)2=1?110表示-0.75。如果已知原碼各位的值,則它對(duì)應(yīng)的十進(jìn)制數(shù)可表示為:反過(guò)來(lái)講,如果已知絕對(duì)值小于1的十進(jìn)制數(shù),如何轉(zhuǎn)換成Bbit的二進(jìn)制原碼呢?利用MATLAB提供的整數(shù)轉(zhuǎn)二進(jìn)制函數(shù)dec2bin()可以很容易獲取轉(zhuǎn)換結(jié)果。由于函數(shù)dec2bin()只能將正整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),這時(shí)轉(zhuǎn)換的二進(jìn)制數(shù)的小數(shù)點(diǎn)位于最后。也就是說(shuō),轉(zhuǎn)換后的二進(jìn)制數(shù)也為正整數(shù),因此對(duì)絕對(duì)值小于1的十進(jìn)制數(shù)用函數(shù)dec2bin()轉(zhuǎn)換之前需做一些簡(jiǎn)單的變換,即先需要將十進(jìn)制小數(shù)乘以一個(gè)比例因子2B-1,并進(jìn)行四舍五入操作取整。轉(zhuǎn)換函數(shù)的格式為:需要說(shuō)明的是,十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)存在量化誤差,其誤差大小由二進(jìn)制數(shù)的位數(shù)決定。2.反碼表示法正數(shù)的反碼與原碼相同。負(fù)數(shù)的反碼為原碼除了符號(hào)位的所有位取反,即可得到負(fù)數(shù)的反碼。例如,十進(jìn)制數(shù)-0.75的二進(jìn)制原碼表示為(x)2=1?110,其反碼為1?001。3.補(bǔ)碼表示法正數(shù)的補(bǔ)碼、反碼及原碼完全相同。負(fù)數(shù)的補(bǔ)碼與反碼之間有一個(gè)簡(jiǎn)單的換算關(guān)系:補(bǔ)碼等于反碼在最低位加1。例如,十進(jìn)制數(shù)-0.75的二進(jìn)制原碼為1?110,反碼為1?001,其補(bǔ)碼為1?010。值得一提的是,如果將二進(jìn)制數(shù)的符號(hào)位定在最右邊,即二進(jìn)制數(shù)表示整數(shù),則負(fù)數(shù)的補(bǔ)碼與負(fù)數(shù)絕對(duì)值之間也有一個(gè)簡(jiǎn)單的運(yùn)算關(guān)系:將補(bǔ)碼當(dāng)成正整數(shù),補(bǔ)碼的整數(shù)值加上原碼絕對(duì)值的整數(shù)值為2B。還是上面相同的例子,十進(jìn)制數(shù)-0.75的二進(jìn)制原碼為1?110,反碼為1?001,其補(bǔ)碼為1?010。補(bǔ)碼1?010的符號(hào)位定在最右邊,且當(dāng)成正整數(shù)1010?,十進(jìn)制數(shù)為10,二進(jìn)制原碼1?110的符號(hào)位定在最右邊,且取絕對(duì)值的整數(shù)0110?,十進(jìn)制數(shù)為6,則10+6=16=24。在二進(jìn)制數(shù)的運(yùn)算過(guò)程中,補(bǔ)碼最重要的特性是減法可以用加法來(lái)實(shí)現(xiàn)。同樣,將十進(jìn)制數(shù)轉(zhuǎn)換成補(bǔ)碼形式的二進(jìn)制數(shù)也可以利用函數(shù)dec2bin()完成。轉(zhuǎn)換函數(shù)的格式為:原碼的優(yōu)點(diǎn)是乘除運(yùn)算方便,無(wú)論正數(shù)還是負(fù)數(shù),乘、除運(yùn)算都一樣,并以符號(hào)位決定結(jié)果的正負(fù)號(hào);若做加法則需要判斷兩個(gè)數(shù)符號(hào)是否相同;若做減法,還需要判斷兩個(gè)數(shù)絕對(duì)值的大小,用大數(shù)減小數(shù)。補(bǔ)碼的優(yōu)點(diǎn)是加法運(yùn)算方便,無(wú)論正數(shù)還是負(fù)數(shù)均可直接加,且符號(hào)位同樣參與運(yùn)算,如果符號(hào)位發(fā)生進(jìn)位,把進(jìn)位的1去掉,余下的即結(jié)果。4.原碼與補(bǔ)碼的運(yùn)算對(duì)比由于正數(shù)的原碼和補(bǔ)碼完全相同,因此對(duì)于加法運(yùn)算來(lái)講,原碼和補(bǔ)碼的運(yùn)算方式也完全相同。補(bǔ)碼的運(yùn)算優(yōu)勢(shì)主要體現(xiàn)在減法上,我們以一個(gè)具體的例子來(lái)分析采用補(bǔ)碼進(jìn)行減法運(yùn)算的優(yōu)勢(shì),在進(jìn)行分析之前,先要明確的是,在電路中實(shí)現(xiàn)比較、加法、減法等運(yùn)算時(shí),都需要占用相應(yīng)的硬件資源,且需要耗費(fèi)一定的時(shí)間。因此,完成相同的運(yùn)算,所需的運(yùn)算步驟越少,運(yùn)算效率就越高。例如,對(duì)4bit數(shù)據(jù)A和B進(jìn)行減法運(yùn)算,如果采用原碼進(jìn)行運(yùn)算,則首先需要比較A和B的大?。ㄒ淮伪容^運(yùn)算),然后用大數(shù)減去小數(shù)(一次減法運(yùn)算),最后根據(jù)對(duì)符號(hào)位的判斷和減法的結(jié)果得到最終的數(shù)值(對(duì)數(shù)據(jù)符號(hào)位的判斷和減法結(jié)果進(jìn)行合并處理),因此一共需要3個(gè)步驟。另外,在程序中通常需要同時(shí)進(jìn)行加法和減法運(yùn)算,由于加法和減法運(yùn)算的規(guī)則不同,因此電路中需要同時(shí)具備能進(jìn)行加法和減法運(yùn)算的硬件結(jié)構(gòu)單元。如果采用補(bǔ)碼進(jìn)行運(yùn)算,則只需要將所有的輸入數(shù)據(jù)轉(zhuǎn)換成補(bǔ)碼,后續(xù)的加法和減法運(yùn)算規(guī)則相同,不僅可以減少運(yùn)算步驟,而且電路中僅需要能夠進(jìn)行加法運(yùn)算的硬件結(jié)構(gòu)單元即可,因此運(yùn)算的效率更高。假設(shè)4bit的數(shù)A和B,其中A的值為6,B的值為-5,則其二進(jìn)制補(bǔ)碼分別為A補(bǔ)(0110)、B補(bǔ)(1011),按照二進(jìn)制逢二進(jìn)一的規(guī)則完成加運(yùn)算,得到10001,舍去最高位1,取低4bit的數(shù),可得到0001,即十進(jìn)制數(shù)1,結(jié)果正確,運(yùn)算過(guò)程如圖5-2(a)所示。假設(shè)A的值為-6,B的值為5,則其二進(jìn)制補(bǔ)碼分別為A補(bǔ)(1010)、B補(bǔ)(0101),按照二進(jìn)制逢二進(jìn)一的規(guī)則完成加運(yùn)算,得到1111,即十進(jìn)制數(shù)-1,結(jié)果正確,運(yùn)算過(guò)程如圖5-2(b)所示。圖5-2采用二進(jìn)制補(bǔ)碼進(jìn)行加法運(yùn)算的過(guò)程從上面的例子可以看出,當(dāng)采用補(bǔ)碼時(shí),無(wú)論加法運(yùn)算還是減法運(yùn)算,均可通過(guò)加法運(yùn)算來(lái)實(shí)現(xiàn),這對(duì)電路的設(shè)計(jì)是十分方便的。5.1.3浮點(diǎn)數(shù)的表示1.浮點(diǎn)數(shù)的定義及標(biāo)準(zhǔn)浮點(diǎn)數(shù)是屬于有理數(shù)中某特定子集的數(shù)的數(shù)字表示,在計(jì)算機(jī)中用來(lái)近似表示任意某個(gè)實(shí)數(shù)。具體而言,這個(gè)實(shí)數(shù)由一個(gè)整數(shù)或定點(diǎn)數(shù)(即尾數(shù))乘以某個(gè)基數(shù)的整數(shù)次冪得到,這種表示方法類似于基數(shù)為10的科學(xué)記數(shù)法。一個(gè)浮點(diǎn)數(shù)A可以用兩個(gè)數(shù)M和e來(lái)表示,即A=M×be。在任意一個(gè)這樣的數(shù)字表示系統(tǒng)中,需要確定兩個(gè)參數(shù):基數(shù)b(數(shù)字表示系統(tǒng)的基)和精度B(使用多少位來(lái)存儲(chǔ)要表示的數(shù)字)。M(即尾數(shù))是B位二進(jìn)制數(shù),如果M的第一位是非0整數(shù),則M稱為規(guī)格化的數(shù)。一些數(shù)據(jù)格式使用一個(gè)單獨(dú)的符號(hào)位S(代表+或者-)來(lái)表示正或負(fù),這樣m必須是正的。e在浮點(diǎn)數(shù)中表示基的指數(shù),采用這種表示方法,可以在某個(gè)固定長(zhǎng)度的存儲(chǔ)空間內(nèi)表示定點(diǎn)數(shù)無(wú)法表示的更大范圍的數(shù)。此外,浮點(diǎn)數(shù)表示法通常還包括一些特別的數(shù)值,如+∞和-∞(正無(wú)窮大和負(fù)無(wú)窮大),以及NaN(NotaNumber,意為不是數(shù))等。無(wú)窮大用于數(shù)太大而無(wú)法表示的場(chǎng)合,NaN則表示非法操作或者出現(xiàn)一些無(wú)法定義的結(jié)果。大部分計(jì)算機(jī)采用二進(jìn)制(b=2)的表示方法。位(bit)是衡量浮點(diǎn)數(shù)所需存儲(chǔ)空間的單位,通常為32bit或64bit,分別稱為單精度和雙精度。一些計(jì)算機(jī)提供更大的浮點(diǎn)數(shù),例如,Intel公司的浮點(diǎn)數(shù)運(yùn)算單元Intel8087協(xié)處理器(或集成了該協(xié)處理器的其他產(chǎn)品)可提供80bit的浮點(diǎn)數(shù),這種長(zhǎng)度的浮點(diǎn)數(shù)通常用于存儲(chǔ)浮點(diǎn)數(shù)運(yùn)算的中間結(jié)果。還有一些系統(tǒng)提供128bit的浮點(diǎn)數(shù)(通常用軟件實(shí)現(xiàn))。在IEEE754標(biāo)準(zhǔn)之前,業(yè)界并沒(méi)有一個(gè)統(tǒng)一的浮點(diǎn)數(shù)標(biāo)準(zhǔn),很多計(jì)算機(jī)制造商都設(shè)計(jì)了自己的浮點(diǎn)數(shù)規(guī)則和運(yùn)算細(xì)節(jié)。那時(shí),實(shí)現(xiàn)的速度和簡(jiǎn)易性比數(shù)字的精確性更受重視,這給代碼的可移植性造成了不小的困難。直到1985年,Intel公司計(jì)劃為它的8086微處理器引進(jìn)一種浮點(diǎn)數(shù)協(xié)處理器時(shí),聘請(qǐng)了加利福尼亞大學(xué)伯克利分校最優(yōu)秀的數(shù)值分析家之一—WilliamKahan教授來(lái)為8087FPU設(shè)計(jì)浮點(diǎn)數(shù)格式。WilliamKahan又找來(lái)兩個(gè)專家來(lái)協(xié)助他,于是就有了KCS組合(KahnCoonanandStone)并共同完成了Intel浮點(diǎn)數(shù)格式的設(shè)計(jì)。Intel的浮點(diǎn)數(shù)格式完成得如此出色,以至于IEEE決定采用一個(gè)非常接近KCS的方案作為IEEE的標(biāo)準(zhǔn)浮點(diǎn)數(shù)格式。IEEE于1985年制定了二進(jìn)制浮點(diǎn)數(shù)運(yùn)算標(biāo)準(zhǔn)(BinaryFloating-PointArithmetic)IEEE754,該標(biāo)準(zhǔn)限定指數(shù)的底為2,同年被美國(guó)引用為ANSI標(biāo)準(zhǔn)。目前,幾乎所有計(jì)算機(jī)都支持該標(biāo)準(zhǔn),大大改善了科學(xué)應(yīng)用程序的可移植性。考慮到IBM370系統(tǒng)的影響,IEEE于1987年推出了與底數(shù)無(wú)關(guān)的二進(jìn)制浮點(diǎn)數(shù)運(yùn)算標(biāo)準(zhǔn)IEEE854,同年該標(biāo)準(zhǔn)也被美國(guó)引用為ANSI標(biāo)準(zhǔn)。1989年,IEC批準(zhǔn)了IEEE754/854為國(guó)際標(biāo)準(zhǔn)IEC559:1989,后來(lái)經(jīng)修訂,標(biāo)準(zhǔn)號(hào)改為IEC60559。2.單精度浮點(diǎn)數(shù)格式IEEE754標(biāo)準(zhǔn)定義了浮點(diǎn)數(shù)的格式,包括部分特殊值的表示(無(wú)窮大和NaN),同時(shí)給出了對(duì)這些數(shù)值進(jìn)行浮點(diǎn)數(shù)操作的規(guī)定;制定了4種取整模式和5種例外(Exception),包括何時(shí)會(huì)產(chǎn)生例外,以及具體的處理方法。IEEE754規(guī)定了4種浮點(diǎn)數(shù)的表示格式:?jiǎn)尉龋?2bit浮點(diǎn)數(shù))、雙精度(64bit浮點(diǎn)數(shù))、單精度擴(kuò)展(≥43bit,不常用)、雙精度擴(kuò)展(≥79bit,通常采用80bit實(shí)現(xiàn))。事實(shí)上,很多計(jì)算機(jī)編程語(yǔ)言都遵從了這個(gè)標(biāo)準(zhǔn)(包括可選部分)。例如,C語(yǔ)言在IEEE754發(fā)布之前就已存在,現(xiàn)在它能完美支持IEEE754標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)的運(yùn)算,雖然它早已有另外的浮點(diǎn)實(shí)現(xiàn)方式。單精度浮點(diǎn)數(shù)的格式如圖5-3所示。圖5-3單精度浮點(diǎn)數(shù)的格式符號(hào)位S(Sign)占1bit,0代表正號(hào),1代表負(fù)號(hào);指數(shù)E(Exponent)占8bit,E的取值范圍為0~255(無(wú)符號(hào)整數(shù)),實(shí)際數(shù)值e=E-127,有時(shí)E也稱為移碼,或不恰當(dāng)?shù)胤Q為階碼(階碼實(shí)際應(yīng)為e);尾數(shù)M(Mantissa)占23bit,M也稱為有效數(shù)字位(Significant)或系數(shù)位(Coefficient),甚至被稱為小數(shù)。在一般情況下,m=(1.M)2,使得實(shí)際的作用范圍為1≤尾數(shù)<2。為了對(duì)溢出進(jìn)行處理,以及擴(kuò)展對(duì)接近0的極小數(shù)值的處理能力,IEEE754對(duì)M做了一些額外規(guī)定。(1)0值:以指數(shù)E、尾數(shù)M全0來(lái)表示0值。當(dāng)符號(hào)位S變化時(shí),實(shí)際存在正0和負(fù)0兩個(gè)內(nèi)部表示,其值都等于0。(2)E=255、M=0時(shí),表示無(wú)窮大(Infinity或∞),根據(jù)符號(hào)位S的不同,又有+∞、-∞。(3)NaN:E=255、M不為0時(shí),表示NaN。浮點(diǎn)數(shù)所表示的具體值可用下面的公式表示:V=(-1)S×2E-127×(1.M)(5-6)式中,尾數(shù)1.M中的1為隱藏位。還需要特別注意的是,雖然浮點(diǎn)數(shù)的表示范圍及精度與定點(diǎn)數(shù)相比有了很大的改善,但因?yàn)楦↑c(diǎn)數(shù)畢竟也是以有限的位(如32bit)來(lái)反映無(wú)限的實(shí)數(shù)集合,因此大多數(shù)情況下都是一個(gè)近似值。表5-1是單精度浮點(diǎn)數(shù)與實(shí)數(shù)之間的對(duì)應(yīng)關(guān)系表。表5-1單精度浮點(diǎn)數(shù)與實(shí)數(shù)之間的對(duì)應(yīng)關(guān)系5.1.4自定義的浮點(diǎn)數(shù)格式與定點(diǎn)數(shù)相比,浮點(diǎn)數(shù)雖然可以表示更大范圍、更高精度的實(shí)數(shù),然而在FPGA中進(jìn)行浮點(diǎn)數(shù)運(yùn)算時(shí)卻需要占用成倍的硬件資源。例如,加法運(yùn)算,兩個(gè)定點(diǎn)數(shù)直接相加即可,而浮點(diǎn)數(shù)的加法卻需要以下更為繁雜的運(yùn)算步驟:(1)對(duì)階操作:比較指數(shù)大小,對(duì)指數(shù)小的操作數(shù)的尾數(shù)進(jìn)行移位,完成尾數(shù)的對(duì)階操作。(2)尾數(shù)相加:將對(duì)階后的尾數(shù)進(jìn)行加操作。(3)規(guī)格化:規(guī)格化有效位并且根據(jù)移位的方向和位數(shù)修改最終的階碼。上述不僅運(yùn)算會(huì)成倍地消耗FPGA內(nèi)部的硬件資源,也會(huì)大幅降低系統(tǒng)的運(yùn)算速度。對(duì)于浮點(diǎn)數(shù)的乘法操作來(lái)說(shuō),一般需要以下的運(yùn)算步驟:(1)指數(shù)相加:完成兩個(gè)操作數(shù)的指數(shù)加法運(yùn)算。(2)尾數(shù)調(diào)整:將尾數(shù)f調(diào)整為1.f的補(bǔ)碼格式。(3)尾數(shù)相乘:完成兩個(gè)操作數(shù)的尾數(shù)相乘運(yùn)算。(4)規(guī)格化:根據(jù)尾數(shù)運(yùn)算結(jié)果調(diào)整指數(shù)位,并對(duì)尾數(shù)進(jìn)行舍入截位操作,規(guī)格化輸出結(jié)果。浮點(diǎn)數(shù)乘法器的運(yùn)算速度主要由FPGA內(nèi)部集成的乘法器決定。如果將24bit的尾數(shù)修改為18bit的尾數(shù),則可在盡量保證運(yùn)算精度的前提下最大限度地提高浮點(diǎn)乘法數(shù)運(yùn)算的速度,同時(shí)也可大量減少所需的乘法器資源(大部分FPGA內(nèi)部的乘法器IP核均為18bit×18bit的。2個(gè)24bit數(shù)的乘法操作需要占用4個(gè)18bit×18bit的乘法器IP核,2個(gè)18bit數(shù)的乘法操作只需占用1個(gè)18bit×18bit的乘法器IP核)。IEEE標(biāo)準(zhǔn)中尾數(shù)設(shè)置的隱藏位主要是考慮節(jié)約寄存器資源,而FPGA內(nèi)部具有豐富的寄存器資源,如直接將尾數(shù)表示成18bit的補(bǔ)碼格式,則可去除尾數(shù)調(diào)整的運(yùn)算,也可以減少一級(jí)流水線操作。文獻(xiàn)[9]根據(jù)FPGA內(nèi)部的結(jié)構(gòu)特點(diǎn)定義一種新的浮點(diǎn)數(shù)格式,如圖5-4所示,圖中,e為8bit有符號(hào)數(shù)(-128≤e≤127);f為18bit有符號(hào)小數(shù)(-1≤f<1)。自定義浮點(diǎn)數(shù)所表示的具體值可用下面的通式表示。V=f×2e(5-7)圖5-4一種適合FPGA實(shí)現(xiàn)的浮點(diǎn)數(shù)格式為便于數(shù)據(jù)規(guī)格化輸出及運(yùn)算,規(guī)定數(shù)值1的表示方法為指數(shù)為0,尾數(shù)為01_1111_1111_1111_1111;數(shù)值0的表示方法是指數(shù)為-128,尾數(shù)為0。這種自定義浮點(diǎn)數(shù)格式與單精度浮點(diǎn)數(shù)格式的區(qū)別在于:自定義浮點(diǎn)數(shù)格式將原來(lái)的符號(hào)位與尾數(shù)合并成18bit的補(bǔ)碼格式定點(diǎn)小數(shù),表示精度有所下降,卻可大大節(jié)約乘法器資源(由4個(gè)18bit×18bit乘法器IP核減少到1個(gè)),從而有效減少運(yùn)算步驟并提高運(yùn)算速度(由二級(jí)18×18乘法運(yùn)算降為一級(jí)運(yùn)算)。表5-2是幾個(gè)自定義浮點(diǎn)數(shù)與實(shí)數(shù)之間的對(duì)應(yīng)關(guān)系表。表5-2自定義浮點(diǎn)數(shù)與實(shí)數(shù)之間的對(duì)應(yīng)關(guān)系5.2FPGA中的四則運(yùn)算5.2.1兩個(gè)操作數(shù)的加法運(yùn)算如5.1節(jié)所述,F(xiàn)PGA中的二進(jìn)制數(shù)可以分為定點(diǎn)數(shù)和浮點(diǎn)數(shù)兩種格式,雖然浮點(diǎn)數(shù)的加法和減法運(yùn)算相對(duì)于定點(diǎn)數(shù)而言,在運(yùn)算步聚和實(shí)現(xiàn)難度上都要復(fù)雜得多,但浮點(diǎn)數(shù)的加法和減法運(yùn)算仍然是通過(guò)將浮點(diǎn)數(shù)分解為定點(diǎn)數(shù)運(yùn)算以及移位等步驟來(lái)實(shí)現(xiàn)的。因此,本節(jié)只針對(duì)定點(diǎn)數(shù)運(yùn)算進(jìn)行分析。在進(jìn)行FPGA設(shè)計(jì)時(shí),常用的硬件描述語(yǔ)言是VerilogHDL和VHDL,本書使用的是VerilogHDL,因此本節(jié)只介紹VerilogHDL對(duì)定點(diǎn)數(shù)的運(yùn)算及處理方法。VerilogHDL中最常用的數(shù)據(jù)類型是wire和reg。當(dāng)需要進(jìn)行數(shù)據(jù)運(yùn)算時(shí),VerilogHDL如何判斷二進(jìn)制數(shù)的小數(shù)位、有符號(hào)數(shù)表示形式等信息呢?在VerilogHDL中,所有二進(jìn)制數(shù)均當(dāng)成整數(shù)來(lái)處理,也就是說(shuō)小數(shù)點(diǎn)均在最低位的右邊。如果要在程序中進(jìn)行二進(jìn)制小數(shù)的運(yùn)算,那么該如何處理呢?其實(shí),在VerilogHDL中,定點(diǎn)數(shù)的小數(shù)點(diǎn)位可由程序設(shè)計(jì)者隱性標(biāo)定。例如,對(duì)于兩個(gè)二進(jìn)制數(shù)00101和00110,當(dāng)進(jìn)行加法運(yùn)算時(shí),VerilogHDL的編譯器按二進(jìn)制規(guī)則逐位相加,結(jié)果為01011。如果設(shè)計(jì)者將這兩個(gè)二進(jìn)制數(shù)看成無(wú)符號(hào)整數(shù),則表示5+6=11;如果將這兩個(gè)二進(jìn)制數(shù)的小數(shù)點(diǎn)放在最高位與次高位之間,即0?0101和0?0110,則表示0.3125+0.375=0.6875。需要注意的是,與十進(jìn)制數(shù)運(yùn)算規(guī)則相同,在進(jìn)行二進(jìn)制數(shù)的加法和減法運(yùn)算時(shí),參與運(yùn)算的兩個(gè)二進(jìn)制數(shù)的小數(shù)點(diǎn)位置必須對(duì)齊,且結(jié)果的小數(shù)點(diǎn)位置也必須相同。仍然以上面的兩個(gè)二進(jìn)制數(shù)(00101和00110)為例進(jìn)行說(shuō)明,在進(jìn)行加法運(yùn)算時(shí),如果這兩個(gè)二進(jìn)制數(shù)的小數(shù)點(diǎn)位置不同,如分別為0?0101和00?110,則代表的十進(jìn)制數(shù)分別為0.3125和0.75。如果這兩個(gè)二進(jìn)制數(shù)不經(jīng)過(guò)處理直接相加,則VerilogHDL的編譯器會(huì)按二進(jìn)制數(shù)運(yùn)算的規(guī)則逐位相加,其結(jié)果為01011。如果小數(shù)點(diǎn)位置與第一個(gè)二進(jìn)制數(shù)相同,則表示0.6875;如果小數(shù)點(diǎn)位置與第二個(gè)二進(jìn)制數(shù)相同,則表示1.375,顯然結(jié)果不正確。為了保證運(yùn)算的正確性,需要在第二個(gè)二進(jìn)制數(shù)的末位補(bǔ)0,即00?1100,使得兩個(gè)二進(jìn)制數(shù)的小數(shù)部分的位寬相同,這時(shí)再直接相加兩個(gè)二進(jìn)制數(shù),可得到01?1001,對(duì)應(yīng)的十進(jìn)制數(shù)為1.0625,結(jié)果正確。如果設(shè)計(jì)者將參與運(yùn)算的二進(jìn)制數(shù)看成無(wú)符號(hào)整數(shù),則不需要進(jìn)行小數(shù)位擴(kuò)展,因?yàn)閂erilogHDL的編譯器會(huì)自動(dòng)將參加運(yùn)算的二進(jìn)制數(shù)的最低位對(duì)齊后進(jìn)行運(yùn)算。VerilogHDL如何表示負(fù)數(shù)呢?例如,二進(jìn)制數(shù)1111,在程序中是表示15還是-1?方法十分簡(jiǎn)單。在聲明端口或信號(hào)時(shí),默認(rèn)的是無(wú)符號(hào)數(shù),如果需要將某個(gè)數(shù)指定為有符號(hào)數(shù),則只需在聲明時(shí)增加關(guān)鍵字signed即可。例如,“wiresigned[7:0]number;”表示將number聲明為8bit的有符號(hào)數(shù),在對(duì)其進(jìn)行運(yùn)算時(shí)自動(dòng)按照有符號(hào)數(shù)來(lái)處理。這里說(shuō)的無(wú)符號(hào)數(shù)是指所有二進(jìn)制數(shù)均是正整數(shù),對(duì)于Bbit的二進(jìn)制數(shù):x=aB-1aB-2...a1a0(5-8)將其轉(zhuǎn)換成十進(jìn)制數(shù),可得:有符號(hào)數(shù)則是指所有二進(jìn)制數(shù)均是補(bǔ)碼形式的整數(shù),對(duì)于Bbit的二進(jìn)制數(shù),將轉(zhuǎn)換成十進(jìn)制數(shù),可得:有讀者可能要問(wèn),如果在設(shè)計(jì)文件中要同時(shí)使用有符號(hào)數(shù)和無(wú)符號(hào)數(shù)進(jìn)行運(yùn)算,那么該怎么辦呢?為了更好地說(shuō)明VerilogHDL對(duì)二進(jìn)制數(shù)表示形式的判斷方法,我們來(lái)看一個(gè)具體的實(shí)例。實(shí)例5-1:在VerilogHDL中同時(shí)使用有符號(hào)數(shù)及無(wú)符號(hào)數(shù)進(jìn)行運(yùn)算在ISE14.7中編寫VerilogHDL程序文件,在該文件中同時(shí)使用有符號(hào)數(shù)及無(wú)符號(hào)數(shù)參與運(yùn)算,并進(jìn)行仿真。由于該程序文件十分簡(jiǎn)單,這里直接給出代碼。圖5-5為該程序的RTL(寄存器傳輸級(jí))原理圖,從圖中可以看出signed_out、unsigned_out分別以有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的形式進(jìn)行相加后的結(jié)構(gòu),兩種加法運(yùn)算的結(jié)果實(shí)際上是一個(gè)信號(hào),且加法器并沒(méi)有標(biāo)明是否為有符號(hào)數(shù)運(yùn)算。圖5-5有符號(hào)數(shù)加法及無(wú)符號(hào)數(shù)加法RTL原理圖圖5-6所示為程序的仿真波形圖,從圖中可以看出,signed_out及unsigned_out的輸出結(jié)果完全相同,這是什么原因呢?相同的輸入數(shù)據(jù),進(jìn)行無(wú)符號(hào)數(shù)運(yùn)算和有符號(hào)數(shù)運(yùn)算的結(jié)果居然沒(méi)有任何區(qū)別!既然如此,何必在程序中區(qū)分有符號(hào)數(shù)及無(wú)符號(hào)數(shù)呢?原因其實(shí)十分簡(jiǎn)單,對(duì)于加法和減法運(yùn)算,無(wú)論有符號(hào)數(shù)還是無(wú)符號(hào)數(shù)參與運(yùn)算,其結(jié)果均完全相同,因?yàn)槎M(jìn)制數(shù)的運(yùn)算規(guī)則是完全相同的。如果將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),就可以看出兩者的差別了。有符號(hào)數(shù)及無(wú)符號(hào)數(shù)加法運(yùn)算結(jié)果如表5-3所示。圖5-6有符號(hào)數(shù)加法及無(wú)符號(hào)數(shù)加法的仿真波形圖表5-3有符號(hào)數(shù)及無(wú)符號(hào)數(shù)加法運(yùn)算結(jié)果分析表5-3,結(jié)合二進(jìn)制數(shù)的運(yùn)算規(guī)則可以得出以下幾點(diǎn)結(jié)論:(1)Bbit的二進(jìn)制數(shù),如當(dāng)成無(wú)符號(hào)整數(shù),表示的范圍為0~2B-1;如當(dāng)成有符號(hào)整數(shù),表示的范圍為-2B-1~2B-1-1。(2)如果二進(jìn)制數(shù)的表示范圍沒(méi)有溢出,將運(yùn)算數(shù)據(jù)均看成無(wú)符號(hào)數(shù)或有符號(hào)數(shù),則運(yùn)算結(jié)果正確。(3)兩個(gè)Bbit的二進(jìn)制數(shù)進(jìn)行加法和減法運(yùn)算,若要運(yùn)算結(jié)果不溢出,則需要B+1bit的數(shù)存放運(yùn)算結(jié)果。(4)兩個(gè)二進(jìn)制數(shù)進(jìn)行加法和減法運(yùn)算,只要輸入數(shù)據(jù)相同,不論有符號(hào)數(shù)還是無(wú)符號(hào)數(shù),其運(yùn)算結(jié)果的二進(jìn)制數(shù)就完全相同。雖然在二進(jìn)制數(shù)的加法和減法運(yùn)算中,不論有符號(hào)數(shù)還是無(wú)符號(hào)數(shù),兩個(gè)二進(jìn)制數(shù)的運(yùn)算結(jié)果的二進(jìn)制數(shù)形式完全相同,但在VerilogHDL中,仍然有必要根據(jù)設(shè)計(jì)需要采用關(guān)鍵字signed對(duì)信號(hào)進(jìn)行聲明。例如,在進(jìn)行比較運(yùn)算時(shí),對(duì)于無(wú)符號(hào)數(shù)據(jù),1000大于0100;對(duì)于有符號(hào)數(shù)據(jù),1000小于0100。5.2.2多個(gè)操作數(shù)的加法運(yùn)算在實(shí)際的工程設(shè)計(jì)中,經(jīng)常會(huì)遇到多于兩個(gè)操作數(shù)的加法運(yùn)算(由于補(bǔ)碼的加法和減法運(yùn)算相同,因此僅討論加法運(yùn)算)由于二進(jìn)制數(shù)位寬的限制,每個(gè)固定位寬的二進(jìn)制數(shù)所能表示的范圍是有限的,要完成多個(gè)操作數(shù)的加法運(yùn)算,存放運(yùn)算結(jié)果的數(shù)據(jù)位寬必須能夠表示運(yùn)算的結(jié)果。例如,兩個(gè)10bit的有符號(hào)數(shù)A和B進(jìn)行加法運(yùn)算,則運(yùn)算結(jié)果的最小值為-210,運(yùn)算結(jié)果的最大值為210-1,因此需要用11bit的數(shù)(表示范圍為-210~210-1)來(lái)表示。依次類推,如果有3~4個(gè)10bit的有符號(hào)數(shù)進(jìn)行加法運(yùn)算,則需要用12bit的數(shù)表示運(yùn)算結(jié)果;如果有5~8個(gè)10bit的有符號(hào)數(shù)進(jìn)行加法運(yùn)算,需要用13bit的數(shù)表示運(yùn)算結(jié)果。在進(jìn)行FPGA設(shè)計(jì)中還經(jīng)常遇到這樣一種情況,例如,有3個(gè)4bit的數(shù)參與加法運(yùn)算,前兩個(gè)數(shù)的加法結(jié)果需要用5bit的數(shù)存儲(chǔ),但通過(guò)設(shè)計(jì)能保證最終的運(yùn)算結(jié)果范圍為-8~7,即只需用4bit的數(shù)表示,在設(shè)計(jì)電路時(shí),是否需要采用5bit的數(shù)存儲(chǔ)中間運(yùn)算結(jié)果呢?在進(jìn)行FPGA設(shè)計(jì)時(shí),增加位寬意味增加寄存器資源,工程師總是希望盡量用最少的邏輯資源完成設(shè)計(jì)。為了弄清楚這個(gè)問(wèn)題,我們通過(guò)具體的例子來(lái)驗(yàn)證一下。假設(shè)3個(gè)4bit的數(shù)進(jìn)行加法運(yùn)算:A=7、B=3、C=-4,A+B+C=6。根據(jù)二進(jìn)制數(shù)的運(yùn)算規(guī)則,首先計(jì)算D=A+B=10,如果中間結(jié)果也采用4bit的數(shù)表法,則結(jié)果為-6(去掉最高位),即D的值為-6,再計(jì)算D+C=E=-10,由于結(jié)果用4bit的數(shù)表示,去掉最高位符位號(hào),值為6,即E=6,結(jié)果正確。上面的運(yùn)算過(guò)程如圖5-7所示。圖5-73個(gè)4bit的數(shù)進(jìn)行加法運(yùn)算從運(yùn)算結(jié)果看,如果采用補(bǔ)碼進(jìn)行運(yùn)算,即使中間運(yùn)算結(jié)果需要用5bit的數(shù)表示,只要最終結(jié)果僅需用4bit的數(shù)表示,則在實(shí)際電路設(shè)計(jì)時(shí),中間運(yùn)算結(jié)果僅用4bit的數(shù)運(yùn)算,也能最終得到正確的結(jié)果。雖然上面的例子只是一個(gè)特例,但得出的結(jié)論可以推廣到一般應(yīng)用,即:當(dāng)多個(gè)數(shù)進(jìn)行加法運(yùn)算時(shí),如果最終的運(yùn)算結(jié)果需要用Nbit的數(shù)表示,則整個(gè)運(yùn)算過(guò)程,包括中間運(yùn)算結(jié)果均用Nbit的數(shù)表示,不需考慮中間變量運(yùn)算溢出的問(wèn)題。5.2.3采用移位相加法實(shí)現(xiàn)乘法運(yùn)算加法及減法運(yùn)算在數(shù)字電路中實(shí)現(xiàn)相對(duì)較為簡(jiǎn)單,在采用綜合工具進(jìn)行設(shè)計(jì)綜合時(shí),RTL電路圖中加法和減法運(yùn)算會(huì)被直接綜合成加法器或減法器。乘法運(yùn)算在其他軟件編程語(yǔ)言中實(shí)現(xiàn)也十分簡(jiǎn)單,但用門電路、加法器、觸發(fā)器等基本邏輯單元實(shí)現(xiàn)乘法運(yùn)算卻不是一件容易的事。在采用Xilinx公司FPGA/CPLD進(jìn)行設(shè)計(jì)時(shí),如果選用的目標(biāo)器件(如FPGA)內(nèi)部集成了專用的乘法器IP核,則VerilogHDL中的乘法運(yùn)算在綜合成電路時(shí)將直接綜合成乘法器,否則綜合成由LUT等基本元件組成的乘法電路。與加法和減法運(yùn)算相比,乘法器需要占用成倍的硬件資源。當(dāng)然,在實(shí)際FPGA工程設(shè)計(jì)中,需要用到乘法運(yùn)算時(shí),可以盡量使用FPGA中的乘法器IP(IntellectualProperty,知識(shí)產(chǎn)權(quán))核,這種方法不僅不需要占用硬件資源,還可以達(dá)到很高的運(yùn)算速度。FPGA中的乘法器IP核是十分有限的,而乘法運(yùn)算本身又比較復(fù)雜,在采用基本邏輯單元按照乘法運(yùn)算規(guī)則實(shí)現(xiàn)乘法運(yùn)算時(shí)占用的硬件資源較多。在FPGA設(shè)計(jì)中,乘法運(yùn)算可分為信號(hào)與信號(hào)的乘法運(yùn)算,以及常數(shù)與信號(hào)的乘法運(yùn)算。對(duì)于信號(hào)與信號(hào)的乘法運(yùn)算,通常只能使用乘法器IP核來(lái)實(shí)現(xiàn);對(duì)于常數(shù)與信號(hào)的乘法運(yùn)算,可以通過(guò)移位、加法、減法運(yùn)算來(lái)實(shí)現(xiàn)。信號(hào)A與常數(shù)的乘法運(yùn)算如下:A×16=A左移4位A×20=A×16+A×4=A左移4位+A左移2位A×27=A×32-A×4-A=A左移5位-A左移2位-A需要注意的是,由于乘法運(yùn)算結(jié)果的位寬比乘數(shù)的位寬大,因此在通過(guò)移位、加法和減法運(yùn)算實(shí)現(xiàn)乘法運(yùn)算前,需要擴(kuò)展數(shù)據(jù)位寬,以免出現(xiàn)數(shù)據(jù)溢出現(xiàn)象。5.2.4采用移位相加法實(shí)現(xiàn)除法運(yùn)算在ISE14.7的VerilogHDL編譯環(huán)境中,除法、指數(shù)、求模、求余等操作均無(wú)法在VerilogHDL中直接進(jìn)行相關(guān)運(yùn)算。實(shí)際上,通過(guò)基本邏輯單元構(gòu)建這幾種運(yùn)算也是十分復(fù)雜的工作。如果要用VerilogHDL實(shí)現(xiàn)這些運(yùn)算,一種方法是使用ISE14.7提供的IP核或使用商業(yè)IP核;另一種方法是將這幾種運(yùn)算分解成加法、減法、移位等運(yùn)算來(lái)實(shí)現(xiàn)。Xilinx的FPGA一般都提供除法器IP核。對(duì)于信號(hào)與信號(hào)的除法運(yùn)算,最好的方法是采用ISE14.7提供的除法器IP核;對(duì)于除數(shù)是常量的除法運(yùn)算,則可以采取加法、減法、移位運(yùn)算來(lái)實(shí)現(xiàn)除法運(yùn)算。下面是一些信號(hào)A與常數(shù)進(jìn)行除法運(yùn)算例子。A÷2≈A右移1位A÷3≈A×(0.25+0.0625+0.0156)≈A右移2位+A右移4位+A右移6位A÷4≈A右移2位A÷5≈A×(0.125+0.0625+0.0156)≈A右移3位+A右移4位+A右移6位需要說(shuō)明的是,與普通乘法運(yùn)算不同,常數(shù)乘法通過(guò)左移運(yùn)算可以得到完全準(zhǔn)確的結(jié)果,而除數(shù)是常數(shù)的除法運(yùn)算卻不可避免地存在運(yùn)算誤差。采用分解方法的除法運(yùn)算只能得到近似正確的結(jié)果,且分解運(yùn)算的項(xiàng)數(shù)越多,精度越高。這是由FPGA的有限字長(zhǎng)效應(yīng)引起的。5.3有效數(shù)據(jù)位的計(jì)算5.3.1有效數(shù)據(jù)位的概念眾所周知,在FPGA中,每個(gè)數(shù)據(jù)都需要相應(yīng)的寄存器來(lái)存儲(chǔ),參與運(yùn)算的數(shù)據(jù)位越多,所占用的硬件資源也越多。為了確保運(yùn)算結(jié)果的正確性,或者盡量獲取較高的運(yùn)算精度,通常又不得不增加相應(yīng)的數(shù)據(jù)位。因此,為了確保硬件資源的有效利用,在工程設(shè)計(jì)中,準(zhǔn)確掌握運(yùn)算中有效數(shù)據(jù)位的長(zhǎng)度,盡量減少無(wú)效數(shù)據(jù)位參與運(yùn)算,可避免浪費(fèi)寶貴的硬件資源。所謂有效數(shù)據(jù)位,是指表示有用信息的數(shù)據(jù)位。例如,整數(shù)型的有符號(hào)二進(jìn)制數(shù)001,只需要用2bit的數(shù)即可正確表示01,最高位的符號(hào)位其實(shí)沒(méi)有表示任何信息。5.3.2加法運(yùn)算中的有效數(shù)據(jù)位在前面討論多個(gè)數(shù)的加法運(yùn)算時(shí),已涉及有效數(shù)據(jù)位的問(wèn)題。有效數(shù)據(jù)位的問(wèn)題在進(jìn)行FPGA設(shè)計(jì)時(shí)具有十分重要的意義,接下來(lái)繼續(xù)討論有效數(shù)據(jù)位與數(shù)據(jù)溢出之間的關(guān)系。先考慮2個(gè)二進(jìn)制數(shù)之間的加法運(yùn)算,對(duì)于補(bǔ)碼來(lái)說(shuō),加法和減法運(yùn)算規(guī)則相同,因此只討論加法運(yùn)算。假設(shè)數(shù)據(jù)位較大的位數(shù)為N,則加法運(yùn)算結(jié)果需要用N+1位才能保證運(yùn)算結(jié)果不溢出。也就是說(shuō),2個(gè)Nbit的二進(jìn)制數(shù)(另一個(gè)數(shù)的位寬也可以小于N)進(jìn)行加法運(yùn)算,運(yùn)算結(jié)果的有效數(shù)據(jù)位的長(zhǎng)度為N+1。如果運(yùn)算結(jié)果只能采用Nbit的數(shù)表示,那么該如何對(duì)結(jié)果進(jìn)行截位呢?截位后的結(jié)果如何保證運(yùn)算的正確性呢?下面我們以具體的例子來(lái)進(jìn)行分析。例如,2個(gè)4bit的二進(jìn)制數(shù)d1、d2進(jìn)行加法運(yùn)算,我們來(lái)看看在d1、d2取不同值時(shí)的運(yùn)算結(jié)果及截位后的結(jié)果。有效數(shù)據(jù)位截位與加法運(yùn)算結(jié)果的關(guān)系如表5-4所示。表5-4有效數(shù)據(jù)位截位與加法運(yùn)算結(jié)果的關(guān)系分析表5-4的運(yùn)算結(jié)果可知,當(dāng)2個(gè)Nbit的二進(jìn)制數(shù)進(jìn)行加法運(yùn)算時(shí),需要N+1bit的數(shù)才能獲得完全準(zhǔn)確的結(jié)果。如果采用Nbit的數(shù)存放結(jié)果,則取低N位會(huì)產(chǎn)生溢出,得出錯(cuò)誤結(jié)果,取高N位不會(huì)出現(xiàn)溢出,但運(yùn)算結(jié)果相當(dāng)于降低了1/2。前面的分析實(shí)際上是將數(shù)據(jù)均當(dāng)成整數(shù),也就是說(shuō)小數(shù)點(diǎn)位置均位于最低位的右邊。在數(shù)字信號(hào)處理中,定點(diǎn)數(shù)通常把數(shù)限制在-1~1,即把小數(shù)點(diǎn)規(guī)定在最高位和次高位之間。同樣是表5-4的例子,考慮小數(shù)運(yùn)算時(shí),運(yùn)算結(jié)果的小數(shù)點(diǎn)位置又該如何確定呢?對(duì)比表5-4中的數(shù)據(jù),可以很容易地看出,如果采用N+1bit的數(shù)表示運(yùn)算結(jié)果,則小數(shù)點(diǎn)位于次高位的右邊,不再是最高位的右邊;如果采用Nbit的數(shù)表示運(yùn)算結(jié)果,則小數(shù)點(diǎn)位于最高位的右邊。也就是說(shuō),運(yùn)算前后小數(shù)點(diǎn)右邊的數(shù)據(jù)位數(shù)(也是小數(shù)位數(shù))是恒定不變的。實(shí)際上,在VerilogHDL中,如果2個(gè)Nbit的數(shù)進(jìn)行加法運(yùn)算,為了得到N+1bit的準(zhǔn)確結(jié)果,則必須先對(duì)參加運(yùn)算的數(shù)進(jìn)行一位符號(hào)位的擴(kuò)展。5.3.3乘法運(yùn)算中的有效數(shù)據(jù)位與加法運(yùn)算一樣,乘法運(yùn)算中的乘數(shù)均采用補(bǔ)碼表示法(有符號(hào)數(shù)),這也是FPGA中最常用的數(shù)據(jù)表示方式。在理解補(bǔ)碼的相關(guān)情況后,讀者很容易得出無(wú)符號(hào)數(shù)的運(yùn)算規(guī)律。有效數(shù)據(jù)位截位與乘法運(yùn)算結(jié)果的關(guān)系如表5-5所示。表5-5有效數(shù)據(jù)位截位與乘法運(yùn)算結(jié)果的關(guān)系從表5-5可以得出幾條運(yùn)算規(guī)律:(1)當(dāng)字長(zhǎng)(也稱位寬)分別為M、N的數(shù)進(jìn)行乘法運(yùn)算時(shí),需要采用M+Nbit的數(shù)才能得到準(zhǔn)確的結(jié)果。(2)對(duì)于乘法運(yùn)算,不需要通過(guò)擴(kuò)展位數(shù)來(lái)對(duì)齊乘數(shù)的小數(shù)點(diǎn)位置。(3)當(dāng)乘數(shù)為小數(shù)時(shí),乘法結(jié)果的小數(shù)位數(shù)等于兩個(gè)乘數(shù)的小數(shù)位數(shù)之和。(4)當(dāng)需要對(duì)乘法運(yùn)算結(jié)果進(jìn)行截位時(shí),為了保證得到正確的結(jié)果,只能保留高位數(shù)據(jù)而舍去低位數(shù)據(jù),這樣相當(dāng)于降低了運(yùn)算結(jié)果的精度。(5)只有當(dāng)兩個(gè)乘數(shù)均為所能表示的最小負(fù)數(shù)(最高位為1,其余位均為0)時(shí),才有可能出現(xiàn)最高位與次高位不同的情況。也就是說(shuō),只有在這種情況下,才需要M+Nbit的數(shù)來(lái)存放準(zhǔn)確的最終結(jié)果,在其他情況下,實(shí)際上均有兩位相同的符號(hào)位,只需要M+N-1bit的數(shù)即可存放準(zhǔn)確的運(yùn)算結(jié)果。在ISE14.7中,乘法器IP核在選擇輸出數(shù)據(jù)位數(shù)時(shí),如果選擇全精度運(yùn)算,則會(huì)自動(dòng)生成M+Nbit的運(yùn)算結(jié)果。在實(shí)際工程設(shè)計(jì)中,如果預(yù)先知道某位乘數(shù)不可能出現(xiàn)最小負(fù)值,或者通過(guò)一些控制手段出現(xiàn)最小負(fù)值的情況,則完全可以只用M+N-1bit的數(shù)來(lái)存放運(yùn)算結(jié)果,從而節(jié)約1bit的寄存器資源。如果乘法運(yùn)算只是系統(tǒng)的中間環(huán)節(jié),則后續(xù)的每個(gè)運(yùn)算步驟均可節(jié)約1bit的寄存器資源。5.3.4乘加運(yùn)算中的有效數(shù)據(jù)位前面討論運(yùn)算結(jié)果的有效數(shù)據(jù)位時(shí),都是指參加運(yùn)算的信號(hào)均是變量的情況。在數(shù)字信號(hào)處理中,通常會(huì)遇到乘加運(yùn)算的情況,一個(gè)典型的例子是有限脈沖響應(yīng)(FiniteImpulseResponse,F(xiàn)IR)濾波器的設(shè)計(jì)。當(dāng)乘法系數(shù)是常量時(shí),最終運(yùn)算結(jié)果的有效數(shù)據(jù)位需要根據(jù)常量的大小來(lái)重新計(jì)算。比如需要設(shè)計(jì)一個(gè)FIR濾波器:假設(shè)濾波器系數(shù)為h(n)=[13,-38,74,99,99,74,-38,13],輸入數(shù)據(jù)為Nbit的二進(jìn)制數(shù),則濾波器輸出至少需要采用多少位來(lái)準(zhǔn)確表示呢?要保證運(yùn)算結(jié)果不溢出,我們需要計(jì)算濾波器輸出的最大值,并以此推算輸出的有效數(shù)據(jù)位。方法其實(shí)十分簡(jiǎn)單,只需要計(jì)算所有濾波器系數(shù)絕對(duì)值之和,再計(jì)算表示該絕對(duì)值之和所需的最小無(wú)符號(hào)二進(jìn)制數(shù)的位寬為n,則濾波器輸出的有效數(shù)據(jù)位為N+n。對(duì)于這個(gè)實(shí)例,可知濾波器絕對(duì)值之和為448,至少需要9bit的二進(jìn)制數(shù)表示,因此n=9。5.4有限字長(zhǎng)效應(yīng)5.4.1有限字長(zhǎng)效應(yīng)的產(chǎn)生因素?cái)?shù)字信號(hào)處理的實(shí)質(zhì)是數(shù)值運(yùn)算,這些運(yùn)算可以在計(jì)算機(jī)上通過(guò)軟件來(lái)實(shí)現(xiàn),也可以用專門的硬件來(lái)實(shí)現(xiàn)。無(wú)論采用哪種實(shí)現(xiàn)方式,數(shù)字信號(hào)處理系統(tǒng)的一些系數(shù)、信號(hào)序列的各個(gè)數(shù)值,以及運(yùn)算結(jié)果等,都要以二進(jìn)制數(shù)的形式存儲(chǔ)在有限字長(zhǎng)的存儲(chǔ)單元中。如果處理的是模擬信號(hào),如常用的采樣信號(hào)處理系統(tǒng),輸入的模擬信號(hào)經(jīng)過(guò)A/D轉(zhuǎn)換后變成有限字長(zhǎng)的數(shù)字信號(hào),有限字長(zhǎng)的數(shù)就是有限精度的數(shù)。因此,具體實(shí)現(xiàn)中往往難以保證原設(shè)計(jì)精度而產(chǎn)生誤差,甚至導(dǎo)致錯(cuò)誤的結(jié)果。在數(shù)字信號(hào)處理系統(tǒng)中,以下三種因素會(huì)引起誤差:(1)A/D轉(zhuǎn)換器在把輸入的模擬信號(hào)轉(zhuǎn)換成一組離散電平時(shí)會(huì)產(chǎn)生量化效應(yīng)。(2)在用有限位的二進(jìn)制數(shù)表示數(shù)字信號(hào)處理系統(tǒng)的系數(shù)時(shí)會(huì)產(chǎn)生量化效應(yīng)。(3)在數(shù)字運(yùn)算過(guò)程中,為了限制位數(shù)進(jìn)行的尾數(shù)處理,以及為了防止溢出而壓縮信號(hào)電平,會(huì)產(chǎn)生有限字長(zhǎng)效應(yīng)。引起這些誤差的根本原因在于寄存器(存儲(chǔ)單元)的字長(zhǎng)是有限的。誤差的特性與系統(tǒng)的類型、結(jié)構(gòu)形式、數(shù)字的表示法、運(yùn)算方式以及字長(zhǎng)有關(guān)。在計(jì)算機(jī)上,字長(zhǎng)較長(zhǎng),量化步長(zhǎng)很小,量化誤差不大,因此用計(jì)算機(jī)實(shí)現(xiàn)數(shù)字信號(hào)處理系統(tǒng)時(shí),一般無(wú)須考慮有限字長(zhǎng)效應(yīng)。但采用專用硬件(如FPGA)實(shí)現(xiàn)數(shù)字信號(hào)處理系統(tǒng)時(shí),其字長(zhǎng)較短,這時(shí)就必須考慮有限字長(zhǎng)效應(yīng)。5.4.2A/D轉(zhuǎn)換器的有限字長(zhǎng)效應(yīng)從功能上講,A/D轉(zhuǎn)換器可簡(jiǎn)單地分為采樣和量化兩部分,采樣將模擬信號(hào)變成離散信號(hào),量化將每個(gè)采樣值用有限字長(zhǎng)表示。采樣頻率的選取將直接影響A/D轉(zhuǎn)換器的性能,根據(jù)奈奎斯特定理,采樣頻率至少需要大于或等于信號(hào)最高頻率的2倍,才能從采樣后的離散信號(hào)中無(wú)失真地恢復(fù)原始的模擬信號(hào),且采樣頻率越高,A/D轉(zhuǎn)換器的性能就越好。量化效應(yīng)可以等效為輸入信號(hào)為有限字長(zhǎng)的數(shù)字信號(hào)。A/D轉(zhuǎn)換器的等效模型如圖5-8所示。圖5-8A/D轉(zhuǎn)換器的等效模型根據(jù)圖5-8所示的模型,量化后的取值可以表示成精確采樣值和量化誤差的和,即:這一模型基于以下的幾點(diǎn)假設(shè)。(1)e(n)是一個(gè)平穩(wěn)隨機(jī)采樣序列。(2)e(n)具有等概分布特性。(3)e(n)是一個(gè)白噪聲信號(hào)過(guò)程。(4)e(n)和x(n)是不相關(guān)的。由于e(n)具有等概分布特性,舍入的概率分布如圖5-9(a)所示,補(bǔ)碼截位的概率分布如圖5-9(b)所示,原碼截位的概率分布如圖5-9(c)所示。圖5-9舍入、補(bǔ)碼截位和原碼截位的概率分布以上三種表示方法中誤差信號(hào)的均值和方差分別為如下所述。(1)舍入時(shí):均值為0,方差為δ2/2。(2)補(bǔ)碼截位時(shí):均值為-δ/2,方差為δ2/12。(3)原碼截位時(shí):均值為0,方差為δ2/3。這樣,量化過(guò)程可以等效為在無(wú)限精度的數(shù)上疊加一個(gè)噪聲信號(hào),其中,舍入操作得到的信噪比,即量化信噪比的表達(dá)式為從式(5-13)可以看出,舍入后的字長(zhǎng)每增加1位,SNR約增加6dB。那么,在數(shù)字信號(hào)處理系統(tǒng)中是否字長(zhǎng)選取得越長(zhǎng)越好呢?其實(shí)在選取A/D轉(zhuǎn)換器的字長(zhǎng)時(shí)主要考慮兩個(gè)因素:輸入信號(hào)本身的信噪比,以及系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。由于輸入信號(hào)本身具有一定的信噪比,當(dāng)字長(zhǎng)增加到A/D轉(zhuǎn)換器的量化噪聲比輸入信號(hào)的噪聲信號(hào)電平更低時(shí),就沒(méi)有意義了。隨著A/D轉(zhuǎn)換器字長(zhǎng)的增加,數(shù)字信號(hào)處理系統(tǒng)實(shí)現(xiàn)的復(fù)雜程度也會(huì)急劇增加,當(dāng)采用FPGA等可編程硬件實(shí)現(xiàn)數(shù)字信號(hào)處理系統(tǒng)時(shí),這一問(wèn)題顯得尤其突出。5.4.3數(shù)字濾波器系數(shù)的有限字長(zhǎng)效應(yīng)數(shù)字濾波器是數(shù)字信號(hào)處理研究的基本內(nèi)容之一,本書后續(xù)章節(jié)會(huì)專門針對(duì)數(shù)字濾波器的FPGA設(shè)計(jì)進(jìn)行詳細(xì)的討論。這里先介紹一下有限字長(zhǎng)效應(yīng)對(duì)數(shù)字濾波器設(shè)計(jì)的影響。在數(shù)字濾波器的設(shè)計(jì)中,有限字長(zhǎng)效應(yīng)的影響主要表現(xiàn)在兩個(gè)方面:數(shù)字濾波器的系數(shù)量化效應(yīng),以及數(shù)字濾波器運(yùn)算中的有限字長(zhǎng)效應(yīng)。文獻(xiàn)[1]對(duì)有限字長(zhǎng)效應(yīng)在數(shù)字濾波器設(shè)計(jì)中的影響進(jìn)行了詳細(xì)的理論分析,對(duì)于工程設(shè)計(jì)與實(shí)現(xiàn)來(lái)講,雖然無(wú)須了解嚴(yán)謹(jǐn)?shù)睦碚撏茖?dǎo)過(guò)程,但起碼應(yīng)該了解有限字長(zhǎng)效應(yīng)對(duì)系統(tǒng)設(shè)計(jì)的定性影響,以及相應(yīng)的指導(dǎo)性結(jié)論,并在實(shí)際工程設(shè)計(jì)中最終通過(guò)仿真來(lái)確定最佳的運(yùn)算字長(zhǎng)。在設(shè)計(jì)常用的FIR(FiniteImpulseResponse,有限脈沖響應(yīng))或IIR(InfiniteImpulseResponse,無(wú)限脈沖響應(yīng))濾波器時(shí),按理論設(shè)計(jì)方法或由MATLAB設(shè)計(jì)出來(lái)的數(shù)字濾波器系數(shù)是無(wú)限精度的。但在實(shí)際工程實(shí)現(xiàn)時(shí),數(shù)字濾波器的所有系數(shù)都必須用有限長(zhǎng)的二進(jìn)制數(shù)來(lái)表示,并存放在存儲(chǔ)單元中,即對(duì)理想的系數(shù)進(jìn)行量化。我們知道,數(shù)字濾波器的系數(shù)直接決定了系統(tǒng)函數(shù)的零點(diǎn)位置、極點(diǎn)位置和頻率響應(yīng),因此,由于實(shí)際數(shù)字濾波器系數(shù)存在的誤差,必將使數(shù)字濾波器的零點(diǎn)位置和極點(diǎn)位置發(fā)生偏移,頻率響應(yīng)發(fā)生變化,從而影響數(shù)字濾波器的性能,甚至嚴(yán)重到使單位圓內(nèi)的極點(diǎn)位置偏移到單位圓外,造成數(shù)字濾波器的不穩(wěn)定。系數(shù)量化對(duì)數(shù)字濾波器性能的影響和字長(zhǎng)有關(guān),也與數(shù)字濾波器結(jié)構(gòu)有關(guān)。分析各種結(jié)構(gòu)的數(shù)字濾波器系數(shù)量化的影響比較復(fù)雜,有興趣的讀者請(qǐng)參見(jiàn)文獻(xiàn)[1]中的相關(guān)內(nèi)容。下面給出一個(gè)實(shí)際的例子,通過(guò)MATLAB來(lái)仿真系數(shù)量化對(duì)數(shù)字濾波器性能的影響。實(shí)例5-2:采用MATLAB仿真二階數(shù)字濾波器的頻率響應(yīng)本實(shí)例采用MATLAB仿真二階數(shù)字濾波器的頻率響應(yīng),以及極點(diǎn)因量化位數(shù)變化而產(chǎn)生的影響,畫出8bit量化與原系統(tǒng)的頻率響應(yīng)圖,列表對(duì)比隨量化位數(shù)變化而引起的系統(tǒng)極點(diǎn)位置變化。二階數(shù)字濾波器的系統(tǒng)函數(shù)為:本實(shí)例的MATLAB程序文件為E5_2_QuantCoeff.m,代碼如下:系數(shù)量化前后的系統(tǒng)頻率響應(yīng)圖如圖5-10所示,從該圖可明顯看出系數(shù)量化后系統(tǒng)的頻率響應(yīng)與原系統(tǒng)的頻率響應(yīng)的差別。系數(shù)量化前后的系統(tǒng)極點(diǎn)如表5-6所示,從該表可看出,隨著量化位數(shù)的減小,極點(diǎn)值偏離原系統(tǒng)的極點(diǎn)值越來(lái)越大,對(duì)于該系統(tǒng)來(lái)說(shuō),當(dāng)量化位數(shù)小于7位時(shí),系統(tǒng)的極點(diǎn)已在單位圓外,不再是一個(gè)因果穩(wěn)定系統(tǒng)。圖5-10系數(shù)量化前后的系統(tǒng)頻率響應(yīng)圖表5-6系數(shù)量化前后的系統(tǒng)極點(diǎn)5.4.4濾波器運(yùn)算中的有限字長(zhǎng)效應(yīng)對(duì)于二進(jìn)制數(shù)的運(yùn)算來(lái)說(shuō),雖然定點(diǎn)數(shù)的加法運(yùn)算不會(huì)改變字長(zhǎng),但存在數(shù)據(jù)溢出的可能,因此需要考慮數(shù)據(jù)的動(dòng)態(tài)范圍;定點(diǎn)數(shù)的乘法運(yùn)算存在有限字長(zhǎng)效應(yīng),因?yàn)?個(gè)Bbit的定點(diǎn)數(shù)相乘,要保留所有的有效位就需要使用2Bbit的數(shù),截位或舍入必定會(huì)引起有限字長(zhǎng)效應(yīng);在浮點(diǎn)數(shù)運(yùn)算中,乘法或加法運(yùn)算均有可能引起尾數(shù)位的增加,因此也存在有限字長(zhǎng)效應(yīng)。一些讀者可能會(huì)問(wèn),為什么不能增加字長(zhǎng)來(lái)保證運(yùn)算過(guò)程不產(chǎn)生截位或舍入操作呢?這樣雖然需要增加一些寄存器,但畢竟可以避免因截位或舍入而帶來(lái)的運(yùn)算精度下降甚至運(yùn)算錯(cuò)誤??!對(duì)于沒(méi)有反饋結(jié)構(gòu)的系統(tǒng)來(lái)說(shuō),這樣理解也未嘗不可。對(duì)于數(shù)字濾波器或較為復(fù)雜的系統(tǒng)來(lái)講,通常存在反饋結(jié)構(gòu),每一次閉環(huán)運(yùn)算都會(huì)增加一部分字長(zhǎng),循環(huán)運(yùn)算下去勢(shì)必要求越來(lái)越多的寄存器,字長(zhǎng)是單調(diào)增加的,也就是說(shuō),隨著運(yùn)算的持續(xù),所需的寄存器是無(wú)限增加的。這樣來(lái)實(shí)現(xiàn)一個(gè)系統(tǒng),顯然是不現(xiàn)實(shí)的??紤]一個(gè)一階數(shù)字濾波器,其系統(tǒng)函數(shù)為:在無(wú)限精度運(yùn)算的情況下,其差分方程為:y(n)=-0.5y(n-1)+x(n)(5-16)在定點(diǎn)數(shù)運(yùn)算中,每次乘法和加法運(yùn)算后都必須對(duì)尾數(shù)進(jìn)行舍入或截位處理,即量化處理,而量化過(guò)程是一個(gè)非線性過(guò)程,處理后相應(yīng)的非線性差分方程變?yōu)椋簑(n)=Q[-0.5w(n-1)+x(n)](5-17)實(shí)例5-3:采用MATLAB仿真一階數(shù)字濾波器的輸出響應(yīng)采用MATLAB仿真式(5-17)所表示的一階數(shù)字濾波器的輸出響應(yīng),輸入信號(hào)為7δ(n)/8,δ(n)為沖激信號(hào)。仿真原系統(tǒng)、2bit量化、4bit量化、6bit量化的輸出響應(yīng),并畫圖進(jìn)行對(duì)比說(shuō)明。本實(shí)例的MATLAB程序代碼如下:一階數(shù)字濾波器量化運(yùn)算的仿真結(jié)果如圖5-11所示,從圖中可以看出,當(dāng)采用無(wú)限精度進(jìn)行運(yùn)算時(shí),輸出響應(yīng)逐漸趨近于0;經(jīng)過(guò)量化處理后,輸出響應(yīng)在幾次運(yùn)算后在固定值處振蕩,量化位數(shù)越少,振蕩幅度就越大。圖5-11一階數(shù)字濾波器量化運(yùn)算的仿真結(jié)果5.5小結(jié)本章的學(xué)習(xí)要點(diǎn)可歸納為:(1)二進(jìn)制數(shù)有3種表示方式:原碼、反碼和補(bǔ)碼。FPGA中的數(shù)據(jù)有2種類型:無(wú)符號(hào)數(shù)和有符號(hào)數(shù),其中無(wú)符號(hào)數(shù)是指所有的數(shù)均為正數(shù),有符號(hào)數(shù)用補(bǔ)碼表示。(2)由于二進(jìn)制數(shù)的補(bǔ)碼加法和減法運(yùn)算規(guī)則相同,在FPGA中采用補(bǔ)碼進(jìn)行運(yùn)算可以有效提高二進(jìn)制數(shù)的運(yùn)算效率。(3)定點(diǎn)數(shù)的表示范圍有限,如果在運(yùn)算中需要采用大范圍的數(shù)據(jù)時(shí),則可以采用浮點(diǎn)數(shù)額格式進(jìn)行運(yùn)算。(4)理解多個(gè)二進(jìn)制數(shù)進(jìn)行加法運(yùn)算時(shí),全精度運(yùn)算所需的有效數(shù)據(jù)位。(5)理解多個(gè)二進(jìn)制數(shù)進(jìn)行乘法運(yùn)算時(shí),全精度運(yùn)算所需的有效數(shù)據(jù)位。(6)理解多個(gè)二進(jìn)制數(shù)進(jìn)行乘法和加法運(yùn)算時(shí),全精度運(yùn)算所需的有效數(shù)據(jù)位。(7)理解數(shù)字信號(hào)處理系統(tǒng)在運(yùn)算過(guò)程中的有限字長(zhǎng)效應(yīng)。5.6思考與練習(xí)5-1定點(diǎn)數(shù)有哪三種表示方法?5-2分別寫出十進(jìn)制數(shù)100、-15、200、17、32的原碼、反碼和補(bǔ)碼(二進(jìn)制數(shù)的位寬為9)。5-3根據(jù)二進(jìn)制數(shù)加法運(yùn)算規(guī)則,寫出2個(gè)8bit的二進(jìn)制數(shù)補(bǔ)碼A(100)和B(-200)進(jìn)行加法運(yùn)算的過(guò)程。5-4浮點(diǎn)數(shù)主要由幾部分組成?單精度浮點(diǎn)數(shù)能夠表示無(wú)限精度的實(shí)數(shù)嗎?5-5請(qǐng)將實(shí)數(shù)102.5分別轉(zhuǎn)換成單精度浮點(diǎn)數(shù),以及5.1.4節(jié)定義的浮點(diǎn)數(shù)格式。5-6已知6個(gè)二進(jìn)制數(shù)補(bǔ)碼進(jìn)行加法運(yùn)算,有3個(gè)操作數(shù)是10bit的,另外3個(gè)操作數(shù)是11bit的。如果要確保運(yùn)算結(jié)果不溢出,則運(yùn)算結(jié)果最少需要多少位?5-7采用移位相加的法實(shí)現(xiàn)A×18、A×126、A×1026。5-8采用移位相加的方法近似實(shí)現(xiàn)A/16、A/4、A/9,要求運(yùn)算誤差小于10%。5-9已知FIR濾波器的系統(tǒng)函數(shù)為:數(shù)字濾波器的系數(shù)h(n)=[160,-308,64,90,-64,308,-160],如果輸入的是10bit的二進(jìn)制數(shù),則最少需要采用多少位來(lái)準(zhǔn)確表示數(shù)字濾波器的輸出結(jié)果?5-10修改實(shí)例5-2的MATLAB程序,在一張圖中同時(shí)繪制原系統(tǒng)、10bit量化、6bit量化、4bit量化情況下的系統(tǒng)頻率響應(yīng)圖,并分析對(duì)比量化位數(shù)對(duì)頻率響應(yīng)的影響。第6章

典型IP核的應(yīng)用IP(IntellectualProperty)核就是知識(shí)產(chǎn)權(quán)核,是一個(gè)很“高大上”的名字。IP核是一個(gè)個(gè)功能完備、性能優(yōu)良、使用簡(jiǎn)單的功能模塊。我們需要理解常用IP核的用法,在進(jìn)行FPGA設(shè)計(jì)時(shí)可以直接使用IP核。6.1IP核在FPGA中的應(yīng)用6.1.1IP核的一般概念I(lǐng)P(IntellectualProperty)核是知識(shí)產(chǎn)權(quán)核或知識(shí)產(chǎn)權(quán)模塊的意思,在FPGA設(shè)計(jì)中具有重要的作用。美國(guó)著名的Dataquest咨詢公司將半導(dǎo)體產(chǎn)業(yè)的IP核定義為“用于ASIC或FPGA中預(yù)先設(shè)計(jì)好的電路功能模塊”。由于IP核是經(jīng)過(guò)驗(yàn)證的、性能及效率均比較理想的電路功能模塊,因此在FPGA設(shè)計(jì)中具有十分重要的作用,尤其是一些較為復(fù)雜同時(shí)又十分常用的電路功能模塊,如果使用相應(yīng)的IP核,就會(huì)極大地提高FPGA設(shè)計(jì)的效率和性能。在FPGA設(shè)計(jì)領(lǐng)域,一般把IP核分為軟IP核(軟核)、固IP核(固核)和硬IP核(硬核)三種。下面先來(lái)看看絕大多數(shù)著作或網(wǎng)站上對(duì)這三種IP核的描述。IP核有行為(Behavior)級(jí)、結(jié)構(gòu)(Sructure)級(jí)和物理(Physical)級(jí)三種不同程度的設(shè)計(jì),對(duì)應(yīng)著描述功能行為的軟IP核(SoftIPCore)、描述結(jié)構(gòu)的固IP核(FirmIPCore),以及基于物理描述并經(jīng)過(guò)工藝驗(yàn)證的硬IP核(HardIPCore)。這相當(dāng)于集成電路(器件或部件)的毛坯、半成品和成品的設(shè)計(jì)。軟IP核是用VerilogHDL或VHDL等硬件描述語(yǔ)言(HDL)描述的功能模塊,并不涉及用什么具體電路元件實(shí)現(xiàn)這些功能。軟IP核通常是以HDL文件的形式出現(xiàn)的,在開(kāi)發(fā)過(guò)程中與普通的HDL文件十分相似,只是所需的開(kāi)發(fā)軟硬件環(huán)境比較昂貴。軟IP核的設(shè)計(jì)周期短、投入少,由于不涉及物理實(shí)現(xiàn),為后續(xù)設(shè)計(jì)留有很大的發(fā)揮空間,增大了IP核的靈活性和適應(yīng)性。軟IP核的主要缺點(diǎn)是在一定程度上使后續(xù)的擴(kuò)展功能無(wú)法適應(yīng)整體設(shè)計(jì),從而需要在一定程度上修正軟IP核修正,在性能上也不可能獲得全面的優(yōu)化。由于軟IP核是以代碼的形式提供的,盡管代碼可以采用加密方法,軟IP核的保護(hù)問(wèn)題也不容忽視。硬IP核提供的是最終階段的產(chǎn)品形式:掩模。硬IP核以經(jīng)過(guò)完全布局布線的網(wǎng)表形式提供,既具有可擴(kuò)展性,也可以針對(duì)特定工藝或購(gòu)買商進(jìn)行功耗和尺寸上的優(yōu)化。盡管硬IP核缺乏靈活性、可移植性差,但由于無(wú)須提供寄存器傳輸級(jí)(RTL)文件,因而更易于實(shí)現(xiàn)硬IP核保護(hù)。固IP核則是軟IP核和硬IP核的折中。大多數(shù)應(yīng)用于FPGA的IP核均為軟IP核,軟IP核有助于用戶調(diào)節(jié)參數(shù)并增強(qiáng)可復(fù)用性。軟IP核通常以加密的形式提供,這樣實(shí)際的RTL文件對(duì)用戶是不可見(jiàn)的,但布局布線靈活。在加密的軟IP核中,如果對(duì)軟IP核進(jìn)行了參數(shù)化,那么用戶就可通過(guò)頭文件或圖形用戶接口(GUI)方便地對(duì)參數(shù)進(jìn)行操作。對(duì)于那些對(duì)時(shí)序要求嚴(yán)格的IP核(如PCI接口IP核),可預(yù)布線特定信號(hào)或分配特定的布線資源,以滿足時(shí)序要求,這些IP核可歸類為固IP核。由于固IP核是預(yù)先設(shè)計(jì)的代碼模塊,因此有可能影響包含該固IP核整體設(shè)計(jì)產(chǎn)品的功能及性能。由于固IP核的建立、保持時(shí)間和握手信號(hào)都可能是固定的,因此在設(shè)計(jì)其他電路時(shí)必須考慮與該固IP核之間的信號(hào)接口協(xié)議。6.1.2FPGA設(shè)計(jì)中的IP核類型前面對(duì)IP核的三種類型的描述比較專業(yè),也正因?yàn)槠鋵I(yè),導(dǎo)致理解起來(lái)仍然有些困難。對(duì)于FPGA應(yīng)用設(shè)計(jì)來(lái)講,用戶只要了解所使用IP核的硬件結(jié)構(gòu)及基本組成方式即可。據(jù)此,可以把FPGA中的IP核分為兩個(gè)基本的類型:基于LUT等邏輯資源封裝的軟IP核、基于固定硬件結(jié)構(gòu)封裝的硬IP核。具體來(lái)講,所謂軟件IP核,是指基本實(shí)現(xiàn)結(jié)構(gòu)為FPGA中的LUT、觸發(fā)器等資源,用戶在調(diào)用這些IP核時(shí),其實(shí)是調(diào)用了一段HDL(VerilogHDL或VHDL)代碼,以及已進(jìn)行綜合優(yōu)化后的功能模塊。這類IP核所占用的邏輯資源與用戶自己編寫HDL代碼所占用的邏輯資源沒(méi)有任何區(qū)別。所謂硬IP核,是指基本實(shí)現(xiàn)結(jié)構(gòu)為特定硬件結(jié)構(gòu)的資源,這些特定的硬件結(jié)構(gòu)與LUT、觸發(fā)器等邏輯資源完全不同,是專用于特定功能的資源。在FPGA設(shè)計(jì)中,即使用戶沒(méi)用使用硬IP核,這些資源也不能用于其他場(chǎng)合。換句話講,我們可以簡(jiǎn)單地將硬IP核看成嵌入FPGA中的專用芯片,如乘法器、存儲(chǔ)器等。由于硬IP核具有專用的硬件結(jié)構(gòu),雖然功能單一,但通常具有更好的運(yùn)算性能。硬IP核的功能單一,可滿足FPGA設(shè)計(jì)時(shí)序的要求,以及與其他模塊的接口要求,通常需要在硬IP核的基礎(chǔ)上增加少量的LUT及觸發(fā)器資源。用戶在使用硬IP核時(shí),應(yīng)當(dāng)根據(jù)設(shè)計(jì)需求,通過(guò)硬IP核的設(shè)置界面對(duì)其接口及時(shí)序進(jìn)行設(shè)置。在FPGA設(shè)計(jì)中,要實(shí)現(xiàn)一些特定的功能,如乘法器或存儲(chǔ)器,既可以選擇采用普通的LUT等邏輯資源來(lái)實(shí)現(xiàn),也可以采用專用的硬IP核來(lái)實(shí)現(xiàn)。ISE14.7的IP核生成工具通常會(huì)提供不同實(shí)現(xiàn)結(jié)構(gòu)的選項(xiàng),用戶可以根據(jù)需要來(lái)選擇。用戶該如何選擇呢?有時(shí)候選項(xiàng)多了,反而會(huì)增加設(shè)計(jì)的難度。隨著我們對(duì)FPGA結(jié)構(gòu)理解的加深,當(dāng)對(duì)設(shè)計(jì)需求的把握更加準(zhǔn)確,或者具有更好的設(shè)計(jì)能力時(shí),就會(huì)發(fā)現(xiàn)選項(xiàng)多了,會(huì)極大地增加設(shè)計(jì)的靈活性,更利于設(shè)計(jì)出完善的產(chǎn)品。例如,在FPGA設(shè)計(jì)中,有兩個(gè)不同的功能模塊都要用到多個(gè)乘法器,而FPGA中的乘法器是有限的,當(dāng)所需的乘法器數(shù)量超出FPGA的乘法器數(shù)量時(shí),將無(wú)法完成設(shè)計(jì)。此時(shí),可以根據(jù)設(shè)計(jì)的速度及時(shí)序要求,將部分乘法器用LUT等邏輯資源實(shí)現(xiàn),部分運(yùn)算速度較高的功能采用乘法器實(shí)現(xiàn),最終解決程序的設(shè)計(jì)問(wèn)題。IP核的來(lái)源主要有3種:ISE14.7已經(jīng)集成的IP核、Xilinx公司提供(需要付費(fèi))的IP核,以及第三方公司提供的IP核。Xilinx公司提供了專門的IP核生成工具(可以集成在ISE14.7中),所以用戶也可以自己設(shè)計(jì)并生成IP核。在FPGA設(shè)計(jì)中,最常用的IP核還是由ISE14.7軟件直接提供的免費(fèi)IP核。由于FPGA規(guī)模及結(jié)構(gòu)的不同,不同F(xiàn)PGA所支持的IP核種類也不完全相同,每種IP核的數(shù)據(jù)手冊(cè)也會(huì)給出所適用的FPGA型號(hào)。在進(jìn)行FPGA設(shè)計(jì)時(shí),應(yīng)當(dāng)先查看ISE14.7提供的IP核有哪些,以便盡量減少設(shè)計(jì)的工作量。這里以Xilinx公司的低成本Spartan系列的XC6SLX16-2FTG256為例,查看該FPGA所能提供的IP核。在工程中單擊新建資源圖標(biāo)按鈕,將選擇資源類型設(shè)置為“IP(COREGenerator&ArchitectureWizard)”,輸入IP核的文件名(Filename)后,單擊“Next”按鈕即可打開(kāi)IP核類型選擇框。ISE14.7提供了兩種IP核類型選擇方式,即“ViewbyFunction”(按功能查找,見(jiàn)圖6-1)和“ViewbyName”(按名字查找,見(jiàn)圖6-2)。圖6-1按功能查找的IP核選擇方式圖6-2按名字查找的IP核選擇方式由圖6-1和圖6-2可知,ISE14.7提供的免費(fèi)IP種類非常多,如數(shù)字信號(hào)處理IP核(DigitalSignalProcessing)、數(shù)學(xué)運(yùn)算IP核(MathFunctions)、存儲(chǔ)器IP核(Memories&StorageElements)、視頻和圖像處理IP核(Video&ImageProcessing)等。接下來(lái)對(duì)本書所使用的一些基本IP核的功能及用法進(jìn)行介紹。6.1.3CMT與FPGA時(shí)鐘樹(shù)CMT(ClockManagementTile)是Xilinx公司FPGA內(nèi)集成的數(shù)字時(shí)鐘管理功能模塊,用于對(duì)外部輸入的時(shí)鐘信號(hào)進(jìn)行分頻、倍頻、移相等處理,生成FPGA內(nèi)部電路設(shè)計(jì)所需的各種時(shí)鐘信號(hào),且與FPGA內(nèi)的全局時(shí)鐘布線資源緊密結(jié)合,共同完成FPGA內(nèi)的時(shí)鐘信號(hào)設(shè)計(jì)。為了保證時(shí)鐘布線資源的低時(shí)鐘歪斜(也稱時(shí)鐘偏差)、低抖動(dòng)、低失真等特性,F(xiàn)PGA內(nèi)有專門的時(shí)鐘布線結(jié)構(gòu)。Xilinx公司的FPGA的時(shí)鐘是通過(guò)時(shí)鐘樹(shù)來(lái)分布的。圖6-3是Spartan系列FPGA的時(shí)鐘網(wǎng)絡(luò)結(jié)構(gòu),也稱為時(shí)鐘樹(shù)。圖6-3Spartan系列FPGA的時(shí)鐘網(wǎng)絡(luò)結(jié)構(gòu)圖6-3中,中間豎排是CMT(XC6SLX16-2FTG256包含2個(gè)CMT),每個(gè)CMT由2個(gè)DCM(DigitalClockManager,數(shù)字時(shí)鐘管理器)和1個(gè)PLL(PhaseLockedLoop)組成。DCM和PLL的功能相似,用于完成對(duì)輸入時(shí)鐘信號(hào)的分頻、倍頻、移相等處理。每個(gè)DCM和PLL均可以獨(dú)立使用或級(jí)聯(lián)使用。全局時(shí)鐘緩沖器BUFG位于FPGA的中心位置,時(shí)鐘的輸入可以來(lái)自FPGA上、下、左、右的Bank,也可以來(lái)自PLL或DCM;16個(gè)BUFGMUX通過(guò)驅(qū)動(dòng)VerticalSpine(垂直支路)并經(jīng)VerticalSpine往上、下兩個(gè)方向傳播。VerticalSpine就相當(dāng)于時(shí)鐘樹(shù)的“樹(shù)干”,根據(jù)這條線路,時(shí)鐘水平延伸至HCLK時(shí)鐘列(HCLKRows)并經(jīng)HCLK時(shí)鐘列提供訪問(wèn)局部邏輯資源的路徑,HCLK時(shí)鐘列和水平時(shí)鐘線相當(dāng)于“樹(shù)枝”。每一個(gè)HCLK列左右兩邊各有16個(gè)水平時(shí)鐘緩沖(BUFH)驅(qū)動(dòng)左、右Bank的邏輯資源。6.2時(shí)鐘管理IP核6.2.1全局時(shí)鐘資源在介紹時(shí)鐘管理IP核之前,有必要先了解一下FPGA全局時(shí)鐘資源的概念。全局時(shí)鐘資源是指FPGA內(nèi)部為實(shí)現(xiàn)系統(tǒng)時(shí)鐘到達(dá)FPGA內(nèi)部各CLB、IOB,以及BSRAM(BlockSelectRAM,選擇性BRAM)等基本邏輯單元的延時(shí)和抖動(dòng)最小化,采用全銅層工藝設(shè)計(jì)和實(shí)現(xiàn)的專用緩沖與驅(qū)動(dòng)結(jié)構(gòu)。由于全局時(shí)鐘資源的布線采用了專門的結(jié)構(gòu),比一般布線資源具有更高的性能,因此主要用于FPGA中的時(shí)鐘信號(hào)布局布線。也正因?yàn)槿謺r(shí)鐘資源的特定結(jié)構(gòu)和優(yōu)異性能,F(xiàn)PGA內(nèi)的全局時(shí)鐘資源數(shù)量十分有限,如XC6SLX16-2FTG256內(nèi)僅有16個(gè)全局時(shí)鐘資源。全局時(shí)鐘資源是一種布線資源,且這種布線資源在FPGA內(nèi)的物理位置是固定的,如果設(shè)計(jì)不使用這些資源的話,也不能增加整個(gè)設(shè)計(jì)的布線效率,因此,全局時(shí)鐘資源在FPGA設(shè)計(jì)中使用得十分普遍。全局時(shí)鐘資源有多種使用形式,用戶可以通過(guò)ISE14.7的語(yǔ)言模板查看全局時(shí)鐘資源的各種原語(yǔ)。下面介紹幾種典型的全局時(shí)鐘資源示意圖及使用方法。1.IBUFG和IBUFGSIBUFG是與時(shí)鐘輸入引腳相連接的首級(jí)全局緩沖,IBUFGS是IBUFG的差分輸入形式,如圖6-4所示。圖6-4IBUFG和IBUFGS的示意圖值得特別注意的是,IBUFG和IBUFGS的輸入引腳必須直接與FPGA引腳相連,每個(gè)IBUFG和IBUFGS的輸入引腳位置在FPGA中都是固定的。換句話說(shuō),只要是從芯片全局時(shí)鐘引腳輸入的信號(hào),無(wú)論該信號(hào)是否為時(shí)鐘信號(hào),均必須由IBUFG或IBUFGS引腳輸出,這是由FPGA內(nèi)部的硬件結(jié)構(gòu)決定的。還需注意的是,僅采用IBUFG或IBUFGS的時(shí)鐘輸出,并不占用全局時(shí)鐘布線資源,只有當(dāng)IBUFG或IBUFGS與BUFG組合起來(lái)使用時(shí)才會(huì)占用全局時(shí)鐘資源。2.BUFG、BUFGCE和BUFGMUXBUFG是全局時(shí)鐘緩沖器,BUFGCE是BUFG帶時(shí)鐘使能端的形式,BUFGMUX是具有選擇輸入端的BUFG形式,如圖6-5所示。BUFG有兩種使用方式:與IBUFG組合成BUFGCE,以及BUFG的輸入引腳連接內(nèi)部邏輯信號(hào)、輸出引腳連接全局時(shí)鐘布線資源。因此,只要使用了BUFG,就表示使用了FPGA內(nèi)的全局時(shí)鐘資源。圖6-5BUFG、BUFGCE和BUFGMUX的示意圖6.2.2利用IP核生成多路時(shí)鐘信號(hào)1.時(shí)鐘管理IP核設(shè)計(jì)實(shí)例6-1:時(shí)鐘管理IP核設(shè)計(jì)已知FPGA的時(shí)鐘引腳輸入頻率為50MHz的時(shí)鐘信號(hào),要求利用時(shí)鐘管理IP核生成4路時(shí)鐘信號(hào):第1路時(shí)鐘信號(hào)的頻率為100MHz,第2路時(shí)鐘信號(hào)的頻率為50MHz,第3路時(shí)鐘信號(hào)的頻率為12.5MHz,第4路時(shí)鐘信號(hào)的頻率為75MHz。在ISE14.7中新建一個(gè)工程,打開(kāi)新建資源對(duì)話框,設(shè)置資源文件名為“cmt”,選中“FPGAFeaturesandDesign→Clocking→ClockingWizard”,依次單擊“Next”“Finish”按鈕,可打開(kāi)時(shí)鐘管理IP核參數(shù)設(shè)置對(duì)話框,如圖6-6所示。圖6-6時(shí)鐘管理IP核參數(shù)設(shè)置的第1個(gè)對(duì)話框在圖6-6中,將“InputClockInformation”中的“InputFreq(MHz)”設(shè)置為實(shí)際輸入的時(shí)鐘信號(hào)頻率,即“50.000”,其他參數(shù)保持默認(rèn)。單擊“Next”按鍵,在彈出的對(duì)話框中設(shè)置輸出時(shí)鐘信號(hào)的個(gè)數(shù)、頻率、相位等參數(shù)。根據(jù)設(shè)計(jì)的要求,需要輸出4路時(shí)鐘信號(hào),因此需要再勾選3路輸出(CLK_OUT1是默認(rèn)選中狀態(tài),不需要選擇):CLK_OUT2、CLK_OUT3、CLK_OUT4,4路輸出時(shí)鐘信號(hào)參數(shù)設(shè)置對(duì)話框如圖6-7所示。圖6-74路輸出時(shí)鐘信號(hào)參數(shù)設(shè)置對(duì)話框在“OutputFreq(MHz)”的“Requested”中,依次設(shè)置對(duì)應(yīng)時(shí)鐘信號(hào)的頻率,在“Actual”中會(huì)顯示實(shí)際的時(shí)鐘信號(hào)頻率;在“Phase(degrees)”的“Requested”中,依次設(shè)置對(duì)應(yīng)時(shí)鐘信號(hào)的初始相位,在“Actual”中會(huì)顯示實(shí)際的初始相位;在“DutyCycle(%)”的“Requested”中,依次設(shè)置對(duì)應(yīng)時(shí)鐘信號(hào)的占空比,在“Actual”中會(huì)顯示實(shí)際的占空比。需要說(shuō)明的是,時(shí)鐘管理IP核并不能生成任意頻率的時(shí)鐘信號(hào)。例如,設(shè)置輸出時(shí)鐘信號(hào)的頻率為74MHz,在“Actual”中顯示的實(shí)際頻率仍為75MHz。這是因?yàn)镮P核所生成的時(shí)鐘信號(hào)頻率與輸入之間僅能是M/N的關(guān)系,其中的M、N必須是整數(shù)。如果將輸出時(shí)鐘信號(hào)的頻率設(shè)置為1MHz,則在“Actual”中顯示的實(shí)際頻率為3.125MHz,這說(shuō)明對(duì)于頻率為50MHz的輸入時(shí)鐘信號(hào),最低只能夠到頻率為3.125MHz的時(shí)鐘信號(hào)。讀者也可以嘗試設(shè)置其他的頻率值,了解IP核生成的時(shí)鐘信號(hào)的頻率范圍。設(shè)置完成輸出時(shí)鐘信號(hào)的參數(shù)后,單擊“Next”按鈕可進(jìn)入IP核接口信號(hào)設(shè)置對(duì)話框,如圖6-8所示。常用的信號(hào)有復(fù)位信號(hào)(RESET)和時(shí)鐘環(huán)路鎖定信號(hào)(LOCKED),勾選復(fù)位信號(hào)及時(shí)鐘環(huán)路鎖定信號(hào)后,可通過(guò)仿真查看IP核的功能。單擊IP核接口信號(hào)設(shè)置對(duì)話框左下角的“ResourceEstimation”選項(xiàng)卡,可以查看IP核所占用的資源情況。本實(shí)例中,IP核使用了1個(gè)DCM_SP模塊、1路輸入全局緩沖IBUFG,以及4路全局時(shí)鐘資源BUFG。由于還沒(méi)有對(duì)FPGA進(jìn)行引腳約束,而IP核直接給出了使用IBUFG及BUFG資源的報(bào)告,這說(shuō)明CMT的輸入會(huì)自動(dòng)與IBUFG相連,在物理位置上也必須由專用的時(shí)鐘引腳輸入,同時(shí)產(chǎn)生的輸出時(shí)鐘信號(hào)默認(rèn)使用全局時(shí)鐘資源。圖6-8IP核接口信號(hào)設(shè)置對(duì)話框在后續(xù)的對(duì)話框中依次單擊“Next”按鈕,并在最后的一個(gè)對(duì)話框中單擊“Generate”按鈕即可完成IP核的參數(shù)設(shè)置,并生成相應(yīng)的時(shí)鐘管理IP核文件。返回到ISE14.7主界面,在“Process”中雙擊“ViewHDLInstantiationTemplate”,可以查看IP核的例化語(yǔ)句,如下所示:從例化語(yǔ)句可以看出,IP核有1路時(shí)鐘輸入信號(hào)CLK_IN1,1路高電平有效的復(fù)位信號(hào)RESET,4路輸出的時(shí)鐘信號(hào)CLK_OUT1、CLK_OUT2、CLK_OUT3、CLK_OUT4,以及1路時(shí)鐘環(huán)路鎖定信號(hào)LOCKED。2.時(shí)鐘管理IP核的功能仿真在生成時(shí)鐘管理IP核后,可以直接對(duì)IP核文件進(jìn)行仿真測(cè)試。生成的測(cè)試激勵(lì)文件為tst.vt,完善輸入時(shí)鐘信號(hào)波形的部分代碼如下:從以上代碼可以看出,為了測(cè)試復(fù)位信號(hào)(RESET)的功能,設(shè)置在上電時(shí)不復(fù)位,在1000ns后復(fù)位狀態(tài)持續(xù)100ns,然后取消復(fù)位狀態(tài)。運(yùn)行ModelSim仿真,時(shí)鐘管理IP核的功能仿真如圖6-9所示。圖6-9時(shí)鐘管理IP核的功能仿真從圖6-9中可以看出,上電后RESET為0,沒(méi)有復(fù)位,在前幾個(gè)CLK_IN1時(shí)鐘周期內(nèi),輸出的4路時(shí)鐘信號(hào)均不穩(wěn)定,此時(shí)LOCKED為低電平。然后開(kāi)始輸出4路穩(wěn)定的時(shí)鐘信號(hào),各路時(shí)鐘信號(hào)的頻率與設(shè)置的頻率相同,且LOCKED為高電平。當(dāng)RESET為1時(shí),處于復(fù)位狀態(tài)時(shí),輸出的4路時(shí)鐘信號(hào)保持低電平。在RESET再次變?yōu)?時(shí),取消復(fù)位狀態(tài)后,大約經(jīng)過(guò)10個(gè)CLK_IN1時(shí)鐘周期后,LOCKED變?yōu)楦唠娖剑髀窌r(shí)鐘信號(hào)均能夠輸出穩(wěn)定、準(zhǔn)確的時(shí)鐘信號(hào)。從上述仿真波形可以看出,LOCKED能夠及時(shí)準(zhǔn)確地反映出輸出時(shí)鐘信號(hào)的穩(wěn)定狀態(tài)。因此,在FPGA設(shè)計(jì)中,通常采用LOCKED作為后續(xù)電路的全局復(fù)位信號(hào)。當(dāng)LOCKED為0時(shí)復(fù)位,當(dāng)LOCKED為1時(shí)不復(fù)位,在電路取消復(fù)位時(shí)可確保輸出的時(shí)鐘信號(hào)穩(wěn)定有效。6.3乘法器IP核6.3.1實(shí)數(shù)乘法器IP核乘法運(yùn)算是數(shù)字信號(hào)處理中的基本運(yùn)算。對(duì)于DSP、CPU、ARM等器件來(lái)講,采用C語(yǔ)言等高級(jí)語(yǔ)言實(shí)現(xiàn)乘法運(yùn)算十分簡(jiǎn)單,僅需要采用乘法運(yùn)算符即可,且可實(shí)現(xiàn)幾乎沒(méi)有任何誤差的單精度浮點(diǎn)數(shù)或雙精度浮點(diǎn)數(shù)的乘法運(yùn)算。工程師在利用這類器件實(shí)現(xiàn)乘法運(yùn)算時(shí),無(wú)須考慮運(yùn)算量、資源或精度的問(wèn)題。對(duì)FPGA工程師來(lái)講,一次乘法運(yùn)算就意味著一個(gè)乘法器資源,而FPGA中的乘法器資源是有限的。另外由于有限字長(zhǎng)效應(yīng)的影響,F(xiàn)PGA工程師必須準(zhǔn)確掌握乘法運(yùn)算的實(shí)現(xiàn)結(jié)構(gòu)及性能特點(diǎn),以便在FPGA設(shè)計(jì)中靈活運(yùn)用乘法器資源。對(duì)于相同位寬二進(jìn)制數(shù)來(lái)講,進(jìn)行乘法運(yùn)算所需的資源遠(yuǎn)多于進(jìn)行加法或減法運(yùn)算所需的資源。另外。由于乘法運(yùn)算的步驟較多,從而導(dǎo)致其運(yùn)算速度較慢。為了解決乘法運(yùn)算所需的資源較多以及運(yùn)算速度較慢的問(wèn)題,F(xiàn)PGA一般都集成了實(shí)數(shù)乘法器IP核。ISE14.7提供了實(shí)數(shù)乘法器及復(fù)數(shù)乘法器兩種IP核,本節(jié)以具體的設(shè)計(jì)實(shí)例來(lái)討論實(shí)數(shù)乘法器IP核的基本使用方法。1.實(shí)數(shù)乘法器IP核參數(shù)的設(shè)置實(shí)例6-2:通過(guò)實(shí)數(shù)乘法器IP核實(shí)現(xiàn)實(shí)數(shù)乘法運(yùn)算通過(guò)實(shí)數(shù)乘法器IP核完成乘法運(yùn)算,采用ModelSim來(lái)仿真實(shí)數(shù)乘法運(yùn)算的輸入/輸出信號(hào)波形,掌握實(shí)數(shù)乘法器IP核的延時(shí)。在ISE14.7中新建名為RealMult的工程,新建IP類型(COREGenerator&ArchitectureWizard)的資源,設(shè)置資源文件名為“real_mult”。在IP類型中選擇“ViewbyFunciton→MathFunctions→Multipliers→Multiplier11.2”,打開(kāi)實(shí)數(shù)乘法器IP核設(shè)置對(duì)話框,如圖6-10所示。圖6-10實(shí)數(shù)乘法器IP核設(shè)置對(duì)話框圖6-10左側(cè)顯示的是IP核的對(duì)外接口信號(hào),信號(hào)的種類、位寬等信息由用戶設(shè)置。單擊左下角的“ResourceEstimates”標(biāo)簽項(xiàng),可以查看IP核所占用的邏輯資源,如圖6-10右側(cè)所示。在新建實(shí)數(shù)乘法器IP核時(shí),IP核的默認(rèn)類型(MultiplierType)為并行乘法器(ParallelMultiplier),兩個(gè)輸入端口信號(hào)均為18bit的有符號(hào)數(shù)(Signed)。IP核的類型還可以設(shè)置為常系數(shù)乘法器(Constant-CoefficientMultiplie

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論