1 引言 美國(guó)Altera公司生產(chǎn)的復(fù)雜可編程邏輯器件以其操作靈活、使用方便、開(kāi)發(fā)迅速、投資風(fēng)險(xiǎn)低等特點(diǎn)成為集成電路設(shè)計(jì)的首選產(chǎn)品。Altera的 MAX+PLUSⅡ可編程邏輯開(kāi)發(fā)軟件,提供了一種與工作平臺(tái)、器件結(jié)構(gòu)無(wú)關(guān)的設(shè)計(jì)環(huán)境,深受廣大電子設(shè)計(jì)人員的喜愛(ài)。但設(shè)計(jì)人員都會(huì)遇到Altera器件設(shè)計(jì)中的時(shí)間匹配問(wèn)題,本文對(duì)這個(gè)問(wèn)題展開(kāi)了討論,對(duì)電路中短時(shí)脈沖波形失真的所謂"毛刺"現(xiàn)象進(jìn)行了研究,并提出了解決的辦法。 2 消除毛刺 某個(gè)事件成功的條件不分先后順序,只要滿足成功的組合需求,此事件就算成功,此種邏輯關(guān)系就是組合邏輯。我們?cè)谑褂肁ltera器件進(jìn)行組合邏輯的設(shè)計(jì)時(shí),常遇到短時(shí)脈沖波形失真,即毛刺問(wèn)題(見(jiàn)圖1)。在組合電路中,兩輸入AND門(mén)是最簡(jiǎn)單的電路,從MAX+PLUSⅡ中的 Timing Analyzer的Delay Matrix 中可得知a=11.1ns,b=8. 1ns。假定AND門(mén)內(nèi)部的延時(shí)時(shí)間為0.2ns,那么 a的延時(shí)+ AND內(nèi)部的延時(shí)(0.2ns)=11.1ns,a的延時(shí)為10.9ns; b的延時(shí)+AND內(nèi)部的延時(shí)(0.2ns)=8.1ns,b的延時(shí)為7.9ns。由于 a和b的延時(shí)時(shí)間不相等,所以當(dāng)a從1變?yōu)?,同時(shí)b從0變?yōu)?時(shí),輸出結(jié)果c產(chǎn)生了毛刺。 Altera器件結(jié)構(gòu)有許多特點(diǎn),使你在設(shè)計(jì)時(shí)具有較大的靈活性,但是,它可能會(huì)引入附加的時(shí)間延時(shí)。另外,復(fù)雜可編程邏輯器件中具有稱(chēng)作邏輯陣列塊(LAB)的小型、高性能、靈活陣列模塊,還有稱(chēng)作可編程連線陣列(PIA)的專(zhuān)用可編程網(wǎng)絡(luò),MAX的結(jié)構(gòu)通過(guò)PIA來(lái)連接LAB,保證其100%的內(nèi)部連接布通率。每個(gè)LAB中的邏輯擴(kuò)展項(xiàng)都提供附加的邏輯資源給LAB中的任何一個(gè)宏單元。但是,所有來(lái)自宏單元和擴(kuò)展項(xiàng)的信號(hào)經(jīng)過(guò)PIA時(shí)都必然引入時(shí)間延時(shí),從而可能在組合邏輯的輸出端產(chǎn)生毛刺。對(duì)于怎樣消除毛刺,我們作了以下探討。 2.1 軟件修改輸入端子的延時(shí)時(shí)間 一些軟件(如Xilinx公司)提供的方法是通過(guò)修改輸入端子的延時(shí)時(shí)間,來(lái)解決毛刺問(wèn)題的。如圖1中,我們用軟件把 b輸入端子的延時(shí)時(shí)間改為10.9ns,這樣a與 b的延時(shí)時(shí)間相等,就消除了輸出端c的毛刺。它的優(yōu)點(diǎn)是能快速解決問(wèn)題,這是設(shè)計(jì)中最簡(jiǎn)單實(shí)用的方法。 2.2 修改電路 通過(guò)修改定義時(shí)鐘信號(hào)的復(fù)雜邏輯,將其轉(zhuǎn)換成同步時(shí)鐘方式就可以避免毛刺出現(xiàn)。同步時(shí)鐘是采用單一的引腳驅(qū)動(dòng)的系統(tǒng)時(shí)鐘,而不是異步的(邏輯驅(qū)動(dòng)的)時(shí)鐘,見(jiàn)圖2。只要可能就應(yīng)盡量采用同步設(shè)計(jì),可以避免定時(shí)關(guān)系發(fā)生問(wèn)題。另外,同步設(shè)計(jì)也可以改善電路的在線性能,減少調(diào)試時(shí)間和提高電路的可靠性。在同步時(shí)鐘方式中 c信號(hào)是D觸發(fā)器輸入的一部分,而且時(shí)鐘是由引腳驅(qū)動(dòng)。這個(gè)電路稱(chēng)作寄存器使能電路, MAX+PLUSⅡTTL宏功能庫(kù)中提供了一種可以實(shí)現(xiàn)這種類(lèi)型電路的D觸發(fā)器DFFE(見(jiàn)圖2)。 對(duì)于三到八譯碼器而言,用a、b、c表示輸入引腳,d0、d1、d2、d3、d4、d5、d6、d7 表示三到八譯碼器的輸出引腳。對(duì)該設(shè)計(jì)項(xiàng)目進(jìn)行編譯后模擬仿真,這時(shí)非常容易從模擬仿真出來(lái)的波形上看到出現(xiàn)了毛刺。如采用同步時(shí)鐘(引腳驅(qū)動(dòng))方式,就可以消除毛刺。要注意的一點(diǎn)是建立和保持時(shí)間(Setup/hold time )是測(cè)試芯片對(duì)輸入信號(hào)和時(shí)鐘信號(hào)之間的時(shí)間要求。建立時(shí)間是指觸發(fā)器的時(shí)鐘信號(hào)上升沿到來(lái)以前,數(shù)據(jù)穩(wěn)定不變的時(shí)間。輸入信號(hào)應(yīng)提前時(shí)鐘上升沿(如上升沿有效)T時(shí)間到達(dá)芯片,這個(gè)T就是建立時(shí)間Set up time。如不滿足Setup time,這個(gè)數(shù)據(jù)就不能被這一時(shí)鐘打入觸發(fā)器,只有在下一個(gè)時(shí)鐘上升沿,數(shù)據(jù)才能被打入觸發(fā)器。保持時(shí)間是指觸發(fā)器的時(shí)鐘信號(hào)上升沿到來(lái)以后,數(shù)據(jù)穩(wěn)定不變的時(shí)間。hold time不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。我們選用a端的輸入脈沖寬度是時(shí)鐘脈沖的四倍,這樣D 觸發(fā)器就可以正常動(dòng)作,輸出結(jié)果是正確的,見(jiàn)圖3、圖4。如果我們一定要使輸入脈沖等于輸出脈沖的寬度,就要使輸入脈沖的高電平與時(shí)鐘脈沖的高電平錯(cuò)開(kāi),保證D觸發(fā)器能工作。 2.3 重新設(shè)計(jì)電路 毛刺是信號(hào)趨于穩(wěn)定前不必要的開(kāi)關(guān)動(dòng)作,使每個(gè)時(shí)鐘沿改變了寄存器間組合邏輯的輸入。對(duì)每個(gè)節(jié)點(diǎn)而言,不同的輸入路徑有不同的延時(shí),這將多次改變狀態(tài)。節(jié)點(diǎn)上的毛刺多少與該節(jié)點(diǎn)的邏輯深度,也就是節(jié)點(diǎn)至最初輸入的邏輯門(mén)個(gè)數(shù)有關(guān)。到達(dá)節(jié)點(diǎn)的邏輯錐體越深、越寬,毛刺也越多。降低邏輯深度,減少邏輯錐體的開(kāi)關(guān)輸入可減少這類(lèi)毛剌。時(shí)序驅(qū)動(dòng)合成以及邏輯單元的合理映射能減少邏輯級(jí)的數(shù)量。 如果一個(gè)計(jì)數(shù)器的輸出端接一個(gè)組合電路,這個(gè)組合電路的輸出端產(chǎn)生了毛刺,最好的解決方法是重新設(shè)計(jì)電路,只要在這一時(shí)刻改變計(jì)數(shù)器輸出端子的輸出順序,就可以消除下一級(jí)組合電路輸出端的毛刺。例如,在下面程序中,在這一時(shí)刻改變q0、q1、q2輸出順序,就能解決計(jì)數(shù)器輸出所接的組合電路輸出端毛刺的問(wèn)題。 subdesign modcount (clk,reset:input; q[2..0] ![]() ) variable counter3:machine of bits(rr[2..0]) with states(r0=B"101", --換成r5的輸出 r1=B"100", --換成r4的輸出 r2=B"000", --換成r0的輸出 r3=B"001", --換成r1的輸出 r4=B"011", --換成r3的輸出 r5=B"010", --換成r2的輸出 r6=B"110", r7=B"111"); begin q[ ]=rr[ ]; counter3.reset=reset; counter3.clk=clk; CASE counter3 IS when r0=>counter3=r1; when r1=>counter3=r2; when r2=>counter3=r3; when r3=>counter3=r4; when r4=>counter3=r5; when r5=>counter3=r6; when r6=>counter3=r7; when r7=>counter3=r0; END CASE; End ; 3 行波時(shí)鐘時(shí)間匹配問(wèn)題 行波時(shí)鐘是計(jì)數(shù)器通常使用的一種時(shí)鐘方式,而使用行波時(shí)鐘是可能引起潛在時(shí)間匹配問(wèn)題的另一個(gè)因素。所謂行波時(shí)鐘是指一個(gè)寄存器的輸出為另一個(gè)寄存器產(chǎn)生時(shí)鐘,而不是使用一個(gè)公共的系統(tǒng)時(shí)鐘。如果仔細(xì)設(shè)計(jì),行波時(shí)鐘可以像全局時(shí)鐘一樣可靠工作,但是行波時(shí)鐘使得與電路有關(guān)的定時(shí)計(jì)算變得很復(fù)雜。行波時(shí)鐘在行波鏈上各寄存器時(shí)鐘之間將產(chǎn)生較大的時(shí)間偏移,并且會(huì)超出最壞情況下的建立時(shí)間、保持時(shí)間和電路中時(shí)鐘到輸出的延時(shí),使系統(tǒng)的實(shí)際速度下降。在圖5(a)中使用行波時(shí)鐘所示電路的時(shí)鐘周期依賴(lài)于計(jì)數(shù)器最低位的變化沿計(jì)數(shù)器傳播到最高位所花的時(shí)間,這個(gè)周期與計(jì)數(shù)器的位數(shù)有關(guān)。隨著逐位進(jìn)位計(jì)數(shù)器的位數(shù)增加,系統(tǒng)的速度將下降,為此可使用同步電路來(lái)解決這個(gè)問(wèn)題,如圖5(b)所示。當(dāng)把異步計(jì)數(shù)器改成同步操作時(shí),系統(tǒng)的速度由寄存器的建立和保持時(shí)間決定,而不是由計(jì)數(shù)器的位數(shù)決定。同步電路不需要使用附加的資源,就可以提高計(jì)數(shù)器的速度,并消除出現(xiàn)非法計(jì)數(shù)數(shù)值的可能性。 還可以通過(guò)在MAX+PLUSII中仔細(xì)地分配資源,來(lái)提高設(shè)計(jì)的可靠性。在MAX器件中通過(guò)PIA的信號(hào)將會(huì)有時(shí)間延時(shí)。為消除這種延時(shí),可以在MAX+PLUSⅡ中進(jìn)行"團(tuán)體"分配,也就是將計(jì)數(shù)器鄰接的位安排在同一個(gè)LAB中的諸宏單元內(nèi)。 4 結(jié)束語(yǔ) 在組合電路中,從信號(hào)輸入到穩(wěn)定輸出需要一定的時(shí)間。由于從輸入到輸出的過(guò)程中,不同通路上門(mén)的級(jí)數(shù)不同,或者門(mén)電路平均延遲時(shí)間的差異,使信號(hào)從輸入經(jīng)不同通道傳輸?shù)捷敵黾?jí)的時(shí)間不同,由于這個(gè)原因,就產(chǎn)生了毛刺。這是一個(gè)普遍性的問(wèn)題。本文對(duì)解決毛刺的方法作了一個(gè)總結(jié),有利于大家快速、準(zhǔn)確設(shè)計(jì)穩(wěn)定的集成電路。在這個(gè)問(wèn)題上,AHDL語(yǔ)言比VHDL語(yǔ)言要直觀、易于理解。從宏觀上看,要解決Altera器件設(shè)計(jì)中的時(shí)間匹配問(wèn)題,要使用同步設(shè)計(jì)。采用同步電路設(shè)計(jì)也可以使電路免受外部因素影響(如硅處理工藝和溫度變動(dòng))而造成的時(shí)間匹配問(wèn)題。 |