<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何解決FPGA電路設(shè)計(jì)中的毛刺問(wèn)題

          如何解決FPGA電路設(shè)計(jì)中的毛刺問(wèn)題

          ——
          作者:武漢大學(xué)電氣工程學(xué)院 張志杰 汪翔 時(shí)間:2007-01-26 來(lái)源:《世界電子元器件》 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/20548.htm

          隨著半導(dǎo)體技術(shù)的飛速發(fā)展,fpga(field programmable gate array)的計(jì)算能力、容量以及可靠性也有了很大的提高。它正以高度靈活的用戶(hù)現(xiàn)場(chǎng)編程功能、靈活的反復(fù)改寫(xiě)功能、高可靠性等優(yōu)點(diǎn),成為數(shù)字電路設(shè)計(jì)、數(shù)字信號(hào)處理等領(lǐng)域的新寵。但和所有的數(shù)字電路一樣,毛刺也是fpga電路中的棘手問(wèn)題。它的出現(xiàn)會(huì)影響電路工作的穩(wěn)定性、可靠性,嚴(yán)重時(shí)會(huì)導(dǎo)致整個(gè)數(shù)字系統(tǒng)的誤動(dòng)作和邏輯紊亂。因此,如何有效正確的解決設(shè)計(jì)中出現(xiàn)的毛刺,就成為整個(gè)設(shè)計(jì)中的關(guān)鍵一環(huán)。

          本文就fpga設(shè)計(jì)中出現(xiàn)的毛刺問(wèn)題,根據(jù)筆者自己的經(jīng)驗(yàn)和體會(huì),提出了幾種簡(jiǎn)單可行的解決方法和思路,供同行供交流與參考。


          fpga電路中毛刺的產(chǎn)生

          我們知道,信號(hào)在fpga器件中通過(guò)邏輯單元連線時(shí),一定存在延時(shí)。延時(shí)的大小不僅和連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),而且也和器件的制造工藝、工作環(huán)境等有關(guān)。因此,信號(hào)在器件中傳輸?shù)臅r(shí)候,所需要的時(shí)間是不能精確估計(jì)的,當(dāng)多路信號(hào)同時(shí)發(fā)生跳變的瞬間,就產(chǎn)生了“競(jìng)爭(zhēng)冒險(xiǎn)”。這時(shí),往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)就是“毛刺”。另外,由于fpga以及其它的cpld器件內(nèi)部的分布電容和電感對(duì)電路中的毛刺基本沒(méi)有什么過(guò)濾作用,因此這些毛刺信號(hào)就會(huì)被“保留”并傳遞到后一級(jí),從而使得毛刺問(wèn)題更加突出。

          可見(jiàn),即使是在最簡(jiǎn)單的邏輯運(yùn)算中,如果出現(xiàn)多路信號(hào)同時(shí)跳變的情況,在通過(guò)內(nèi)部走線之后,就一定會(huì)產(chǎn)生毛刺。而現(xiàn)在使用在數(shù)字電路設(shè)計(jì)以及數(shù)字信號(hào)處理中的信號(hào)往往是由時(shí)鐘控制的,多數(shù)據(jù)輸入的復(fù)雜運(yùn)算系統(tǒng),甚至每個(gè)數(shù)據(jù)都由相當(dāng)多的位數(shù)組成。這時(shí),每一級(jí)的毛刺都會(huì)對(duì)結(jié)果有嚴(yán)重的影響,如果是多級(jí)的設(shè)計(jì),那么毛刺累加后甚至?xí)绊懻麄€(gè)設(shè)計(jì)的可靠性和精確性。下面我們將以乘法運(yùn)算電路來(lái)說(shuō)明毛刺的產(chǎn)生以及去除,在實(shí)驗(yàn)中,我們使用的編程軟件是quartus ii2.0,實(shí)驗(yàn)器件為cyclone ep1cf400i7。需要說(shuō)明一點(diǎn),由于示波器無(wú)法顯示該整數(shù)運(yùn)算的結(jié)果,我們這里將只給出軟件仿真的結(jié)果。而具體的編程以及程序的下載我們?cè)谶@里也不再詳述,可以參考相關(guān)的文獻(xiàn)書(shū)籍。


          毛刺的消除方法

          首先,我們來(lái)設(shè)計(jì)一個(gè)簡(jiǎn)單的乘法運(yùn)算電路。運(yùn)算電路如圖1所示。



          圖 1 乘法運(yùn)算運(yùn)算電路及結(jié)果

          如圖1(c)所示,如果在不加任何的去除毛刺的措施的時(shí)候,我們可以看到結(jié)果c中含有大量的毛刺。產(chǎn)生的原因就是在時(shí)鐘的上升沿,每個(gè)輸入(a和b)的各個(gè)數(shù)據(jù)線上的數(shù)據(jù)都不可能保證同時(shí)到達(dá),也就是說(shuō)在時(shí)鐘讀取數(shù)據(jù)線上的數(shù)據(jù)的時(shí)候,有的數(shù)據(jù)線上讀取的已經(jīng)是新的數(shù)據(jù),而有的數(shù)據(jù)線上讀取的仍然是上一個(gè)數(shù)據(jù),這樣無(wú)疑會(huì)產(chǎn)生毛刺信號(hào),而當(dāng)數(shù)據(jù)完全穩(wěn)定的時(shí)候,毛刺信號(hào)也就自然消失了。


          輸出加d觸發(fā)器

          這是一種比較傳統(tǒng)的去除毛刺的方法。原理就是用一個(gè)d觸發(fā)器去讀帶毛刺的信號(hào),利用d觸發(fā)器對(duì)輸入信號(hào)的毛刺不敏感的特點(diǎn),去除信號(hào)中的毛刺。這種方法在簡(jiǎn)單的邏輯電路中是常見(jiàn)的一種方法,尤其是對(duì)信號(hào)中發(fā)生在非時(shí)鐘跳變沿的毛刺信號(hào)去除效果非常的明顯。

          但是對(duì)于大多數(shù)的時(shí)序電路來(lái)說(shuō),毛刺信號(hào)往往發(fā)生在時(shí)鐘信號(hào)的跳變沿,這樣d觸發(fā)器的效果就沒(méi)有那么明顯了(見(jiàn)圖2,加d觸發(fā)器以后的輸出q,仍含有毛刺)。另外,d觸發(fā)器的使用還會(huì)給系統(tǒng)帶來(lái)一定的延時(shí),特別是在系統(tǒng)級(jí)數(shù)較多的情況下,延時(shí)也將變大,因此在使用d觸發(fā)器去除毛刺的時(shí)候,一定要視情況而定,并不是所有的毛刺都可以用d觸發(fā)器來(lái)消除。


          圖2 加d觸發(fā)器后的運(yùn)算電路及結(jié)果

          信號(hào)同步法

          在很多文章中都提到,設(shè)計(jì)數(shù)字電路的時(shí)候采用同步電路可以大大減少毛刺。另外,由于大多數(shù)毛刺都比較短(大概幾個(gè)納秒),只要毛刺不出現(xiàn)在時(shí)鐘跳變沿,毛刺信號(hào)就不會(huì)對(duì)系統(tǒng)造成危害了。因此很多人認(rèn)為,只要在整個(gè)系統(tǒng)中使用同一個(gè)時(shí)鐘就可以達(dá)到系統(tǒng)同步的目標(biāo)了。但是這里面有一個(gè)非常嚴(yán)重的問(wèn)題,就是時(shí)鐘信號(hào)和其他所有的信號(hào)一樣,在fpga器件中傳遞的時(shí)候是有延時(shí)的,這樣根本就無(wú)法預(yù)知時(shí)鐘跳變沿的精確位置。也就是說(shuō)我們無(wú)法保證在某個(gè)時(shí)鐘的跳變沿讀取的數(shù)據(jù)是一個(gè)穩(wěn)定的數(shù)據(jù),尤其是在多級(jí)設(shè)計(jì)中,這個(gè)問(wèn)題就更加突出了。因此,做到真正的"同步"就是去除毛刺信號(hào)的關(guān)鍵問(wèn)題。我認(rèn)為這里同步的關(guān)鍵就是保證在時(shí)鐘的跳變沿讀取的數(shù)據(jù)是穩(wěn)定的數(shù)據(jù)而不是毛刺數(shù)據(jù)。以這個(gè)思想為出發(fā)點(diǎn),提出了以下幾種具體的信號(hào)同步方法。

          信號(hào)延時(shí)同步法

          首先,我們給出了一個(gè)兩級(jí)乘法(c=a b;q=d c)的運(yùn)算結(jié)果(如圖3所示,這里不再給出運(yùn)算電路)。可以看到,在沒(méi)加任何處理過(guò)程的時(shí)候,兩級(jí)結(jié)果c和q中都含有大量的毛刺信號(hào)。其中毛刺信號(hào)產(chǎn)生的原因就是在計(jì)算時(shí)鐘跳變時(shí)刻,數(shù)據(jù)信號(hào)同時(shí)發(fā)生了跳變。另外,第一級(jí)信號(hào)c中含有大量的毛刺,在經(jīng)過(guò)第二次乘法運(yùn)算以后被明顯放大了,從圖3可以看出q中毛刺更加嚴(yán)重了。但在很多實(shí)際工作中,我們最關(guān)心的往往是最后的輸出結(jié)果(q),只要中間信號(hào)的毛刺對(duì)后面的輸出沒(méi)有什么影響我們就不需要對(duì)它們作任何處理了。因此,這里所提出的信號(hào)同步的核心思想就是消除這些中間毛刺信號(hào)的影響。


          圖 3 兩級(jí)乘法運(yùn)算的結(jié)果仿真

          信號(hào)延時(shí)法,它的原理就是在兩級(jí)信號(hào)傳遞的過(guò)程中加一個(gè)延時(shí)環(huán)節(jié),從而保證在下一個(gè)模塊中讀取到的數(shù)據(jù)是穩(wěn)定后的數(shù)據(jù),即不包含毛刺信號(hào)。這里所指的信號(hào)延時(shí)可以是數(shù)據(jù)信號(hào)的延時(shí),也可以是時(shí)鐘信號(hào)的延時(shí)。由于篇幅的關(guān)系,這里我們主要以對(duì)時(shí)鐘信號(hào)的延時(shí)來(lái)說(shuō)明信號(hào)延時(shí)法的原理。對(duì)上述計(jì)算過(guò)程加時(shí)鐘信號(hào)延時(shí)的原理及結(jié)果如圖4所示。


          圖4 加了時(shí)鐘延時(shí)的兩級(jí)乘法運(yùn)算及結(jié)果

          圖4中的clkdelay就是時(shí)鐘延時(shí)環(huán)節(jié)。在加這個(gè)環(huán)節(jié)以前的時(shí)鐘信號(hào)是直接連到模塊b上的,這樣兩個(gè)模塊使用同一時(shí)鐘,好像已經(jīng)做到了同步,但是如圖3所示,結(jié)果中含有大量的毛刺,其原因就是產(chǎn)生毛刺的根本原因--“競(jìng)爭(zhēng)冒險(xiǎn)"現(xiàn)象沒(méi)有得到根本性的消除。加時(shí)鐘延時(shí)環(huán)節(jié)的作用就是要從根本上消除“競(jìng)爭(zhēng)冒險(xiǎn)”,其過(guò)程是將控制模塊b的時(shí)鐘延時(shí)一段時(shí)間,使得模塊b的控制時(shí)鐘在上跳變化時(shí)數(shù)據(jù)c已經(jīng)達(dá)到了穩(wěn)定,即不含毛刺信號(hào)的數(shù)據(jù),而這時(shí)數(shù)據(jù)d也已達(dá)到穩(wěn)定,這樣競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象消除了,從而毛刺信號(hào)也得到了有效的抑制,如圖4 (c) 所示。

          與時(shí)鐘延時(shí)法的原理相同,我們也可以在數(shù)據(jù)信號(hào)加延時(shí)環(huán)節(jié)來(lái)消除競(jìng)爭(zhēng)冒險(xiǎn)的現(xiàn)象,達(dá)到真正的同步。這里的延時(shí)環(huán)節(jié)可以使用quartus ⅱ提供的lcell實(shí)現(xiàn),也可以使用d觸發(fā)器和一個(gè)高頻的計(jì)數(shù)脈沖靈活實(shí)現(xiàn)。另外我們也可以從綜合結(jié)果(圖4 (c)所示)看到,所加的延時(shí)環(huán)節(jié)占用的芯片資源是很少的,是一種簡(jiǎn)單有效而且節(jié)約資源的方法。

          時(shí)鐘信號(hào)的靈活使用

          和上述方法的原理相似,靈活使用時(shí)鐘信號(hào)的目的也是盡可能的消除競(jìng)爭(zhēng)冒險(xiǎn)。比如在時(shí)鐘的第一個(gè)跳變沿觸發(fā)模塊a,下一個(gè)跳變沿控制觸發(fā)模塊b,這樣時(shí)鐘的交替控制也在一定程度上消除了競(jìng)爭(zhēng)冒險(xiǎn),從而抑制了毛刺信號(hào)。還比如分別使用時(shí)鐘的上升沿或者下降沿控制不同的模塊。但是這些方法不適合使用在比較復(fù)雜的設(shè)計(jì)中,否則會(huì)使設(shè)計(jì)的條理非常的混亂,給以后的閱讀修改帶來(lái)很大的困難。因此,在選用這種方法的時(shí)候一定要慎重。

          狀態(tài)機(jī)控制

          對(duì)于大型的數(shù)字電路設(shè)計(jì),狀態(tài)機(jī)是一種非常理想的選擇,能使運(yùn)行性能和硬件資源的占用達(dá)到最佳的優(yōu)化,另外靈活的使用狀態(tài)機(jī)也可以實(shí)現(xiàn)信號(hào)的同步和消除毛刺的目的。在數(shù)據(jù)傳遞比較復(fù)雜的多模塊系統(tǒng)中,由狀態(tài)機(jī)在特定的時(shí)刻分別發(fā)出控制特定模塊的時(shí)鐘信號(hào)或者模塊使能信號(hào),狀態(tài)機(jī)的循環(huán)控制就可以使得整個(gè)系統(tǒng)協(xié)調(diào)運(yùn)作,同時(shí)減少毛刺信號(hào)。那么只要我們?cè)跔顟B(tài)機(jī)的觸發(fā)時(shí)間上加以處理,就可以避免競(jìng)爭(zhēng)冒險(xiǎn),從而抑制毛刺的產(chǎn)生。原理如圖5所示。


          圖 5 狀態(tài)機(jī)控制原理

          限于篇幅的原因,這里我們只講述狀態(tài)機(jī)控制的原理,提出一種新的思路。


          總結(jié)

          由于毛刺信號(hào)對(duì)fpga器件的運(yùn)行有很大的影響,如何有效抑制毛刺信號(hào)就成了一個(gè)非常突出的問(wèn)題。但是必須強(qiáng)調(diào)的一點(diǎn)就是,我們首先必須對(duì)程序設(shè)計(jì)本身進(jìn)行優(yōu)化和改進(jìn),使毛刺信號(hào)的產(chǎn)生降低到最小,比如將一些信號(hào)用變量代替來(lái)減小延時(shí)等。另外,在實(shí)際應(yīng)用中如何選用適合的方法也非常的重要,一定要慎重考慮。比如延時(shí)環(huán)節(jié)的加入會(huì)使整個(gè)系統(tǒng)的延時(shí)增大,加入太多時(shí)就會(huì)影響系統(tǒng)的運(yùn)行等。




          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();