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