競爭與冒險——隨筆


  1)競爭與冒險的概念(產生原因)

  ①信號在組合邏輯電路內部通過連線邏輯單元時,都有一定的延時。延時的大小與連線的長短和邏輯單元的數目有關,同時還受器件的制造工藝、工作電壓、溫度等條件的影響。此外,信號的高低電平轉換也需要一定的過渡時間。由於存在這兩方面因素,多路信號的電平值發生變化時,在信號變化的瞬間,組合邏輯的輸出有先后順序,並不是同時變化,這種現象叫做競爭

  由於競爭往往會出現一些不正確的尖峰信號,這些尖峰信號稱為“毛刺”。 如果一個組合邏輯電路中有“毛刺”出現,就說明該電路存在“冒險”。

  ②冒險信號的脈沖寬度很小,常常只有數納秒或數十納秒,其頻帶帶寬可達數百兆赫茲或更寬。在板級調試時,如果示波器的上限頻率較低,會將幅度較大的毛刺顯示為幅度較小的毛刺,甚至不易被察覺。

  ③冒險按產生形式的不同可以分為靜態冒險動態冒險兩大類。

·靜態冒險是指輸入有變化,而輸出不應變化時產生的單個窄脈沖;

·動態冒險則指的是輸入變化時,輸出也應變化時產生的冒險。

  動態冒險是由靜態冒險引起的,因此存在動態冒險的電路也存在靜態冒險

  ④靜態冒險根據產生條件的不同,分為功能冒險邏輯冒險兩大類。

·當有兩個或兩個以上輸入信號同時產生變化時,在輸出端產生毛刺,這種冒險稱為功能冒險

·如果只有一個變量產生變化時出現的冒險則是邏輯冒險

  冒險往往會影響到邏輯電路的穩定性,因此要注意冒險的消除。

 

  2)靜態冒險產生的判斷

  ①判斷一個邏輯電路在某些輸入信號發生變化時是否會產生冒險,首先要判斷信號是否會同時變化,然后判斷在信號同時變化的時候,是否會產生冒險,這可以通過邏輯函數的卡諾圖邏輯函數表達式來進行判斷。

  ②功能冒險的檢查

  功能冒險是由電路的邏輯功能引起的,只要輸入信號不是按照循環碼的規律變化,組合邏輯就可能產生功能冒險,且不能通過修改設計加以消除,只能通過對輸出采用時鍾采樣來消除

  ③邏輯冒險的檢查

檢查電路是否產生邏輯冒險的方法有兩種:代數法和卡諾圖法

代數法:

  如果一個組合邏輯函數表達式 F,在某些條件下能化簡成F = A+ A或F = AA的形式,在A 產生變化時,就可能產生靜態邏輯冒險。

卡諾圖法

  在組合邏輯的卡諾圖中,若存在素項圈相切,則可能會產生邏輯冒險,如下圖所示的卡諾圖中,AC 和AB兩個素項環相切,在B = C = 1時,A 由1 變為0 時,將產生邏輯冒險:

           

 

 

  (3)毛刺的消除

  毛刺並不是對所有的輸入都有危害,例如D 觸發器的D 輸入端,只要毛刺不出現在時鍾的上升沿並且滿足數據的建立和保持時間,就不會對系統造成危害,我們可以說D 觸發器的D 輸入端對毛刺不敏感

  根據這個特性,我們應當在系統中盡可能采用同步電路,這是因為同步電路信號的變化都發生在時鍾沿,只要毛刺不出現在時鍾的沿口並且不滿足數據的建立和保持時間,就不會對系統造成危害。(由於毛刺很短,多為幾納秒,基本上都不可能滿足數據的建立和保持時間)因此我們可以通過改變設計,破壞毛刺產生的條件,來減少毛刺的發生。

  例如,在數字電路設計中,常常采用格雷碼計數器取代普通的二進制計數器,這是因為格雷碼計數器的輸出每次只有一位跳變,消除了競爭冒險的發生條件,避免了毛刺的產生。

  目前,主要有兩種基本的采樣方法:脈沖選擇法時序邏輯保持法

  ①脈沖選擇法

  該方法在輸出信號的保持時間內,用一定寬度的高電平脈沖輸出信號做邏輯“”運算,由此獲取輸出信號的電平值。

  這種方法大大減少毛刺,但它並不能完全消除毛刺,我們通常使用“采樣”的方法。一般說來,冒險出現在信號發生電平轉換的時刻,也就是說在輸出信號的建立時間內會發生冒險,而在輸出信號的保持時間內是不會有毛刺信號出現的。如果在輸出信號的保持時間內對其進行“采樣”,就可以消除毛刺信號的影響。但是這種方法必須產生在合適的時候產生高電平,因此有一定的難度。

  ②時序邏輯保持法

  其利用D 觸發器的D 輸入端對毛刺信號不敏感的特點,在輸出信號的保持時間內,用觸發器讀取組合邏輯的輸出信號,這種方法類似於將異步電路轉化為同步電路。舉例如下:

 1 module maoxian(
 2     input clk,
 3     input A, B, C, D,
 4     output reg Out,
 5     output Tout
 6 );
 7 
 8 wire aandb, candd, tmp;
 9 
10 assign aandb = A && B;
11 assign candd = C && D;
12 assign tmp = aandb || candd;
13 
14 
15 always @(posedge clk) begin
16     Out <= tmp;
17 end
18 
19 assign Tout = tmp;
20 
21 endmodule

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM