《FPGA設(shè)計(jì)及應(yīng)用》課件第7章_第1頁
《FPGA設(shè)計(jì)及應(yīng)用》課件第7章_第2頁
《FPGA設(shè)計(jì)及應(yīng)用》課件第7章_第3頁
《FPGA設(shè)計(jì)及應(yīng)用》課件第7章_第4頁
《FPGA設(shè)計(jì)及應(yīng)用》課件第7章_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章FPGA設(shè)計(jì)中的基本問題7.1數(shù)的表示方法7.2有限字長(zhǎng)的影響7.3時(shí)

題7.4時(shí)序參數(shù)7.5冒

險(xiǎn)

現(xiàn)

象7.6清零和置位信號(hào)7.7信

號(hào)

時(shí)7.8信

號(hào)

斜7.9流

作7.10電路結(jié)構(gòu)與速度之間的關(guān)系7.11器件結(jié)構(gòu)與處理算法的匹配7.12器

密7.13設(shè)

計(jì)

7.1數(shù)的表示方法

在數(shù)字系統(tǒng)中,各種數(shù)據(jù)要轉(zhuǎn)換為二進(jìn)制代碼才能進(jìn)行處理,而人們習(xí)慣于使用十進(jìn)制數(shù),所以在數(shù)字系統(tǒng)的輸入輸出中仍采用十進(jìn)制數(shù),這樣就需要用二進(jìn)制數(shù)來表示十進(jìn)制數(shù)。用二進(jìn)制數(shù)表示十進(jìn)制數(shù)的方式有很多種,表7.1匯總了幾種二進(jìn)制記數(shù)方式,并指出了其優(yōu)缺點(diǎn)。

表7.1二進(jìn)制記數(shù)方式

表7.23位二進(jìn)制數(shù)與其對(duì)應(yīng)的十進(jìn)制數(shù)值

7.1.1無符號(hào)整數(shù)無符號(hào)整數(shù)的記數(shù)方法是我們經(jīng)常用到的,它將一個(gè)整數(shù)用一個(gè)二進(jìn)制代碼序列表示,每位二進(jìn)制代碼的權(quán)值是2P,P為該代碼在序列中的序號(hào),如表7.3所示。表7.4給出了幾個(gè)無符號(hào)整數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例。無符號(hào)整數(shù)非常適于執(zhí)行算術(shù)運(yùn)算,圖7.1是一個(gè)加法運(yùn)算的例子。這種記數(shù)方法的缺點(diǎn)就是只能表示0~2N-1(N為二進(jìn)制序列的長(zhǎng)度)范圍內(nèi)的整數(shù),而無法表示負(fù)數(shù),這就在很大程度上限制了這種記數(shù)方法的使用范圍。表7.3無符號(hào)整數(shù)的權(quán)值表7.4無符號(hào)整數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例

圖7.1無符號(hào)整數(shù)的加法

7.1.2二進(jìn)制補(bǔ)碼

二進(jìn)制補(bǔ)碼也是常用的記數(shù)方法,它既可以表示正數(shù),也可以表示負(fù)數(shù)。與無符號(hào)整數(shù)的記數(shù)方式類似,二進(jìn)制補(bǔ)碼也是用一個(gè)二進(jìn)制代碼序列表示一個(gè)整數(shù),唯一不同之處在于最高有效位的權(quán)值是-2N-1。每一位二進(jìn)制代碼對(duì)應(yīng)的權(quán)值已在表7.5中給出。表7.6給出了二進(jìn)制補(bǔ)碼與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例。用二進(jìn)制補(bǔ)碼記數(shù)方法,將一個(gè)整數(shù)進(jìn)行正負(fù)值變換是很簡(jiǎn)單的,只需將原數(shù)中“1”和“0”反相,然后再加上“1”即可,如表7.6中“(29”的二進(jìn)制補(bǔ)碼的表示。

表7.5二進(jìn)制補(bǔ)碼的權(quán)值

表7.6二進(jìn)制補(bǔ)碼與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例(N=8)二進(jìn)制補(bǔ)碼的最大優(yōu)點(diǎn)就是可以像無符號(hào)整數(shù)那樣方便地進(jìn)行加減運(yùn)算。需要注意的是,最高有效位的進(jìn)位必須舍去。圖7.2給出了三個(gè)加減運(yùn)算的例子。

圖7.2二進(jìn)制補(bǔ)碼的加減運(yùn)算

7.1.3無符號(hào)小數(shù)無符號(hào)小數(shù)是無符號(hào)整數(shù)的擴(kuò)展,它將一個(gè)數(shù)分為整數(shù)部分和小數(shù)部分,通常用“N.M”表示一個(gè)無符號(hào)小數(shù)的格式,其含義是整數(shù)部分用N位二進(jìn)制代碼表示,小數(shù)部分用M位二進(jìn)制代碼表示。小數(shù)點(diǎn)左側(cè)第一位二進(jìn)制代碼是整數(shù)部分的最低有效位,右側(cè)第一位二進(jìn)制代碼是分?jǐn)?shù)部分的最高有效位。權(quán)值是不同的,表7.7給出了不同位置上的二進(jìn)制代碼所對(duì)應(yīng)的權(quán)值的大小。

表7.7無符號(hào)小數(shù)的權(quán)值

表7.8給出了幾個(gè)無符號(hào)小數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例。兩個(gè)無符號(hào)小數(shù)進(jìn)行加減運(yùn)算時(shí),首先把小數(shù)點(diǎn)位置對(duì)齊,然后再進(jìn)行相加或相減。如果兩個(gè)無符號(hào)小數(shù)的格式不相同,即N與M值不相等,則可用補(bǔ)零的方法取齊。圖7.3是一個(gè)加法運(yùn)算的實(shí)例,標(biāo)有下劃線的“0”為添加的輔助位。

表7.8無符號(hào)小數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例(N.M=4.3)圖7.3無符號(hào)小數(shù)的加法

7.1.4帶符號(hào)小數(shù)的二進(jìn)制補(bǔ)碼帶符號(hào)小數(shù)的二進(jìn)制補(bǔ)碼可以表示正的或負(fù)的小數(shù),它的格式通常用“N.M”表示。帶符號(hào)小數(shù)的二進(jìn)制補(bǔ)碼與無符號(hào)小數(shù)的記數(shù)方法十分相似,惟一不同之處是整數(shù)部分最高有效位對(duì)應(yīng)的權(quán)值是-2N-1。表7.9給出了不同位置上的二進(jìn)制代碼所對(duì)應(yīng)的權(quán)值。表7.10是幾個(gè)帶符號(hào)小數(shù)二進(jìn)制補(bǔ)碼與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例。用這種記數(shù)方法,將一個(gè)數(shù)進(jìn)行正負(fù)值變換是很簡(jiǎn)單的,只需將原數(shù)中的“1”和“0”反相,然后再在最后一位(即小數(shù)部分的最低有效位)加“1”即可,如表7.10中的“±3.625”。

表7.9帶符號(hào)小數(shù)二進(jìn)制補(bǔ)碼的權(quán)值

表7.10帶符號(hào)小數(shù)二進(jìn)制補(bǔ)碼與十進(jìn)制數(shù)的轉(zhuǎn)換實(shí)例(N.M=4.3)圖7.4帶符號(hào)小數(shù)二進(jìn)制補(bǔ)碼的加法

在進(jìn)行加減運(yùn)算時(shí),首先把小數(shù)點(diǎn)位置對(duì)齊,然后再進(jìn)行相加或相減。如果兩個(gè)數(shù)的格式不相同,即N與M值不相等,則可用補(bǔ)零的方法取齊。圖7.4是一個(gè)加法運(yùn)算的實(shí)例,標(biāo)有下劃線的“0”為添加的輔助位。與二進(jìn)制補(bǔ)碼類似,在執(zhí)行算術(shù)運(yùn)算時(shí),如果整數(shù)部分的最高有效位出現(xiàn)進(jìn)位,則必須將該進(jìn)位舍去。

7.1.5格雷碼格雷碼的特點(diǎn)是任意兩個(gè)相鄰的碼之間只有一個(gè)數(shù)不同。另外,由于最大數(shù)與最小數(shù)之間也僅有一位不同,故通常又叫格雷反射碼或循環(huán)碼。表7.11給出了格雷碼與二、十進(jìn)制數(shù)的關(guān)系。由于編碼方式的特殊性,格雷碼具有很強(qiáng)的抗干擾能力。但是格雷碼不便于直接執(zhí)行算術(shù)運(yùn)算,需要轉(zhuǎn)換為無符號(hào)整數(shù)或二進(jìn)制補(bǔ)碼,再進(jìn)行運(yùn)算。

表7.11格雷碼與二、十進(jìn)制數(shù)的關(guān)系

7.1.6帶符號(hào)整數(shù)帶符號(hào)整數(shù)由“符號(hào)位”和“數(shù)值位”兩部分組成。最高有效位是符號(hào)位,表示數(shù)值的正負(fù),類似于十進(jìn)制數(shù)中的“(”號(hào),一般用“0”表示正數(shù),“1”表示負(fù)數(shù)。除去最高有效位以外的部分是數(shù)值位,它實(shí)際上是一個(gè)無符號(hào)整數(shù),表示數(shù)值的大小。這種記數(shù)方法與十進(jìn)制整數(shù)的表示方法很相似。表7.12給出了3位帶符號(hào)整數(shù)與十進(jìn)制整數(shù)之間的對(duì)應(yīng)關(guān)系。

表7.12帶符號(hào)整數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換

7.1.7偏移二進(jìn)制補(bǔ)碼偏移二進(jìn)制補(bǔ)碼常用于A/D和D/A變換器上,它將采樣點(diǎn)的取值范圍從小到大順序編碼。表7.13是3位偏移二進(jìn)制補(bǔ)碼與十進(jìn)制數(shù)和二進(jìn)制補(bǔ)碼之間的對(duì)應(yīng)關(guān)系。從表中可看出,雖然偏移二進(jìn)制補(bǔ)碼是順序編碼的,但它對(duì)應(yīng)的十進(jìn)制數(shù)值不連續(xù)。將最高有效位反相,可以實(shí)現(xiàn)偏移二進(jìn)制補(bǔ)碼和二進(jìn)制補(bǔ)碼之間的轉(zhuǎn)換。

表7.13偏移二進(jìn)制補(bǔ)碼與十進(jìn)制數(shù)及二進(jìn)制補(bǔ)碼的對(duì)應(yīng)關(guān)系

7.1.8浮點(diǎn)數(shù)和塊浮點(diǎn)數(shù)浮點(diǎn)數(shù)具有很大的動(dòng)態(tài)范圍,可以非常精確地表示一個(gè)數(shù)值。由于在執(zhí)行算術(shù)運(yùn)算時(shí)需要大量的硬件資源,所以浮點(diǎn)數(shù)記數(shù)方法的使用成本很高。塊浮點(diǎn)數(shù)記數(shù)方法廣泛用于信號(hào)處理領(lǐng)域,如執(zhí)行FFT變換,它消耗的硬件資源要比浮點(diǎn)數(shù)少得多。塊浮點(diǎn)數(shù)可以跟蹤數(shù)值動(dòng)態(tài)范圍的變化,例如做256點(diǎn)FFT變換,數(shù)據(jù)寬度為16位,動(dòng)態(tài)范圍是-32768~32767,經(jīng)過FFT的第一級(jí)運(yùn)算后,取值范圍是-65536~65535。為了保持?jǐn)?shù)據(jù)寬度不變,可以將所有256個(gè)點(diǎn)的數(shù)值均除以2,然后在寄存器中置入一個(gè)“1”,這樣通過增加一位寄存器,達(dá)到了既增加了數(shù)據(jù)的動(dòng)態(tài)范圍,又未增加數(shù)據(jù)寬度的目的。這種記數(shù)方法就是塊浮點(diǎn)數(shù)。

7.1.9數(shù)的定標(biāo)問題在進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)時(shí),我們無法將小數(shù)直接表示出來,因此需要指定小數(shù)點(diǎn)的位置,這個(gè)就是數(shù)的定標(biāo)問題。數(shù)的定標(biāo)有兩種表示方法,即Q表示法和S表示法。我們以8位數(shù)D[7..0]為例,通過表7.14分別介紹這兩種表示法所能表示的十進(jìn)制數(shù)的范圍和精度。需要注意的是,這里我們討論的均為有符號(hào)數(shù)。

表7.14數(shù)的定標(biāo)表示方法

值得注意的是Qx中x的值表示在8位數(shù)中小數(shù)位有x位,整數(shù)位有8-x位,并且它還決定了所表示數(shù)的精度為2-x,對(duì)于同樣的8位數(shù),小數(shù)點(diǎn)位置不同所表示的十進(jìn)制數(shù)是不相同的,因此表示的精度和范圍也就不同。當(dāng)x越大則精度越高,但是表示的范圍就越??;當(dāng)x越小則精度越低,但是表示的范圍就越大??梢姡瑪?shù)值范圍和精度是相互矛盾的,在設(shè)計(jì)時(shí)應(yīng)該對(duì)實(shí)際情況予以充分考慮。

下面我們來看一下Q表示法對(duì)應(yīng)的乘法運(yùn)算規(guī)律:

(1)整數(shù)×整數(shù):結(jié)果仍為整數(shù),Qx不變,小數(shù)點(diǎn)在運(yùn)算結(jié)果的D0位后面;

(2)小數(shù)×小數(shù):Qx×Qy=Qx+y。如果仍以8位數(shù)為例,則0<x<7,0<y<7,0<x+y<14。一般來說,兩個(gè)數(shù)相乘,如果一個(gè)數(shù)小數(shù)位為x位,整數(shù)位為(8-x)位,另一個(gè)數(shù)小數(shù)位為y位,整數(shù)位為(8-y)位,則兩個(gè)數(shù)相乘以后得到結(jié)果的整數(shù)位為(8-x+8-y),小數(shù)位為(x+y)。

7.2有限字長(zhǎng)的影響

模擬量值在進(jìn)入FPGA器件之前,需要A/D變換,A/D采樣時(shí)所得到的數(shù)值只能以有限字長(zhǎng)的二進(jìn)制代碼表示,與真實(shí)值之間存在偏差,這就是輸入量化誤差。提高A/D器件的采樣精度可以減小輸入量化誤差。在用FPGA器件設(shè)計(jì)數(shù)字濾波器時(shí),數(shù)字濾波器系數(shù)必須用二進(jìn)制代碼表示,并按規(guī)定位數(shù)進(jìn)行量化。由于量化處理引起量化誤差,濾波器實(shí)際系數(shù)偏離理論計(jì)算值,從而使濾波性能變差,其原因就是系數(shù)量化誤差的影響。

在數(shù)據(jù)處理電路中經(jīng)常需要進(jìn)行算術(shù)運(yùn)算,例如將兩個(gè)N位字長(zhǎng)的二進(jìn)制數(shù)做乘法運(yùn)算,乘法器的結(jié)果輸出一般用2N位字長(zhǎng)表示,這就需要舍位處理,然后再進(jìn)行下一步運(yùn)算,否則最終結(jié)果的數(shù)據(jù)寬度是難以想象的。但是舍位就引入了誤差,這種誤差屬于運(yùn)算量化誤差,也稱為運(yùn)算噪聲。為了得到精確結(jié)果,一方面可以選用合適的運(yùn)算結(jié)構(gòu),盡量減少有限字長(zhǎng)效應(yīng),另一方面可以采用合適的字長(zhǎng)以降低運(yùn)算噪聲。FPGA器件的字長(zhǎng)可以根據(jù)需要任意指定,字長(zhǎng)越大,量化誤差就越小,但與此同時(shí)電路占用的片內(nèi)資源就越多,編譯、仿真時(shí)間和系統(tǒng)成本也會(huì)因之而上升。圖7.5給出了利用FLEX10K器件實(shí)現(xiàn)4×4、8×8、12×12和16×16位乘法器所分別占用的LE和EAB的數(shù)目,由圖可見,字長(zhǎng)的增加會(huì)導(dǎo)致片內(nèi)資源占用率呈幾何級(jí)數(shù)增大。

圖7.5乘法器所占用的資源

7.3時(shí)

7.3.1全局時(shí)鐘對(duì)于一個(gè)設(shè)計(jì)項(xiàng)目來說,全局時(shí)鐘(或同步時(shí)鐘)是最簡(jiǎn)單和最可預(yù)測(cè)的時(shí)鐘。在FPGA設(shè)計(jì)中最好的時(shí)鐘方案是:由專用的全局時(shí)鐘輸入引腳驅(qū)動(dòng)單個(gè)主時(shí)鐘去控制設(shè)計(jì)項(xiàng)目中的每一個(gè)觸發(fā)器。FPGA一般都具有專門的全局時(shí)鐘引腳,在設(shè)計(jì)項(xiàng)目時(shí)應(yīng)盡量采用全局時(shí)鐘,它能夠提供器件中最短的時(shí)鐘到輸出的延時(shí)。圖7.6給出全局時(shí)鐘的一個(gè)實(shí)例,定時(shí)波形顯示出觸發(fā)器的輸入數(shù)據(jù)D[3..1]應(yīng)遵守建立時(shí)間tsu和保持時(shí)間th的約束條件。如果在應(yīng)用中不能滿足建立和保持時(shí)間的要求,則必須用時(shí)鐘同步輸入信號(hào)。

圖7.6全局時(shí)鐘

7.3.2門控時(shí)鐘在許多應(yīng)用中,整個(gè)設(shè)計(jì)項(xiàng)目都采用外部的全局時(shí)鐘是不可能或不實(shí)際的,所以通常用陣列時(shí)鐘構(gòu)成門控時(shí)鐘。門控時(shí)鐘常常同微處理器接口有關(guān),例如用地址線去控制寫脈沖。每當(dāng)用組合邏輯來控制觸發(fā)器時(shí),通常都存在著門控時(shí)鐘。在使用門控時(shí)鐘時(shí),應(yīng)仔細(xì)分析時(shí)鐘函數(shù),以避免毛刺的影響。如果設(shè)計(jì)滿足下述兩個(gè)條件,則可以保證時(shí)鐘信號(hào)不出現(xiàn)危險(xiǎn)的毛刺,門控時(shí)鐘就可以像全局時(shí)鐘一樣可靠工作:*驅(qū)動(dòng)時(shí)鐘的邏輯必須只包含一個(gè)“與門”或一個(gè)“或門”,如果采用任何附加邏輯,就會(huì)在某些工作狀態(tài)下出現(xiàn)由于邏輯競(jìng)爭(zhēng)而產(chǎn)生的毛刺。

*邏輯門的一個(gè)輸入作為實(shí)際的時(shí)鐘,而該邏輯門的所有其它輸入必須當(dāng)成地址或控制線,它們遵守相對(duì)于時(shí)鐘的建立和保持時(shí)間的約束。圖7.7和圖7.8是可靠門控時(shí)鐘的實(shí)例。在圖7.7中,用一個(gè)“與門”產(chǎn)生門控時(shí)鐘,在圖7.8中,用一個(gè)“或門”產(chǎn)生門控時(shí)鐘。在這兩個(gè)實(shí)例中,將引腳nWR和nWE作為時(shí)鐘引腳,引腳ADD[3..0]是地址引腳,兩個(gè)觸發(fā)器的數(shù)據(jù)是信號(hào)D[n..1]經(jīng)組合邏輯產(chǎn)生的。

圖7.7“與門”門控時(shí)鐘

圖7.8“或門”門控時(shí)鐘

設(shè)計(jì)人員往往可以將門控時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘以改善設(shè)計(jì)項(xiàng)目的可靠性。圖7.9給出如何用全局時(shí)鐘重新設(shè)計(jì)圖7.7所示的電路,即讓地址線去控制D觸發(fā)器的輸入使能。許多FPGA設(shè)計(jì)軟件,如MAX+PLUSⅡ、QuartusⅡ軟件都提供這種帶使能端的D觸發(fā)器。當(dāng)ENA為高電平時(shí),D輸入端的狀態(tài)被時(shí)鐘激勵(lì)到觸發(fā)器中,當(dāng)ENA為低電平時(shí),則維持現(xiàn)有狀態(tài)。

圖7.9將“與門”門控時(shí)鐘轉(zhuǎn)化成全局時(shí)鐘圖7.10給出了一個(gè)不可靠的門控時(shí)鐘的例子。3位同步加法計(jì)數(shù)器的RCO輸出用來作為觸發(fā)器的時(shí)鐘端,由于計(jì)數(shù)器的多個(gè)輸出都起到了時(shí)鐘的作用,這就違反了可靠門控時(shí)鐘所需的條件之一。在產(chǎn)生RCO信號(hào)的觸發(fā)器中,沒有一個(gè)能考慮為實(shí)際的時(shí)鐘,這是因?yàn)樗杏|發(fā)器幾乎在相同的時(shí)刻都發(fā)生翻轉(zhuǎn),但是我們并不能保證在FPGA器件內(nèi)部QA、QB、QC到D觸發(fā)器的布線長(zhǎng)短一致。因此,正如圖7.10的時(shí)間波形所示,在計(jì)數(shù)器從3計(jì)到4時(shí),RCO線上會(huì)出現(xiàn)毛刺(假設(shè)QC到D觸發(fā)器的路徑較短,即QC的輸出先翻轉(zhuǎn))。圖7.10不可靠的門控時(shí)鐘

圖7.11給出一種可靠的全局時(shí)鐘控制電路,它是圖7.10的改進(jìn),即用RCO來控制D觸發(fā)器的使能輸入。這個(gè)改進(jìn)并不需要增加PLD的邏輯單元,而且圖7.11電路等效于圖7.10電路,但卻可靠得多。

圖7.11不可靠的門控時(shí)鐘轉(zhuǎn)換為全局時(shí)鐘

7.3.3多級(jí)邏輯時(shí)鐘圖7.12給出了一個(gè)含有險(xiǎn)象的多級(jí)時(shí)鐘的例子。時(shí)鐘由SEL引腳控制的多路選擇器輸出端提供,多路選擇器的輸入是時(shí)鐘(CLK)和該時(shí)鐘的2分頻(DIV2)。由圖7.12的定時(shí)波形圖可以看出,在兩個(gè)時(shí)鐘均為“1”的情況下,當(dāng)SEL的狀態(tài)改變時(shí),存在靜態(tài)險(xiǎn)象。多級(jí)邏輯的險(xiǎn)象是可以去除的,例如可以插入“冗余邏輯”到設(shè)計(jì)項(xiàng)目中,但是FPGA編譯器在邏輯綜合時(shí)會(huì)去掉這些冗余邏輯,這就使得驗(yàn)證險(xiǎn)象是否真正被去除變得十分困難。為此,設(shè)計(jì)人員應(yīng)必須尋求其它方法來實(shí)現(xiàn)電路的功能。

圖7.12有靜態(tài)險(xiǎn)象的多級(jí)時(shí)鐘圖7.13給出了圖7.12電路的一種單級(jí)時(shí)鐘的替代方案。圖中SEL引腳和DIV2信號(hào)用作D觸發(fā)器的使能輸入端,而不是用于該觸發(fā)器的時(shí)鐘引腳。采用這個(gè)電路并不需要附加邏輯單元,工作卻可靠得多了。不同的系統(tǒng)需要采用不同的方法消除多級(jí)時(shí)鐘,并沒有一個(gè)固定的模式。

圖7.13無靜態(tài)險(xiǎn)象的單級(jí)時(shí)鐘

7.3.4行波時(shí)鐘所謂行波時(shí)鐘是指一個(gè)觸發(fā)器的輸出用作另一個(gè)觸發(fā)器的時(shí)鐘輸入。如果仔細(xì)設(shè)計(jì),行波時(shí)鐘可以像全局時(shí)鐘一樣可靠工作,但是行波時(shí)鐘使得與電路有關(guān)的定時(shí)計(jì)算變得很復(fù)雜。行波時(shí)鐘在行波鏈上各觸發(fā)器時(shí)鐘之間產(chǎn)生較大的時(shí)間偏移,并且會(huì)超出最壞情況下的建立時(shí)間、保持時(shí)間和電路中時(shí)鐘到輸出的延時(shí),使系統(tǒng)的實(shí)際速度下降。用計(jì)數(shù)翻轉(zhuǎn)型觸發(fā)器構(gòu)成異步計(jì)數(shù)器時(shí),常采用行波時(shí)鐘,一個(gè)觸發(fā)器的輸出作為時(shí)鐘控制下一個(gè)觸發(fā)器的輸入,參見圖7.14。同步計(jì)數(shù)器通常是代替異步計(jì)數(shù)器的更好方案,這是因?yàn)閮烧咝枰瑯佣嗟暮陠卧接?jì)數(shù)器有較短的時(shí)鐘到輸出的延時(shí)。圖7.15所示為具有全局時(shí)鐘的同步計(jì)數(shù)器,這個(gè)3位計(jì)數(shù)器是圖7.14異步計(jì)數(shù)器的替代電路,它用了同樣的3個(gè)邏輯單元,卻有較高的工作速度。

圖7.14行波時(shí)鐘

圖7.15行波時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘

7.3.5多時(shí)鐘系統(tǒng)圖7.16給出了一個(gè)多時(shí)鐘系統(tǒng)的實(shí)例。CLK_A用于控制REG_A,CLK_B用于控制REG_B。由于REG_A驅(qū)動(dòng)著進(jìn)入REG_B的組合邏輯,由定時(shí)波形顯示出CLK_A的上升沿相對(duì)于CLK_B的上升沿有建立時(shí)間和保持時(shí)間的要求。由于REG_B不驅(qū)動(dòng)REG_A的邏輯,CLK_B的上升沿相對(duì)于CLK_A沒有建立時(shí)間的要求。此外,由于時(shí)鐘的下降沿不影響觸發(fā)器的狀態(tài),所以CLK_A和CLK_B的下降沿之間沒有時(shí)間上的要求。在圖7.16中,如果CLK_A和CLK_B是相互獨(dú)立的,那么它們之間的建立時(shí)間和保持時(shí)間的要求是不能保證的,所以在REG_A的輸出饋送到REG_B之前,必須將電路同步化。

圖7.16多時(shí)鐘系統(tǒng)

圖7.17具有同步寄存器輸出的多時(shí)鐘系統(tǒng)

在許多應(yīng)用中只將異步信號(hào)同步化還是不夠的,當(dāng)系統(tǒng)中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數(shù)據(jù)的建立和保持時(shí)間很難得到保證,設(shè)計(jì)人員將面臨復(fù)雜的時(shí)間分析問題。最好的方法是將所有非同源時(shí)鐘同步化。使用FPGA內(nèi)部的鎖相環(huán)(PLL)是一個(gè)效果很好的方法,但并不是所有FPGA都帶有PLL,而且?guī)в蠵LL功能的芯片大多價(jià)格昂貴。這時(shí)就需要使用帶使能端的D觸發(fā)器,并引入一個(gè)高頻時(shí)鐘來實(shí)現(xiàn)信號(hào)的同步化。如圖7.18所示,系統(tǒng)有兩個(gè)不同源時(shí)鐘,一個(gè)為3MHz,一個(gè)為5MHz,不同的觸發(fā)器使用不同的時(shí)鐘。

圖7.18不同源時(shí)鐘

為了保證系統(tǒng)能夠穩(wěn)定工作,現(xiàn)引入一個(gè)20MHz時(shí)鐘,將3MHz和5MHz時(shí)鐘同步化,如圖7.19所示。該圖中的D觸發(fā)器及緊隨其后的“非門”和“與門”構(gòu)成了時(shí)鐘上升沿檢測(cè)電路,檢測(cè)電路的輸出分別被命名為3M_EN和5M_EN。把20MHz的高頻時(shí)鐘作為系統(tǒng)時(shí)鐘,輸入到所有觸發(fā)器的時(shí)鐘端,同時(shí)讓3M_EN和5M_EN控制所有觸發(fā)器的使能端。也就是說在圖7.18中接3MHz時(shí)鐘的觸發(fā)器,接20MHz時(shí)鐘,同時(shí)用3M_EN控制該觸發(fā)器的使能端,在圖7.18中接5MHz時(shí)鐘的觸發(fā)器,也接20MHz時(shí)鐘,同時(shí)用5M_EN控制該觸發(fā)器的使能端,這樣我們就實(shí)現(xiàn)了任何非同源時(shí)鐘同步化。

圖7.19同步化任意非同源時(shí)鐘

7.3.6時(shí)鐘網(wǎng)絡(luò)問題這里以Altera公司的STRATIX-EP1SF780C7芯片為例,來說明利用內(nèi)嵌鎖相環(huán)設(shè)計(jì)時(shí)鐘網(wǎng)絡(luò)時(shí)需要注意的問題。該芯片具有六個(gè)內(nèi)嵌鎖相環(huán),分別為四個(gè)快速型鎖相環(huán)PLL1、PLL2、PLL3、PLL4和兩個(gè)增強(qiáng)型鎖相環(huán)PLL5、PLL6,其輸入時(shí)鐘和輸出時(shí)鐘管腳都是特定的,不能用一般的IO口來代替鎖相環(huán)的時(shí)鐘輸入和輸出端口,更不能將快速型的輸入輸出端口和增強(qiáng)型的輸入輸出端口交叉使用,但是不用的鎖相環(huán)輸出端口可以用作一般的IO端口。FPGA芯片內(nèi)部通過分配的管腳來識(shí)別是快速型鎖相環(huán)還是增強(qiáng)型鎖相環(huán),以及是哪一個(gè)快速型或者增強(qiáng)型鎖相環(huán)。在QuartusⅡ仿真平臺(tái)下,輸入“Altpll”就可以將內(nèi)嵌鎖相環(huán)調(diào)出,然后通過向?qū)гO(shè)置一些基本參數(shù),如選用的芯片系列和類型、輸入時(shí)鐘頻率、分倍頻比、使用的鎖相環(huán)類型、輸出時(shí)鐘端口等,就可以用該鎖相環(huán)產(chǎn)生需要的時(shí)鐘頻率。

無論是快速型鎖相環(huán)還是增強(qiáng)型鎖相環(huán),其分倍頻系數(shù)都有一定范圍,如果分倍頻比參數(shù)超出這個(gè)范圍,鎖相環(huán)就不能工作。根據(jù)已知的輸入時(shí)鐘和需要得到的輸出時(shí)鐘可以計(jì)算出分倍頻比,實(shí)際設(shè)計(jì)時(shí)這個(gè)分倍頻比很可能不在內(nèi)嵌鎖相環(huán)所規(guī)定的分倍頻系數(shù)范圍內(nèi),這時(shí)就需要利用幾個(gè)鎖相環(huán)來完成時(shí)鐘網(wǎng)絡(luò)的設(shè)計(jì)。假設(shè)時(shí)鐘網(wǎng)絡(luò)的分倍頻比為,但是這一分倍頻比不能滿足內(nèi)嵌鎖相環(huán)的要求,于是可將其分解為:

其中分倍頻比均滿足內(nèi)嵌鎖相環(huán)的要求。這時(shí)可以用兩個(gè)快速型和一個(gè)增強(qiáng)型鎖相環(huán)分別執(zhí)行分倍頻操作,以完成上述時(shí)鐘網(wǎng)絡(luò)的設(shè)計(jì)。由于FPGA芯片內(nèi)部鎖相環(huán)設(shè)計(jì)中存在一些約束條件,如快速型鎖相環(huán)和增強(qiáng)型鎖相環(huán)不能在片內(nèi)互連,增強(qiáng)型鎖相環(huán)之間也不能在片內(nèi)互連,因此可將二個(gè)快速型鎖相環(huán)級(jí)聯(lián)的輸出端和增強(qiáng)型鎖相環(huán)的輸入端通過芯片的I/O引腳引出,并在芯片外部硬件相連,如圖7.20所示。圖7-20鎖相環(huán)的片外連接

7.4建立和保持時(shí)間

1.建立和保持時(shí)間圖7.21建立時(shí)間和保持時(shí)間“建立時(shí)間”定義為在時(shí)鐘跳變前數(shù)據(jù)必須保持穩(wěn)定(無跳變)的時(shí)間?!氨3謺r(shí)間”定義為在時(shí)鐘跳變后數(shù)據(jù)必須保持穩(wěn)定的時(shí)間,如圖7.21所示。每一種具有時(shí)鐘和數(shù)據(jù)輸入的同步數(shù)字電路都會(huì)在技術(shù)指標(biāo)表中規(guī)定這兩種時(shí)間。數(shù)據(jù)穩(wěn)定傳輸必須滿足建立和保持時(shí)間的要求,否則輸出數(shù)據(jù)就可能有錯(cuò)誤,或變得不穩(wěn)定。在FPGA設(shè)計(jì)中,應(yīng)對(duì)信號(hào)的建立和保持時(shí)間做充分考慮,盡量避免在數(shù)據(jù)建立時(shí)間內(nèi)或其附近讀取數(shù)據(jù)。對(duì)于級(jí)聯(lián)的功能模塊或者數(shù)字邏輯器件,后一模塊或器件的工作時(shí)鐘一般取前一模塊或器件工作時(shí)鐘的反相信號(hào),這樣就可以保證時(shí)鐘的邊沿位于數(shù)據(jù)的保持時(shí)間內(nèi)。圖7.21建立時(shí)間和保持時(shí)間

TimeQuest通過比較不同的到達(dá)時(shí)間要求,來判斷“建立時(shí)間”和“保持時(shí)間”是否滿足條件,進(jìn)行“建立時(shí)間”和“保持時(shí)間”的檢查。確保時(shí)間信號(hào)不能太遲也不能太早到達(dá)目標(biāo)寄存器。

2.發(fā)射沿和鎖存沿

TimeQuest中,時(shí)鐘“發(fā)射沿”定義為在一個(gè)寄存器到寄存器的路徑中激活源寄存器的時(shí)鐘沿,“鎖存沿”定義為激活目標(biāo)寄存器并捕獲數(shù)據(jù)的時(shí)鐘沿,如圖7.22所示。圖中CLKA的第一個(gè)上升沿為“發(fā)射沿”,CLKB的第二個(gè)上升沿為“鎖存沿”。TimeQuestTimingAnalyzer中使用約束條件可以定義這個(gè)邊沿關(guān)系。TimeQuest可以通過分析時(shí)序路徑中發(fā)射沿和鎖存沿之間的延遲來測(cè)量設(shè)計(jì)的性能。圖7.22發(fā)射沿和鎖存沿

3.?dāng)?shù)據(jù)和時(shí)鐘到達(dá)時(shí)間

TimeQuest中,“數(shù)據(jù)到達(dá)時(shí)間”定義為對(duì)應(yīng)數(shù)據(jù)的時(shí)鐘到達(dá)一個(gè)寄存器D引腳的時(shí)間,“時(shí)鐘到達(dá)時(shí)間”定義為對(duì)應(yīng)的時(shí)鐘信號(hào)到達(dá)一個(gè)寄存器時(shí)鐘引腳的時(shí)間,如圖7.23所示。數(shù)據(jù)到達(dá)時(shí)間的公式為:發(fā)射邊沿?+Tclk1+μTco+Tdata;時(shí)鐘到達(dá)時(shí)間的公式為:鎖存邊沿+Tclk2。TimeQuest沿每個(gè)時(shí)序路徑分析數(shù)據(jù)和時(shí)鐘的到達(dá)時(shí)間。圖7.23數(shù)據(jù)與時(shí)鐘到達(dá)時(shí)間7.5冒

險(xiǎn)

現(xiàn)

信號(hào)在FPGA器件內(nèi)部通過連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、工作電壓、溫度等條件的影響。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過渡時(shí)間。由于存在這兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯的輸出狀態(tài)不確定,往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱為“毛刺”。如果一個(gè)組合邏輯電路中有“毛刺”出現(xiàn),就說明該電路存在“冒險(xiǎn)”。

圖7.22給出了一個(gè)邏輯冒險(xiǎn)的例子,從圖7.23的仿真波形可以看出,“A、B、C、D”四個(gè)輸入信號(hào)的高低電平變換不是同時(shí)發(fā)生的,導(dǎo)致輸出信號(hào)“OUT”出現(xiàn)了毛刺。由于信號(hào)路徑長(zhǎng)度的不同,譯碼器、數(shù)值比較器以及狀態(tài)計(jì)數(shù)器等器件本身容易出現(xiàn)冒險(xiǎn)現(xiàn)象,將這類器件直接連接到時(shí)鐘輸入端、清零或置位端口的設(shè)計(jì)方法是錯(cuò)誤的,它可能會(huì)導(dǎo)致嚴(yán)重的后果。

圖7.24存在邏輯冒險(xiǎn)的電路示例

圖7.25圖7.24所示電路的仿真波形

冒險(xiǎn)往往會(huì)影響到邏輯電路的穩(wěn)定性,時(shí)鐘端口、清零和置位端口對(duì)毛刺信號(hào)十分敏感,任何一點(diǎn)毛刺都可能會(huì)使系統(tǒng)出錯(cuò),因此判斷邏輯電路中是否存在冒險(xiǎn)以及如何避免冒險(xiǎn)是設(shè)計(jì)人員必須要考慮的問題。判斷一個(gè)邏輯電路在某些輸入信號(hào)發(fā)生變化時(shí)是否會(huì)產(chǎn)生冒險(xiǎn),可以從邏輯函數(shù)的卡諾圖或邏輯函數(shù)表達(dá)式來進(jìn)行判斷。對(duì)此問題感興趣的讀者可以參考有關(guān)脈沖與數(shù)字電路方面的書籍和文章。

在數(shù)字電路設(shè)計(jì)中,采用格雷碼計(jì)數(shù)器、同步電路等,可以大大減少毛刺,但它并不能完全消除毛刺。毛刺并不是對(duì)所有的輸入都有危害,例如D觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并且滿足數(shù)據(jù)的建立和保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害,因此我們可以說D觸發(fā)器的D輸入端對(duì)毛刺不敏感。消除毛刺信號(hào)的方法有很多,通常使用“采樣”的方法。一般說來,冒險(xiǎn)出現(xiàn)在信號(hào)發(fā)生電平轉(zhuǎn)換的時(shí)刻,也就是說在輸出信號(hào)的建立時(shí)間內(nèi)會(huì)發(fā)生冒險(xiǎn),而在輸出信號(hào)的保持時(shí)間內(nèi)是不會(huì)有毛刺信號(hào)出現(xiàn)的。如果在輸出信號(hào)的保持時(shí)間內(nèi)對(duì)其進(jìn)行“采樣”,就可以消除毛刺信號(hào)的影響。

有兩種基本的采樣方法:一種方法是在輸出信號(hào)的保持時(shí)間內(nèi),用一定寬度的高電平脈沖與輸出信號(hào)做邏輯“與”運(yùn)算,由此獲取輸出信號(hào)的電平值。圖7.26說明了這種方法,采樣脈沖信號(hào)從輸入引腳“SAMPLE”引入。從圖7.27的仿真波形上可以看出,毛刺信號(hào)出現(xiàn)在“TEST”引腳上,而“OUT”引腳上的毛刺已被消除了;另一種方法是利用D觸發(fā)器的D輸入端對(duì)毛刺信號(hào)不敏感的特點(diǎn),在輸出信號(hào)的保持時(shí)間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號(hào)。這種方法與后面將要提到的流水線操作技術(shù)(Pipelining)比較相似。圖7.28給出了這種方法的示范電路,圖7.29是仿真波形。

圖7.26消除毛刺信號(hào)的方法之一

圖7.27圖7.26所示電路的仿真波形

圖7.28消除毛刺信號(hào)方法之二

圖7.29圖7.28所示電路的仿真波形

去除FPGA器件輸出引腳上的毛刺,還可以采用低通濾波的方法。由于毛刺信號(hào)的持續(xù)時(shí)間很短,從頻譜上分析,毛刺信號(hào)相對(duì)于有用信號(hào)來講,它的能量分布在一個(gè)很寬的頻帶上。所以在對(duì)輸出波形的邊沿要求不高的情況下,在FPGA的輸出引腳上串接一個(gè)RC電路,構(gòu)成一個(gè)低通濾波器,能夠?yàn)V除毛刺信號(hào)的大部分能量,如圖7.30所示。圖中給出濾波前后“A”點(diǎn)和“A'”點(diǎn)處的波形,毛刺信號(hào)經(jīng)過RC低通濾波器后,殘余信號(hào)很小,不會(huì)對(duì)后續(xù)電路帶來危害。為了避免使正常信號(hào)的波形畸變過于嚴(yán)重,應(yīng)仔細(xì)選擇電阻和電容的參數(shù)。

圖7.30利用RC濾波器濾除毛刺

7.6清零和置位信號(hào)

清零和置位信號(hào)對(duì)毛刺也是非常敏感的,最好的清零和置位信號(hào)是從器件的輸入引腳直接引入。給數(shù)字邏輯電路設(shè)置一個(gè)主復(fù)位“CLRN”引腳是常用的好方法,該方法是通過主復(fù)位引腳給電路中每個(gè)功能單元饋送清零或置位信號(hào)。與全局時(shí)鐘引腳類似,幾乎所有FPGA器件都有專門的全局清零引腳和全局置位引腳。如果必須從器件內(nèi)產(chǎn)生清零或置位信號(hào),則要按照“門控時(shí)鐘”的設(shè)計(jì)原則去建立這些信號(hào),確保輸入信號(hào)中不會(huì)出現(xiàn)毛刺信號(hào)。若采用門控清零或者門控置位,則單個(gè)引腳或者觸發(fā)器作為清零或置位的源,而將其它信號(hào)作為地址或控制線。在清零或置位的有效期間,地址或控制線必須保持穩(wěn)定,決不能用多級(jí)邏輯或包含競(jìng)爭(zhēng)狀態(tài)的單級(jí)邏輯產(chǎn)生清零或置位信號(hào)。

7.7信

號(hào)

時(shí)

對(duì)FPGA來說,由于路徑必須通過電晶體開關(guān),因此連線延時(shí)一直是路徑延時(shí)的主要部分。信號(hào)每通過一個(gè)邏輯單元,就會(huì)產(chǎn)生一定的延時(shí)。延時(shí)的大小除了受路徑長(zhǎng)短的影響外,還受器件內(nèi)部結(jié)構(gòu)特點(diǎn)、制造工藝、工作溫度、工作電壓等條件的影響?,F(xiàn)有的FPGA設(shè)計(jì)軟件都可以對(duì)內(nèi)部延時(shí)進(jìn)行比較準(zhǔn)確的預(yù)測(cè)。器件內(nèi)部延時(shí)越大,器件的工作速度也就越低,所以降低信號(hào)傳輸延時(shí)是提高處理速度的關(guān)鍵。

而在某些情況下,需要對(duì)信號(hào)進(jìn)行一定的延時(shí)處理,以完成特定的功能。利用D觸發(fā)器可以在時(shí)鐘的控制下對(duì)信號(hào)進(jìn)行延時(shí),這種方法的最小延時(shí)時(shí)間可以是時(shí)鐘周期的一半。圖7.31所示電路可以將輸入信號(hào)“DATAIN”分別延時(shí)0.5和1.5個(gè)時(shí)鐘周期,“DATAOUT1”是將“DATAIN”延時(shí)0.5個(gè)時(shí)鐘周期后的輸出信號(hào),“DATAOUT2”是將“DATAIN”延時(shí)1.5個(gè)時(shí)鐘周期后的輸出信號(hào)。圖7.32給出了仿真波形。

圖7.31利用D觸發(fā)器進(jìn)行信號(hào)延時(shí)

圖7.32信號(hào)延時(shí)的波形仿真

如果需要比較精確的延時(shí),則必須引入高速時(shí)鐘信號(hào),利用D觸發(fā)器、移位寄存器或計(jì)數(shù)器來實(shí)現(xiàn)。延時(shí)時(shí)間的長(zhǎng)短可通過設(shè)置D觸發(fā)器或移位寄存器的級(jí)數(shù)以及計(jì)數(shù)器的計(jì)數(shù)周期來調(diào)整,而延時(shí)的時(shí)間分辨率則由高速時(shí)鐘的周期來決定,高速時(shí)鐘頻率越高,時(shí)間分辨率也越高。數(shù)據(jù)信號(hào)經(jīng)過延時(shí)后,可以用數(shù)據(jù)時(shí)鐘重新讀取數(shù)據(jù),以消除延時(shí)引入的相差。利用D觸發(fā)器和移位寄存器作為延時(shí)器件,不能實(shí)現(xiàn)較長(zhǎng)時(shí)間的延時(shí),這是因?yàn)槭褂眠^多的D觸發(fā)器和移位寄存器會(huì)嚴(yán)重消耗FPGA器件的資源,降低其它單元的性能,所以長(zhǎng)時(shí)間的延時(shí)單元可以通過計(jì)數(shù)器來實(shí)現(xiàn)。無論是用D觸發(fā)器、移位寄存器還是用計(jì)數(shù)器,所構(gòu)成的延時(shí)單元都能夠可靠工作,其延時(shí)時(shí)間受外界因素影響很小。

在使用分立的數(shù)字邏輯器件時(shí),為了將某一信號(hào)延時(shí)一段時(shí)間,有些設(shè)計(jì)人員往往在此信號(hào)后串接一些非門或其它門電路,通過增加冗余電路來獲取延時(shí)。在使用FPGA器件時(shí),這種方法是不可靠的。許多FPGA設(shè)計(jì)軟件都具有邏輯優(yōu)化的功能,可以去除設(shè)計(jì)中的邏輯冗余。圖7.31是該軟件進(jìn)行邏輯優(yōu)化的一個(gè)示例,輸入信號(hào)“DATAIN1”被分成兩路,一路信號(hào)經(jīng)過3個(gè)級(jí)聯(lián)的“非門”后從“DATAOUT3”端口輸出,另一路信號(hào)經(jīng)過1個(gè)“非門”后從“DATAOUT4”端口輸出。從邏輯功能上看,“DATAOUT3”輸出信號(hào)只不過是“DATAIN1”的反相信號(hào),編譯軟件實(shí)際上是刪除了其中2個(gè)不必要的“非門”。從圖7.32的仿真波形上可以看出,“DATAOUT3”和“DATAOUT4”輸出信號(hào)的延時(shí)基本上是一樣的,也就是說在FPGA芯片內(nèi)部,兩路信號(hào)經(jīng)過了相同數(shù)目的邏輯門。

圖7.33QuartusⅡ軟件的邏輯優(yōu)化示例

圖7.34圖7.33所示電路的仿真波形

如果不希望QuartusⅡ軟件刪除冗余的“非門”,或者說希望通過冗余的邏輯引入一定的延時(shí),可以采取插入LCELL緩沖器的方法來實(shí)現(xiàn),如圖7.35所示。此時(shí)的Settings對(duì)話框(Assignment菜單)中“Analysis&SynthesisSettings\MoreSettings\IgnoresLCELLbuffers”應(yīng)設(shè)為“off”。將修改后的電路再次進(jìn)行編譯和仿真,可以得到圖7.36所示的波形仿真結(jié)果。從圖7.36的仿真波形可以看出,“DATAOUT3”端口輸出信號(hào)的延時(shí)要大于“DATAOUT4”端口輸出信號(hào)的延時(shí)。用戶可以采用相同的辦法,通過增加LCELL的數(shù)目來增加輸出信號(hào)的延時(shí)。

圖7.35修改后的電路

圖7.36圖7.35所示電路的仿真波形

7.8信

號(hào)

斜為了保證各個(gè)元件的建立保持時(shí)間,歪斜必須足夠小。若歪斜的程度大于從一邊緣敏感存儲(chǔ)器的輸出到下一級(jí)輸入的延遲時(shí)間,就能使移位寄存器的數(shù)據(jù)丟失,使同步計(jì)數(shù)器輸出發(fā)生錯(cuò)誤,故必須設(shè)法消除時(shí)鐘歪斜。減少時(shí)鐘歪斜的方法有以下幾種:

(1)采用適當(dāng)?shù)臅r(shí)鐘緩沖器,或者在邊緣敏感器件的輸出與其饋給的任何邊緣敏感器件輸入端之間加入一定的延遲以減小歪斜。

(2)嚴(yán)重的時(shí)鐘歪斜往往是由于在FPGA內(nèi)的時(shí)鐘及其它全局控制線(如復(fù)位線)使負(fù)載過重造成的,在信號(hào)線上接一串線形緩沖器,使驅(qū)動(dòng)強(qiáng)度逐步增大,從而消除時(shí)鐘歪斜。

(3)在受時(shí)鐘控制的部件之后分別接入緩沖器,并在兩個(gè)緩沖器輸出端之間接一平衡網(wǎng)絡(luò)。

(4)采用FPGA內(nèi)的PLL模塊可以對(duì)輸入時(shí)鐘進(jìn)行很好的分頻和倍頻,從而使時(shí)鐘歪斜減到最低程度。

1.最大時(shí)鐘到達(dá)歪斜用“MaximumClockArrivalSkew”(最大時(shí)鐘到達(dá)歪斜)指定在時(shí)鐘信號(hào)和不同目的寄存器之間最大可允許的時(shí)鐘到達(dá)歪斜。定時(shí)分析器比較到達(dá)寄存器時(shí)鐘端口的最長(zhǎng)時(shí)鐘路徑和最短時(shí)鐘路徑,以決定該電路是否已經(jīng)達(dá)到指定的最大時(shí)鐘歪斜。下面的等式用于計(jì)算最大時(shí)鐘到達(dá)歪斜:最大時(shí)鐘到達(dá)歪斜=最長(zhǎng)時(shí)鐘路徑-最短時(shí)鐘路徑

如圖7.37所示,如果從時(shí)鐘引腳到寄存器reg1時(shí)鐘端口的延遲為1.0ns,到達(dá)寄存器reg2時(shí)鐘端口的延遲為3.0ns,則定時(shí)分析器提供的時(shí)鐘歪斜時(shí)間為2.0ns。設(shè)計(jì)者可以使用“MaximumClockArrivalSkew”來配置一個(gè)時(shí)鐘節(jié)點(diǎn)或一組寄存器,當(dāng)使用“MaximumClockArrivalSkew”配置時(shí),F(xiàn)itter會(huì)在布局布線時(shí)進(jìn)行各種嘗試,以滿足時(shí)鐘歪斜需求。

圖7.37時(shí)鐘到達(dá)路徑

2.最大數(shù)據(jù)到達(dá)歪斜用“MaximumDataArrivalSkew”(最大數(shù)據(jù)到達(dá)歪斜)指定在數(shù)據(jù)信號(hào)和不同目的寄存器或芯片引腳之間最大可允許的數(shù)據(jù)到達(dá)歪斜。定時(shí)分析器比較到達(dá)寄存器時(shí)鐘端口的最長(zhǎng)數(shù)據(jù)到達(dá)路徑和最短數(shù)據(jù)到達(dá)路徑,以決定該電路是否已經(jīng)達(dá)到最大數(shù)據(jù)歪斜。下面的等式用于計(jì)算最大數(shù)據(jù)到達(dá)歪斜:最大數(shù)據(jù)到達(dá)歪斜=最長(zhǎng)數(shù)據(jù)到達(dá)路徑-最短數(shù)據(jù)到達(dá)路徑

如圖7.38所示,如果到芯片輸出引腳out1的數(shù)據(jù)到達(dá)時(shí)間為2.0ns,到芯片輸出引腳out2的數(shù)據(jù)到達(dá)時(shí)間1.5ns,到芯片輸出引腳out3的數(shù)據(jù)到達(dá)時(shí)間為1.0ns,則定時(shí)分析器提供的時(shí)鐘歪斜時(shí)間為1.0ns。同樣,當(dāng)設(shè)計(jì)者使用“MaximumClockArrivalSkew”配置時(shí),F(xiàn)itter會(huì)在布局布線時(shí)進(jìn)行各種嘗試,以滿足數(shù)據(jù)歪斜需求。

圖7.38數(shù)據(jù)到達(dá)路徑

7.9流

流水線操作(Pilelining)技術(shù)通過在長(zhǎng)延遲的組合邏輯中插入觸發(fā)器,以減小毛刺信號(hào)產(chǎn)生的概率。同時(shí),流水線操作還以有助于提高系統(tǒng)的時(shí)鐘速率。電路的處理速度是指時(shí)鐘的頻率,時(shí)鐘頻率愈高,電路處理數(shù)據(jù)的時(shí)間間隔越短,電路在單位時(shí)間內(nèi)處理的數(shù)據(jù)量就愈大。如何才能提高電路的運(yùn)行速度呢,我們首先研究一下圖7.39給出的一個(gè)數(shù)據(jù)傳輸模型。

圖7.39未采用流水線操作的數(shù)據(jù)傳輸模型

圖7.40采用流水線操作的數(shù)據(jù)傳輸模型

圖7.41流水線設(shè)計(jì)方法

7.10電路結(jié)構(gòu)與速度之間的關(guān)系

在FPGA設(shè)計(jì)中,可以采用兩種設(shè)計(jì)思路:一種思路是將設(shè)計(jì)重點(diǎn)放在處理速度上,旨在達(dá)到較高的MSPS值,滿足高速應(yīng)用;另一種思路是將設(shè)計(jì)重點(diǎn)定位于FPGA芯片的資源利用率上,以較低的成本滿足對(duì)低速處理的要求。在這里,我們首先討論一個(gè)最為常用的設(shè)計(jì)思想,即“面積與速度互換”原則?!懊娣e”指一個(gè)設(shè)計(jì)消耗FPGA片內(nèi)的資源的數(shù)量,包括邏輯單元、存儲(chǔ)單元、連線資源和PLL等,它與器件成本是密切相關(guān)的?!八俣取笔侵冈撛O(shè)計(jì)在芯片上穩(wěn)定運(yùn)行時(shí)所能夠達(dá)到的最高時(shí)鐘頻率。在現(xiàn)有的技術(shù)條件下,我們無法做到一個(gè)設(shè)計(jì)能夠以最低的成本實(shí)現(xiàn)最高的工作速度,而只能是“面積”與“速度”性能的折中。所以,F(xiàn)PGA電路設(shè)計(jì)目標(biāo)應(yīng)該是在滿足時(shí)鐘頻率的前提下,占用最小的芯片面積,或者在所規(guī)定的面積下,使設(shè)計(jì)的工作頻率更高。

這一設(shè)計(jì)目標(biāo)充分地體現(xiàn)了“面積”和“速度”的平衡的思想。而在不同的實(shí)際情況下,有的設(shè)計(jì)強(qiáng)調(diào)電路的工作速度,有的設(shè)計(jì)注重器件的成本,這就需要打破“面積”和“速度”之間的平衡,而彰顯某一方面的性能,從而出現(xiàn)了“面積與速度互換”原則,有的地方又稱其為“空間與時(shí)間的互換”。通俗地說,這一原則就是通過犧牲電路的工作速度來減小芯片資源的消耗,或者通過使用更多的片內(nèi)資源來提供電路的工作速度。實(shí)現(xiàn)“面積與速度互換”原則的方法有很多,前一節(jié)介紹的流水線處理方法就是其中的一種。此外,串并行處理方法、“乒乓”算法和模塊的分時(shí)復(fù)用方法也體現(xiàn)了“面積與速度互換”的思想。

在高速應(yīng)用中,除了采用流水線設(shè)計(jì)方法以外,還可以采用并行處理方法。并行處理方法就是將待處理的數(shù)據(jù)流轉(zhuǎn)換為多路并行數(shù)據(jù)流,同時(shí)將功能模塊進(jìn)行硬件復(fù)制,每一功能模塊分別處理其中的一路數(shù)據(jù)流。并行處理方法的處理速度等于各個(gè)功能模塊處理速度之和,通過增加并行處理的支路數(shù)目,可以很容易地實(shí)現(xiàn)高速處理。例如同步碼捕獲過程中,并行設(shè)置多路同步碼檢測(cè)器,每路同步碼檢測(cè)器分別對(duì)應(yīng)不同的碼相位,這就能夠在最短的時(shí)間內(nèi)實(shí)現(xiàn)同步碼捕獲。如果并行設(shè)置的同步碼檢測(cè)器覆蓋了同步碼的所有相位,就可在一個(gè)同步碼周期內(nèi)捕獲到該碼。顯然,并行處理的方法通過硬件復(fù)制來實(shí)現(xiàn)高速處理,就是用芯片的“面積”來換取“速度”的提升。

在對(duì)速度要求不高但對(duì)硬件成本非常敏感的設(shè)計(jì)中,可以通過串行處理方法、“乒乓”算法或模塊的分時(shí)復(fù)用方法,用“速度”來換取“面積”,以降低硬件成本。與并行處理方法相對(duì)應(yīng)的串行處理方法,可以用較低的速度和成本實(shí)現(xiàn)設(shè)計(jì)。還以前面提到的同步碼捕獲為例,如果采用串行檢測(cè)的方法,只需要一個(gè)同步碼檢測(cè)器,但捕獲到該碼的時(shí)間最長(zhǎng)為同步碼周期與碼長(zhǎng)的乘積。

“乒乓算法”主要用于基于數(shù)據(jù)塊的處理算法中,如每次處理的數(shù)據(jù)單元是一幀或一個(gè)時(shí)隙內(nèi)的數(shù)據(jù)。由于數(shù)據(jù)流是連續(xù)輸入的,而完成一幀或一個(gè)時(shí)隙的處理總是需要消耗一定的時(shí)間,處理期間輸入的數(shù)據(jù)必須進(jìn)行緩存。圖7.40所示的乒乓操作處理流程為:輸入數(shù)據(jù)流通過“輸入數(shù)據(jù)選擇單元”將數(shù)據(jù)流等時(shí)分配到兩個(gè)數(shù)據(jù)緩存器,在第一個(gè)緩沖周期,將輸入的數(shù)據(jù)流緩存到“緩存器1”;在第2個(gè)緩沖周期,通過“輸入數(shù)據(jù)選擇單元”的切換,將輸入的數(shù)據(jù)流緩存到“緩存器2”,同時(shí)將“緩存器1”中的數(shù)據(jù)通過“輸出數(shù)據(jù)選擇單元”的選擇,送到“算法處理模塊”進(jìn)行運(yùn)算處理;在第3個(gè)緩沖周期通過“輸入數(shù)據(jù)選擇單元”的再次切換,將輸入的數(shù)據(jù)流緩存到“緩存器1”,同時(shí)將“緩存器2”中的數(shù)據(jù)通過“輸入數(shù)據(jù)選擇單元”切換,送到“算法處理模塊”進(jìn)行運(yùn)算處理,如此循環(huán)。

圖7.42乒乓操作算法示例

可見,乒乓操作就是通過“輸入數(shù)據(jù)選擇單元”和“輸出數(shù)據(jù)選擇單元”按節(jié)拍、相互配合的切換,將經(jīng)過緩沖的數(shù)據(jù)流沒有停頓地送到“算法處理模塊”進(jìn)行運(yùn)算與處理。把乒乓操作模塊當(dāng)做一個(gè)整體,站在這個(gè)模塊的兩端看數(shù)據(jù),輸入數(shù)據(jù)流和輸出數(shù)據(jù)流都是連續(xù)不斷的,沒有任何停頓。需要指出的是,在算法處理模塊的處理速度不低于輸入數(shù)據(jù)流的速率時(shí),可以采用“乒乓算法”,反之則需要采用并行處理算法。

將模塊的分時(shí)復(fù)用方法體現(xiàn)到我們?nèi)粘I钪?,其?shí)就是一種最為常見資源共享的方法,它將某些功能模塊作為一個(gè)公用的資源,根據(jù)需求進(jìn)行分配。比如說圖書館里的圖書資料,所有讀者均可申請(qǐng)借閱,借閱者在某一時(shí)間段內(nèi)專享該圖書資料,閱畢后又收歸公用。這種方法能以較少的資源滿足最大化的需求。在FPGA設(shè)計(jì)中,將某些通用的功能模塊作為公用資源,讓其在不同的時(shí)間段分別處理不同的數(shù)據(jù)流,就可節(jié)省大量的芯片“面積”。例如,在實(shí)現(xiàn)圖7.41(a)所示的8階FIR濾波器時(shí),就可采用這種方法。式7.1為8階FIR濾波器的數(shù)學(xué)表達(dá)式,其中需要8個(gè)乘法器和7個(gè)加法器來進(jìn)行數(shù)據(jù)加權(quán)求和。

(7.1)當(dāng)數(shù)據(jù)位寬較大時(shí),乘法器所占的芯片資源是很大的,所以當(dāng)數(shù)據(jù)流速率相對(duì)較低時(shí),可以將一個(gè)乘法器和一個(gè)加法器分時(shí)復(fù)用,以取代原來所有的乘法器和加法器,如圖7.43(b)所示。在圖7.43(b)中,輸入數(shù)據(jù)流中的每一位數(shù)據(jù)在8倍率時(shí)鐘的驅(qū)動(dòng)下,依次進(jìn)行系數(shù)加權(quán)和數(shù)值累加,最終實(shí)現(xiàn)FIR濾波的功能。在模塊分時(shí)復(fù)用的方法中,被復(fù)用的功能模塊的工作速度是比較高的,所以合理的設(shè)計(jì)復(fù)用時(shí)序,是實(shí)現(xiàn)該方法的關(guān)鍵。另外,F(xiàn)PGA的動(dòng)態(tài)系統(tǒng)重構(gòu)技術(shù)或“可再配置計(jì)算”(ConfigurableComputing)技術(shù)能夠?qū)崟r(shí)更新FPGA器件的全部和部分配置數(shù)據(jù),使同一個(gè)FPGA芯片在不同的時(shí)間段里具備不同的處理功能,這也是利用了模塊的分時(shí)復(fù)用思想。

圖7.43模塊的分時(shí)復(fù)用方法示例

7.11器件結(jié)構(gòu)與處理算法的匹配

從大的方面講,對(duì)于一個(gè)硬件系統(tǒng),如何進(jìn)行模塊花費(fèi)與任務(wù)分配,什么樣的算法和功能適合放在FPGA里面實(shí)現(xiàn),什么樣的算法和功能適合放在DSP和CPU芯片里面實(shí)現(xiàn)等。我們知道,F(xiàn)PGA器件的數(shù)據(jù)吞吐量大,可以工作在較高的時(shí)鐘頻率上,而DSP和CPU芯片的操作是基于軟件指令的,適于完成較為復(fù)雜的算法和系統(tǒng)控

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論