摘? 要: 介紹了FPGA的一般設(shè)計(jì)流程;指出了FPGA設(shè)計(jì)中的幾個(gè)重點(diǎn)、難點(diǎn)問題,主要包括時(shí)鐘設(shè)計(jì),、延時(shí)設(shè)計(jì)和同步設(shè)計(jì)中遇到的問題以及電路中毛刺信號(hào)的產(chǎn)生機(jī)理和消除;結(jié)合作者的經(jīng)驗(yàn)和體會(huì),分析了問題產(chǎn)生的原因并給出解決方案和相關(guān)設(shè)計(jì)技巧,。
關(guān)鍵詞: FPGA? 時(shí)鐘設(shè)計(jì)? 同步設(shè)計(jì)? 延時(shí)設(shè)計(jì)? 毛刺消除
?
隨著FPGA(Field Programmable Gate Array)容量,、功能以及可靠性的提高,其在現(xiàn)代數(shù)字通信系統(tǒng)中的應(yīng)用日漸廣泛,。采用FPGA設(shè)計(jì)數(shù)字電路已經(jīng)成為數(shù)字電路系統(tǒng)領(lǐng)域的主要設(shè)計(jì)方式之一?眼1?演,。在信號(hào)的處理和整個(gè)系統(tǒng)的控制中,FPGA不但能大大縮減電路的體積,提高電路的穩(wěn)定性,而且其先進(jìn)的開發(fā)工具使整個(gè)系統(tǒng)的設(shè)計(jì)調(diào)試周期大大縮短?眼2~3?演,。本文結(jié)合作者的經(jīng)驗(yàn)和體會(huì),指出FPGA設(shè)計(jì)中的一些難點(diǎn)問題,分析問題產(chǎn)生的原因并給出解決方案,有利于FPGA設(shè)計(jì)者少走彎路,在較短的時(shí)間內(nèi)掌握FPGA設(shè)計(jì)技術(shù),。
1 FPGA設(shè)計(jì)流程
????FPGA設(shè)計(jì)大都采用自頂向下的設(shè)計(jì)流程,大體上分為設(shè)計(jì)說明書、設(shè)計(jì)輸入,、綜合,、功能仿真(前仿真)、邏輯實(shí)現(xiàn),、時(shí)序仿真(后仿真),、配置下載等七個(gè)步驟,設(shè)計(jì)流程如圖1所示。
?
?
2 FPGA設(shè)計(jì)的核心問題
2.1 時(shí)鐘設(shè)計(jì)
在任何數(shù)字電路設(shè)計(jì)中,可靠的時(shí)鐘是非常關(guān)鍵的,。時(shí)鐘一般可分為全局時(shí)鐘,、門控" title="門控">門控時(shí)鐘和多級(jí)邏輯時(shí)鐘等幾種類型,。
2.1.1 全局時(shí)鐘
全局時(shí)鐘或同步時(shí)鐘是最簡(jiǎn)單,、可靠的時(shí)鐘。在FPGA設(shè)計(jì)中時(shí)鐘的最好解決方案是:由專用的全局時(shí)鐘輸入引腳驅(qū)動(dòng)的單個(gè)主時(shí)鐘去鐘控設(shè)計(jì)中的每一個(gè)時(shí)序器件,只要有可能就應(yīng)盡量在設(shè)計(jì)項(xiàng)目中采用全局時(shí)鐘,。FPGA都具有專門的全局時(shí)鐘引腳,它直接連到器件中的每一個(gè)寄存器,。在器件中,這種全局時(shí)鐘能提供最短的時(shí)鐘延時(shí)(數(shù)據(jù)輸入到數(shù)據(jù)到達(dá)輸出的時(shí)間)。圖2是全局時(shí)鐘的一個(gè)實(shí)例,。
?
2.1.2 門控時(shí)鐘
??? 在許多應(yīng)用中,都采用外部的全局時(shí)鐘是不實(shí)際的,通常要用陣列時(shí)鐘構(gòu)成門控時(shí)鐘,。門控時(shí)鐘常常同微處理器接口有關(guān),每當(dāng)用組合函數(shù)鐘控觸發(fā)器時(shí),通常都存在著門控時(shí)鐘。如果符合下述條件,門控時(shí)鐘可以象全局時(shí)鐘一樣可靠地工作:(1)驅(qū)動(dòng)時(shí)鐘的邏輯必須只包含一個(gè)“與”門或“或”門;(2)邏輯門的一個(gè)輸入是實(shí)際的時(shí)鐘,而該邏輯門的所有其它輸入必須是地址或控制線,它們約束時(shí)鐘的建立和保持時(shí)間" title="保持時(shí)間">保持時(shí)間,。當(dāng)然也可以將門控時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘以改善設(shè)計(jì)項(xiàng)目的可靠性,。
2.1.3 多時(shí)鐘系統(tǒng)
許多應(yīng)用要求在同一個(gè)FPGA內(nèi)采用多個(gè)時(shí)鐘,比如兩個(gè)異步微處理器之間的接口或微處理器和異步通信通道的接口。由于兩個(gè)時(shí)鐘信號(hào)之間要求一定的建立和保持時(shí)間,所以引進(jìn)了附加的定時(shí)約束條件,將某些異步信號(hào)同步化,。在許多系統(tǒng)中只將異步信號(hào)同步化是不夠的,當(dāng)系統(tǒng)中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數(shù)據(jù)的建立和保持時(shí)間很難得到保證,最好的解決辦法是將所有非同源時(shí)鐘同步化,。使用FPGA內(nèi)部的鎖相環(huán)(PLL)模塊是一個(gè)很好的方法。如果不用PLL,當(dāng)兩個(gè)時(shí)鐘的頻率比是整數(shù)時(shí),同步的方法比較簡(jiǎn)單;當(dāng)兩個(gè)時(shí)鐘的頻率比不為整數(shù)時(shí),處理方法要復(fù)雜得多,。這時(shí)需要使用帶使能端的D觸發(fā)器,并引入一個(gè)高頻時(shí)鐘來實(shí)現(xiàn),。
2.1.4 時(shí)鐘歪斜
時(shí)鐘歪斜是FPGA設(shè)計(jì)中最嚴(yán)重的問題之一。電路中控制各元件同步運(yùn)行的時(shí)鐘源到各元件的距離相差很大,時(shí)鐘歪斜就是在系統(tǒng)內(nèi)不同元件處檢測(cè)到有效的時(shí)鐘跳變沿所需的時(shí)間差異。為了保證各個(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í)鐘歪斜減到最低程度。
2.2 毛刺信號(hào)及其消除
??? 在組合邏輯電路" title="邏輯電路">邏輯電路中,信號(hào)要經(jīng)過一系列的門電路和信號(hào)變換,。由于延遲的作用使得當(dāng)輸入信號(hào)發(fā)生變化時(shí),其輸出信號(hào)不能同步地跟隨輸入信號(hào)變化,而是經(jīng)過一段過渡時(shí)間后才能達(dá)到原先所期望的狀態(tài),。這時(shí)會(huì)產(chǎn)生小的寄生毛刺信號(hào),使電路產(chǎn)生瞬間的錯(cuò)誤輸出,造成邏輯功能的瞬時(shí)紊亂。在FPGA內(nèi)部沒有分布電感和電容,無法預(yù)見的毛刺信號(hào)可通過設(shè)計(jì)電路傳播,從而使電路出現(xiàn)錯(cuò)誤的邏輯輸出,。
任何組合電路,、反饋電路和計(jì)數(shù)器都可能是潛在的毛刺信號(hào)發(fā)生器。毛刺并不是對(duì)所有輸入都有危害,如觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并滿足數(shù)據(jù)的建立保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害,。而當(dāng)毛刺信號(hào)成為系統(tǒng)的啟動(dòng)信號(hào),、控制信號(hào)、握手信號(hào),觸發(fā)器的清零信號(hào)(CLEAR),、預(yù)置信號(hào)(PRESET),、時(shí)鐘輸入信號(hào)(CLK)或鎖存器的輸入信號(hào)就會(huì)產(chǎn)生邏輯錯(cuò)誤。任何一點(diǎn)毛刺都可能使系統(tǒng)出錯(cuò),因此消除毛刺信號(hào)是FPGA設(shè)計(jì)中的一個(gè)重要問題,。毛刺問題在電路連線上是找不出原因的,只能從邏輯設(shè)計(jì)上采取措施加以解決,。消除毛刺的一般方法有以下幾種:
????(1)利用冗余項(xiàng)消除毛刺
函數(shù)式和真值表所描述的是靜態(tài)邏輯,而競(jìng)爭(zhēng)則是從一種穩(wěn)態(tài)到另一種穩(wěn)態(tài)的過程。因此競(jìng)爭(zhēng)是動(dòng)態(tài)過程,它發(fā)生在輸入變量變化時(shí),。此時(shí),修改卡諾圖,增加多余項(xiàng),在卡諾圖的兩圓相切處增加一個(gè)圓,可以消除邏輯冒險(xiǎn),。但該法對(duì)于計(jì)數(shù)器型產(chǎn)生的毛刺是無法消除的。
(2)取樣法
????由于冒險(xiǎn)出現(xiàn)在變量發(fā)生變化的時(shí)刻,如果待信號(hào)穩(wěn)定之后加入取樣脈沖,那么就只有在取樣脈沖作用期間輸出的信號(hào)才能有效,。這樣可以避免產(chǎn)生的毛刺影響輸出波形,。
(3)吸收法
????增加輸出濾波,在輸出端接上小電容C可以濾除毛刺,如圖3所示。但輸出波形的前后沿將變壞,在對(duì)波形要求較嚴(yán)格時(shí),應(yīng)再加整形電路,該方法不宜在中間級(jí)使用,。
?
????(4)延遲辦法
????因?yàn)槊套罱K是由于延遲造成的,所以可以找出產(chǎn)生延遲的支路,。對(duì)于相對(duì)延遲小的支路,加上毛刺寬度的延遲可以消除毛刺。但有時(shí)隨著負(fù)載增加,毛刺會(huì)繼續(xù)出現(xiàn),因而這種方法也是有局限性的,。而且采用延遲線的方法產(chǎn)生延遲更會(huì)由于環(huán)境溫度的變化而使系統(tǒng)變不可靠,。
????(5)鎖存辦法
當(dāng)計(jì)數(shù)器的輸出進(jìn)行相“與”或相“或”時(shí)會(huì)產(chǎn)生毛刺。隨著計(jì)數(shù)器位數(shù)的增加,毛刺的數(shù)量和毛刺的種類也會(huì)越來越復(fù)雜,。毛刺在計(jì)數(shù)器電路輸出中的仿真結(jié)果如圖4所示,從圖中可發(fā)現(xiàn)有毛刺出現(xiàn),。此時(shí),可通過在輸出端加D觸發(fā)器加以消除。接D觸發(fā)器后仿真結(jié)果如圖5所示,。
?
?
?
????從圖5可以看到,數(shù)據(jù)中的毛刺被明顯消除,。當(dāng)FPGA輸出有系統(tǒng)內(nèi)其它部分的邊沿或電平敏感信號(hào)時(shí),應(yīng)在輸出端寄存那些對(duì)險(xiǎn)象敏感的組合輸出,。對(duì)于異步輸入,可通過增加輸入寄存器確保滿足狀態(tài)機(jī)所要求的建立和保持時(shí)間。對(duì)于一般情況下產(chǎn)生的毛刺,可以嘗試用D觸發(fā)器來消除,。但用D觸發(fā)器消除時(shí),有時(shí)會(huì)影響到時(shí)序,需要考慮很多問題,。所以要仔細(xì)地分析毛刺產(chǎn)生的來源和毛刺的性質(zhì),采用修改電路或其它辦法來徹底消除。
2.3?FPGA中的延時(shí)設(shè)計(jì)
當(dāng)需要對(duì)電路中的某一信號(hào)作一段延時(shí)時(shí),可在信號(hào)后串接一些“非門”或其它門電路,。但在FPGA中,開發(fā)軟件會(huì)在綜合設(shè)計(jì)時(shí)將這些門當(dāng)作冗余邏輯去掉,達(dá)不到延時(shí)的效果,。用ALTERA公司的MAXPLUSII開發(fā)FPGA時(shí),可以通過插入LCELL原語或調(diào)用延時(shí)線模塊來產(chǎn)生一定的延時(shí)。但這樣形成的延時(shí)在FPGA芯片中并不穩(wěn)定,會(huì)隨溫度等外部環(huán)境的改變而改變,這樣會(huì)影響FPGA的性能,。因此,可以用高頻時(shí)鐘來驅(qū)動(dòng)一移位寄存器,需要延時(shí)的信號(hào)作為數(shù)據(jù)輸入,按所需延時(shí)正確設(shè)置移位寄存器的級(jí)數(shù),移位寄存器的輸出即為延時(shí)后的信號(hào),。此方法產(chǎn)生的延時(shí)信號(hào)有誤差,誤差大小由高頻時(shí)鐘的周期來決定。對(duì)于數(shù)據(jù)信號(hào)的延時(shí),在輸出端用數(shù)據(jù)時(shí)鐘對(duì)延時(shí)后的信號(hào)重新采樣,就可以消除誤差,。當(dāng)然,當(dāng)所需延時(shí)較長(zhǎng)時(shí),這樣做比較浪費(fèi)資源,。此外,用VHDL語言進(jìn)行FPGA設(shè)計(jì)時(shí),不能用after語句來實(shí)現(xiàn)延時(shí),因?yàn)槟壳暗木C合工具還不能做到如此精確的延時(shí),即程序中的after語句不能被綜合。
2.4? FPGA中的同步電路" title="同步電路">同步電路設(shè)計(jì)
2.4.1 同步電路與異步電路
異步電路" title="異步電路">異步電路主要是組合邏輯電路,用于產(chǎn)生地址譯碼器,、FIFO或RAM的讀寫控制信號(hào)脈沖,其邏輯輸出與任何時(shí)鐘信號(hào)都沒有關(guān)系,譯碼輸出產(chǎn)生的毛刺通常是可以監(jiān)控的,。同步電路是由時(shí)序電路(寄存器和各種觸發(fā)器)和組合邏輯電路構(gòu)成的電路,其所有操作都是在嚴(yán)格的時(shí)鐘控制下完成的。這些時(shí)序電路共享同一個(gè)時(shí)鐘CLK,而所有的狀態(tài)變化都是在時(shí)鐘的上升沿(或下降沿)完成的,。比如D觸發(fā)器,當(dāng)上升延到來時(shí),寄存器把D端的電平傳到Q輸出端,。
下面介紹一下建立保持時(shí)間的問題。建立時(shí)間(tsu)是指在觸發(fā)器的時(shí)鐘上升沿到來以前,數(shù)據(jù)穩(wěn)定不變的時(shí)間,。如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘上升沿被打入觸發(fā)器;保持時(shí)間(th)是指在觸發(fā)器的時(shí)鐘上升沿到來以后,數(shù)據(jù)穩(wěn)定不變的時(shí)間,。如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。數(shù)據(jù)穩(wěn)定傳輸必須滿足建立時(shí)間和保持時(shí)間的要求,否則電路就會(huì)出現(xiàn)邏輯錯(cuò)誤,。建立保持時(shí)間時(shí)序圖如圖6所示,。
?
????例如,從D觸發(fā)器的Q輸出端直接饋給另一觸發(fā)器的D輸入端時(shí),第一個(gè)D觸發(fā)器能滿足建立保持時(shí)間,但是到第二個(gè)D觸發(fā)器的延遲就可能不足以滿足第二個(gè)觸發(fā)器對(duì)保持時(shí)間的要求,此時(shí)就會(huì)出現(xiàn)邏輯錯(cuò)誤,當(dāng)時(shí)鐘出現(xiàn)歪斜時(shí)錯(cuò)誤更加嚴(yán)重。解決辦法是在第一個(gè)觸發(fā)器Q端加一緩沖器,如圖7所示,。這樣就能滿足第二個(gè)觸發(fā)器的時(shí)序要求,。另外還可采用一個(gè)低驅(qū)動(dòng)強(qiáng)度的源D型觸發(fā)器而不加緩沖來解決,高的相對(duì)扇出有助于改進(jìn)保持時(shí)間,。
?
同步數(shù)字電路系統(tǒng)在當(dāng)今是占絕對(duì)優(yōu)勢(shì)的,工程師常用它設(shè)計(jì)所有能想象到的數(shù)字電路,其頻率可以從直流到幾GHz,。同步電路與異步電路相比有以下優(yōu)點(diǎn):
(1)同步電路能在溫度、電壓,、過程等參數(shù)變化的情況下保持正常的工作,而異步電路的性能通常和環(huán)境溫度,、工作電壓以及生產(chǎn)過程有關(guān)。
(2)同步電路具有可移植性,易于采用新技術(shù)或更先進(jìn)的技術(shù),而異步電路很難重用和維護(hù),。
(3)同步電路能簡(jiǎn)化兩個(gè)模塊之間的接口,而異步電路需要握手信號(hào)或令牌標(biāo)記才能確保信號(hào)的完整性,。
(4)用D觸發(fā)器或寄存器設(shè)計(jì)同步電路,可以消除毛刺和同步內(nèi)部歪斜的數(shù)據(jù)。而異步電路就沒有這個(gè)優(yōu)點(diǎn),且很難進(jìn)行模擬和排錯(cuò),也不能得到很好的綜合,。
同步電路也有缺點(diǎn),因?yàn)樾枰獣r(shí)序器件,它與異步電路相比將會(huì)消耗更多的邏輯門資源,。雖然異步電路速度較快且電源消耗較少,但由于現(xiàn)在的FPGA芯片已做到幾百萬門,故不必太在意這一點(diǎn),。筆者建議盡量避免用異步電路而采用同步電路進(jìn)行設(shè)計(jì)。
2.4.2? 用流水線技術(shù)提高同步電路的速度
同步電路的速度是指同步系統(tǒng)時(shí)鐘的速度,同步時(shí)鐘愈快,電路處理數(shù)據(jù)的時(shí)間間隔越短,電路在單位時(shí)間內(nèi)處理的數(shù)據(jù)量就愈大,。在討論同步電路的運(yùn)行速度之前,先看看電路的數(shù)據(jù)傳輸模型,如圖8所示,。
?
Tco是觸發(fā)器的輸入數(shù)據(jù)被時(shí)鐘打入到觸發(fā)器到數(shù)據(jù)到達(dá)觸發(fā)器輸出端的延時(shí)時(shí)間;Tdelay是組合邏輯的延時(shí);Tsetup是D觸發(fā)器的建立時(shí)間。假設(shè)數(shù)據(jù)已被時(shí)鐘打入D觸發(fā)器,那么數(shù)據(jù)到達(dá)第一個(gè)觸發(fā)器的Q輸出端需要的延時(shí)時(shí)間是Tco,經(jīng)過組合邏輯的延時(shí)時(shí)間為Tdelay,然后到達(dá)第二個(gè)觸發(fā)器的D端,要希望時(shí)鐘能在第二個(gè)觸發(fā)器再次被穩(wěn)定地打入觸發(fā)器,則時(shí)鐘的延遲必須大于Tco+Tdelay+Tsetup,也就是說最小的時(shí)鐘周期Tmin=Tco+Tdelay+Tsetup,即最快的時(shí)鐘頻率Fmax=1/Tmin,。FPGA開發(fā)軟件也是通過這種方法來計(jì)算系統(tǒng)最高運(yùn)行速度Fmax,。因?yàn)門co和Tsetup是由具體的器件工藝決定的,故設(shè)計(jì)電路時(shí)只能改變組合邏輯的延時(shí)時(shí)間Tdelay,所以說縮短觸發(fā)器間組合邏輯的延時(shí)時(shí)間是提高同步電路速度的關(guān)鍵所在。由于一般同步電路都大于一級(jí)鎖存,而要使電路穩(wěn)定工作,時(shí)鐘周期必須滿足最大延時(shí)要求,。故只有縮短最長(zhǎng)延時(shí)路徑,才能提高電路的工作頻率,。可以將較大的組合邏輯分解為較小的N塊,通過適當(dāng)?shù)姆椒ㄆ骄峙浣M合邏輯,然后在中間插入觸發(fā)器,并和原觸發(fā)器使用相同的時(shí)鐘,就可以避免在兩個(gè)觸發(fā)器之間出現(xiàn)過大的延時(shí),消除速度瓶頸,這樣可以提高電路的工作頻率,。這就是所謂“流水線”技術(shù)的基本設(shè)計(jì)思想,即原設(shè)計(jì)速度受限部分用一個(gè)時(shí)鐘周期實(shí)現(xiàn),采用流水線技術(shù)插入觸發(fā)器后,可用N個(gè)時(shí)鐘周期實(shí)現(xiàn),因此系統(tǒng)的工作速度可以加快,吞吐量加大,。注意,流水線設(shè)計(jì)會(huì)在原數(shù)據(jù)通路上加入延時(shí),另外硬件面積也會(huì)稍有增加。
3 FPGA設(shè)計(jì)應(yīng)注意的其它問題
(1)所有的狀態(tài)機(jī)輸入,包括復(fù)位,、置位信號(hào),都要用同步信號(hào),。所有的狀態(tài)機(jī)輸出都要用寄存器寄存輸出。注意在狀態(tài)機(jī)設(shè)計(jì)中不要出現(xiàn)死鎖狀態(tài),。
(2)要用寄存器和觸發(fā)器設(shè)計(jì)電路,盡量不要用鎖存器,因它對(duì)輸入信號(hào)的毛刺太敏感,。如果堅(jiān)持用鎖存器設(shè)計(jì)必須保證輸入信號(hào)絕對(duì)沒有毛刺,且滿足保持時(shí)間。
(3)設(shè)計(jì)譯碼邏輯電路時(shí)必須十分小心,因?yàn)樽g碼器和比較器本身會(huì)產(chǎn)生尖峰,容易產(chǎn)生毛刺,把譯碼器或比較器的輸出直接連到時(shí)鐘輸入端或異步清除端,會(huì)造成嚴(yán)重的后果,。
(4)應(yīng)該盡量避免隱含RS觸發(fā)器的出現(xiàn),。一般要控制輸出被直接反饋到輸入端,采用反饋環(huán)路會(huì)出現(xiàn)隱含RS觸發(fā)器,其對(duì)輸入尖峰和假信號(hào)很敏感,輸入端有任何變化都有可能使輸出值立刻改變,此時(shí)易造成毛刺的產(chǎn)生,導(dǎo)致時(shí)序的嚴(yán)重混亂。一旦具有隱含的RS觸發(fā)器,加鎖存器消除毛刺是不能解決問題的,。此時(shí)只有通過全面修改電路來從根本上解決,。
(5)每一個(gè)模塊中只用一個(gè)時(shí)鐘,避免使用多時(shí)鐘設(shè)計(jì),同時(shí)避免使用主時(shí)鐘分頻后的二次時(shí)鐘作為時(shí)序器件的時(shí)鐘輸入,因?yàn)槎螘r(shí)鐘相對(duì)于一次時(shí)鐘可能存在過大的時(shí)鐘歪斜。對(duì)所有模塊的輸入時(shí)鐘,、輸入信號(hào),、輸出信號(hào)都用D觸發(fā)器或寄存器進(jìn)行同步處理,即輸出信號(hào)直接來自觸發(fā)器或寄存器的輸出端。這樣可以消除尖峰和毛刺信號(hào),。不論是控制信號(hào)還是地址總線信號(hào),、數(shù)據(jù)總線信號(hào),都要采用另外的寄存器,以使內(nèi)部歪斜的數(shù)據(jù)變成同步的數(shù)據(jù)。這些表面上看似乎無用的操作可以大大提高電路系統(tǒng)的性能,。
(6)應(yīng)該盡量避免使用延遲線,因它對(duì)工藝過程的變化極為敏感,會(huì)大大降低電路的穩(wěn)定性和可靠性,并將為測(cè)試帶來麻煩,。
(7)大部分FPGA器件都為時(shí)鐘、復(fù)位,、預(yù)置等信號(hào)提供特殊的全局布線資源,要充分利用這些資源,。這樣可以減少電路中的毛刺并且大大提高設(shè)計(jì)電路的性能。
(8)不要試圖用HDL語言去綜合RAM,、ROM或FIFO等存儲(chǔ)模塊,。當(dāng)前的綜合工具主要用于產(chǎn)生邏輯電路,如需要用這些模塊,直接調(diào)用或例化相應(yīng)的宏單元即可,。
(9)注意仿真結(jié)果和實(shí)際綜合的電路的不一致性。無論是時(shí)序電路還是異步邏輯電路,其行為與其仿真器結(jié)果都是不完全一樣的,。特別是異步邏輯電路,仿真結(jié)果將會(huì)隱藏競(jìng)爭(zhēng)冒險(xiǎn)和毛刺現(xiàn)象,與實(shí)際行為相差較遠(yuǎn),。故在FPGA設(shè)計(jì)中,對(duì)每一個(gè)邏輯門、每一行VHDL(Verilog)語言,必須完全理解,不要期望仿真器替你找到錯(cuò)誤,。一個(gè)好的設(shè)計(jì)工程師要知道怎樣通過修改設(shè)計(jì)來提高電路性能,而不把責(zé)任歸咎于所使用的軟件,。
使用FPGA開發(fā)數(shù)字電路,可以大大縮短設(shè)計(jì)時(shí)間、減少PCB面積,、提高系統(tǒng)的可靠性,。它的這些優(yōu)點(diǎn)使得FPGA技術(shù)得到飛速的發(fā)展,已經(jīng)在通信、電子,、信號(hào)處理,、工業(yè)控制等領(lǐng)域被廣泛應(yīng)用。隨著FPGA容量的增加,SoPC(對(duì)信號(hào)的處理和整個(gè)系統(tǒng)的控制)的應(yīng)用時(shí)代即將到來,。SoPC既有嵌入處理器,、I/O電路和大規(guī)模嵌入存儲(chǔ)器,也有CPLD/FPGA,用戶可以選擇。同時(shí)也可以選擇PLD公司提供的FPGA IP(Intellectual Property)內(nèi)核,。使用IP核能保證系統(tǒng)級(jí)芯片的開發(fā)效率,、質(zhì)量,并能大大縮短產(chǎn)品開發(fā)時(shí)間。因此,FPGA已成為解決系統(tǒng)級(jí)設(shè)計(jì)的重要選擇方案之一,。本文對(duì)FPGA設(shè)計(jì)中的關(guān)鍵問題進(jìn)行了研究,提出了設(shè)計(jì)中影響系統(tǒng)可靠性的主要問題和解決方案,希望對(duì)FPGA設(shè)計(jì)者有一定的參考作用,。
?
參考文獻(xiàn)
1 張留安.利用FPGA實(shí)現(xiàn)FDM-CWTDM衛(wèi)星通信體制的復(fù)接分接技術(shù).西安電子科技大學(xué)碩士學(xué)位論文,2002
2 可編程邏輯器件網(wǎng)站.http://www.fpga.com.cn
3 褚振勇,翁木云.FPGA設(shè)計(jì)及其應(yīng)用.西安:西安電子科技大學(xué)出版社,2002.7