??? 從FPGA或PLD轉(zhuǎn)換到門陣是經(jīng)濟(jì)高效的,有時(shí)甚至只需幾百個(gè)單元就能實(shí)現(xiàn)。這已經(jīng)引起越來越多設(shè)計(jì)者提出同樣的問題:這種轉(zhuǎn)換設(shè)計(jì)需要什么后續(xù)技術(shù)?事實(shí)上轉(zhuǎn)換到門陣面臨著許多電路的時(shí)序問題,這在FPGA設(shè)計(jì)中是不被注意的。
??? 本文論述了轉(zhuǎn)換時(shí)遇到的幾種由于設(shè)計(jì)不當(dāng)所造成的時(shí)序問題,提出了避免這些問題的方案。同時(shí)對(duì)時(shí)序變化的部分原因及充分利用門陣列技術(shù)亦在文中進(jìn)行了討論。
時(shí)序上的差異
??? 如果知道原始設(shè)計(jì)電路工作中每一步時(shí)序上的裕量,

毛刺信號(hào)的產(chǎn)生
??? 許多邏輯電路能產(chǎn)生小的,寄生的信號(hào),稱作為毛刺信號(hào)。無法預(yù)見毛刺信號(hào)可通過設(shè)計(jì)來傳播并產(chǎn)生不需要的時(shí)鐘脈沖。任何組合電路都可能是潛在的毛刺信號(hào)的發(fā)生器,當(dāng)毛刺信號(hào)影響后續(xù)電路時(shí),就成為一個(gè)較大問題。
??? 圖1用于說明與門的輸出變化與否依賴于線路的延時(shí)。假定圖中信號(hào)AO總比BO提前5ns到達(dá)。

??? 情況1:信號(hào)A1的延時(shí)為10ns,B1為20ns,那么與門的輸出一直為低電平。
??? 情況2:信號(hào)A1的延時(shí)為20ns,B1為10ns,那么與門的輸出為5ns的高電平,其余為低電平。
??? 情況3:兩路信號(hào)延時(shí)都很?。ㄈ缤陂T陣列中一樣),那么與門的輸出一直為低電平。
??? 上述差異的重要性完全依賴于信號(hào)的用途。如果電路輸出后續(xù)由觸發(fā)器鎖定,情況2中非期望的毛刺信號(hào)可能被忽略;而如果毛刺信號(hào)在后續(xù)電路中被看作是有意義的信號(hào),那么情況1和情況3中由于沒有產(chǎn)生毛刺信號(hào),就會(huì)致使電路工作不正常。
開啟時(shí)鐘
??? 許多設(shè)計(jì)中出現(xiàn)的問題都與如何使用時(shí)鐘有關(guān)。
??? 圖2用于解釋由邏輯門控制時(shí)鐘所誘發(fā)的問題。邏輯門的介入使得時(shí)鐘到第二個(gè)觸發(fā)器出現(xiàn)了特殊路經(jīng)。要考慮兩條線路的長度:一是CLK_IN到FF2的D輸入端,另一是從CLK_IN到FF2_C端。
要驗(yàn)證兩種情況:1、數(shù)據(jù)的變化在時(shí)鐘信號(hào)的上升沿之后到達(dá)FF2;2、數(shù)據(jù)的變化在時(shí)鐘信號(hào)的上升沿之前到達(dá)FF2。

??? 情況1中,要改變FF2_Q,需要兩個(gè)CLK_IN上升沿,而情況2中只需一個(gè)CLK_IN的上升沿。當(dāng)路徑2的延遲太長時(shí),F(xiàn)F2_Q變化將早到一個(gè)時(shí)鐘周期。這種設(shè)計(jì)邏輯特性很大程度上依賴于延遲路徑。
??? 替代的方案是用邏輯門來控制數(shù)據(jù),而不是用時(shí)鐘。由于全局時(shí)鐘信號(hào)用于兩個(gè)觸發(fā)器,它們幾乎在同一時(shí)間記錄數(shù)據(jù)。實(shí)際上,F(xiàn)PGA中新的路徑1幾乎一定長于新路徑2,這將確保電路的行為同情況1。當(dāng)電路轉(zhuǎn)換到門陣列時(shí),必須仍保持這種相同。
??? 總之,要盡量減少或者不使用邏輯門控制時(shí)鐘信號(hào),因?yàn)樗鼤?huì)在時(shí)鐘和數(shù)據(jù)之間產(chǎn)生較多的扭曲。
全局時(shí)鐘信號(hào)的使用
??? 如果時(shí)鐘信號(hào)上由邏輯等式產(chǎn)生,那么這種方法就會(huì)有一些自身的問題。如果全局時(shí)鐘信號(hào)線不用于路由派生時(shí)鐘,那么時(shí)鐘的同步上會(huì)有一些重要的差別。如果出于不同的用途分別產(chǎn)生時(shí)鐘,情況甚至?xí)兊酶恪?br>

??? 在長串寄存器鏈中,這個(gè)問題會(huì)在多處出現(xiàn)。此電路的一個(gè)替代方法如圖3所示。使用CLK信號(hào),用第二個(gè)與門消除了多路時(shí)鐘。這樣只產(chǎn)生一個(gè)時(shí)鐘信號(hào)到觸發(fā)器串。圖3中觸發(fā)器串的時(shí)鐘信號(hào)是系統(tǒng)時(shí)鐘通過門延遲得到的,當(dāng)?shù)竭_(dá)觸發(fā)器串的數(shù)據(jù)與觸發(fā)器串的時(shí)鐘不同步時(shí),將在兩個(gè)路徑間產(chǎn)生競(jìng)爭(zhēng)。一路是觸發(fā)器串的數(shù)據(jù)輸入路徑,另一路是系統(tǒng)時(shí)鐘到達(dá)觸發(fā)器串的時(shí)鐘輸入端路徑。解決方案是用系統(tǒng)時(shí)鐘的下降沿觸發(fā)的單獨(dú)觸發(fā)器串記錄數(shù)據(jù)。
??? 狀態(tài)檢測(cè):
??? 如果不考慮電路鐘的延遲,狀態(tài)機(jī)的狀態(tài)檢測(cè)可能會(huì)出錯(cuò)。如果用組合邏輯來產(chǎn)生復(fù)位信號(hào),那么即使是同步電路也會(huì)產(chǎn)生問題。
??? 盡量保持狀態(tài)控制邏輯(如計(jì)數(shù)器、分頻器等)少于10位。如果超過10位,長計(jì)數(shù)器應(yīng)該有用于監(jiān)視內(nèi)部狀態(tài)的抽頭,或者至少有一預(yù)置的功能。這些監(jiān)視用抽頭應(yīng)能夠很容易地將數(shù)據(jù)傳送到輸出引腳,以便監(jiān)測(cè)。
??? 復(fù)位問題:

??? 如同時(shí)鐘一樣,如果使用組合邏輯或者不詳細(xì)考慮時(shí)序,復(fù)位信號(hào)也能產(chǎn)生一系列問題。
??? 圖4示出了一種產(chǎn)生短脈沖的方法:當(dāng)觸發(fā)器D輸入是高電位時(shí),每個(gè)時(shí)鐘周期后Q端產(chǎn)生一個(gè)短脈沖。復(fù)位信號(hào)是低電位有效,Q(輸出高電位時(shí)不引起復(fù)位。當(dāng)時(shí)鐘的上升沿到來時(shí),如果D端是高電位,Q(輸出變低,導(dǎo)致觸發(fā)器復(fù)位。然后Q(又被拉回到高電位,從而結(jié)束復(fù)位。
為避免組合復(fù)位信號(hào)的問題,可以使用圖5所示得另一觸發(fā)器的輸出來驅(qū)動(dòng)復(fù)位信號(hào)。
??? 執(zhí)行問題:
??? 當(dāng)邏輯等式用于描述一種功能,而編輯器用于產(chǎn)生邏輯關(guān)系時(shí),情況變得更有趣??紤]最近發(fā)現(xiàn)的一個(gè)例子:
??? if T,OUT=/A
??? else,OUT=B
??? 如圖6,盡管電路在邏輯上是正確的,但當(dāng)T變化時(shí)會(huì)產(chǎn)生毛刺信號(hào)。A=0,B=1時(shí)出現(xiàn)問題。
圖7為簡化電路。信號(hào)T僅僅用作模式切換。當(dāng)系統(tǒng)在工作臺(tái)上測(cè)試時(shí),毛刺信號(hào)絕不會(huì)是問題。當(dāng)隨后使用自動(dòng)系統(tǒng)測(cè)試時(shí),要考慮很多效應(yīng)以找到系統(tǒng)錯(cuò)誤的根源。圖7所示的邏輯在門陣列實(shí)現(xiàn)時(shí),將可能在不需要的時(shí)候產(chǎn)生脈沖。事實(shí)上,這個(gè)問題是轉(zhuǎn)換到門陣列實(shí)現(xiàn)時(shí)發(fā)現(xiàn)的,正可以解釋自動(dòng)的系統(tǒng)測(cè)試期間所出現(xiàn)的反?,F(xiàn)象。
分割與試驗(yàn)的方法:
??? 如果FPGA的功能在很大程度上依賴于路徑延遲,那么設(shè)計(jì)階段重新選擇路徑將引起一部分電路工作不正常。即使以前電路工作正常并且似乎已經(jīng)最后完成了,情況仍然會(huì)如此。不同制造批號(hào)的電路模塊可能具有不同的工作特性。工作電壓和工作溫度的變化可能引起時(shí)序上的變化。如果設(shè)計(jì)中每一步的工作時(shí)序只有很少的裕量,甚至沒有,那么上述的效應(yīng)將引起不同的邏輯行為。
??? 上述問題與使用FPGA或是門陣列無關(guān)。使用好的設(shè)計(jì)技術(shù)可以將FPGA中的這些問題減至最少,并且可以使得門陣列的轉(zhuǎn)換變得更為平穩(wěn)。因?yàn)?a target="_blank">仿真模擬通常用于驗(yàn)證執(zhí)行情況,而較差的設(shè)計(jì)在進(jìn)行門陣列的轉(zhuǎn)換中問題就會(huì)暴露出來。采用不同的時(shí)序模型庫模擬,一個(gè)完美的設(shè)計(jì)能夠給出相同的邏輯輸出,而與電壓、溫度和工藝變化無關(guān)。
電壓和溫度效應(yīng):

??? 設(shè)計(jì)者喜歡電源電壓正好設(shè)置在5伏,并且環(huán)境溫度永遠(yuǎn)是25℃。這樣固然好,但絕大多數(shù)的電源電壓是變化的。類似的商用電路的環(huán)境溫度可能是從0~70℃。電壓升高時(shí),電路運(yùn)行加快。溫度升高時(shí),電路運(yùn)行變慢。通常,在低溫、高電壓(最快的情況)下出現(xiàn)的小毛刺信號(hào),在高溫、低電壓(最慢的情況)時(shí)會(huì)消失不見。Orbit半導(dǎo)體公司使用了一種五角工藝驗(yàn)證技術(shù),它可將PVT(工藝-電壓-溫度)變化包含于時(shí)序模型中,而且這些模型已被融合到硅片循環(huán)加工中。
工藝的變化:
??? 具有某種功能的一處電路不能保證相同布局的另一處電路也具有同樣功能,即使在相同的電壓和溫度條件下也是如此。制造過程中工藝的變化都是固有的、不可避免的。
FPGA供應(yīng)商指出任何元件的延遲都可以從所給最差值的10%變到100%。他們還指出給定電路上跟蹤的延遲是70%。如果路徑A具有最大的延遲,路徑B將介于最大延遲的70%和100%之間。這意味著如果兩條路徑中有一最大是40ns的延遲,當(dāng)路徑1是40ns時(shí)路徑B可能時(shí)28ns。類似的,路徑2是40ns時(shí)A可能是28ns。則一個(gè)信號(hào)通過路徑1將比通過路徑2早12ns或晚12ns。即使FPGA沒有重新布線,這些變化仍會(huì)發(fā)生。
??? 門陣列具有與FPGA同樣特性的時(shí)序變化。主要差別是延遲通常是非常短的,這是因?yàn)閮?nèi)部連線是用金屬完成的,而不是使用可編程路徑器件。FPGA和門陣列都不能免除由于工藝變化引起的時(shí)序問題。
其他的轉(zhuǎn)換差別:
??? FPGA提供了系統(tǒng)工作的很大靈活性,為更好地滿足系統(tǒng)的需要,在FPGA轉(zhuǎn)換成門陣列時(shí),許多增強(qiáng)措施被加到設(shè)計(jì)中:
??? 輸入:
??? 1、 TTL或CMOS
??? 2、 施密特觸發(fā)器(增加滯后效應(yīng))
??? 3、 晶體或RC振蕩器單元
??? 4、 增加上拉或下拉器件

??? 輸出:
??? 1、 很多不同的驅(qū)動(dòng)級(jí)
??? 2、 漏端開路(集電極開路)
??? 3、 旋轉(zhuǎn)比率控制
??? 門陣列的門海結(jié)構(gòu)實(shí)際上就是一個(gè)自由晶體管的海洋,添加特殊單元相對(duì)容易。甚至,一些生產(chǎn)商允許使用門海中的晶體管來制成模擬器件。
總結(jié)
??? 從FPGA轉(zhuǎn)換到門陣列時(shí)遇到的主要問題,常常在轉(zhuǎn)換之前FPGA中就會(huì)看到。好的設(shè)計(jì)方案將減少FPGA中遇到的問題,并為轉(zhuǎn)換到門陣列的設(shè)計(jì)做好準(zhǔn)備
評(píng)論