異步復位,同步釋放的理解

異步復位,同步釋放的理解

文章轉自:

https://blog.csdn.net/u011729865/article/details/49281713

 

 

什麼情況下,復位信號需要做“異步復位,同步釋放”處理?

回答:一般來說,同步系統,都使用異步復位。這是因爲同步復位的電路實現,比異步復位的電路實現,要浪費更多電路資源。 
未在本模塊時鐘域做過“異步復位,同步釋放”處理的復位信號,提供給本模塊做異步復位使用時,都需要做“異步復位,同步釋放”處理。常見於系統內兩部件不在同一時鐘域的情況下。

工程實踐中,確實見過由於未做異步復位的同步處理,而出現大概率系統死機現象(復位的作用域是很大的)。

異步復位同步釋放原理

這裏寫圖片描述

代碼實現:

always @ (posedge clk, negedge rst_async_n)  
if (!rst_async_n) begin   
rst_s1 <= 1'b0;  
rst_s2 <= 1'b0;  
end  
else begin  
rst_s1 <= 1'b1;  
rst_s2 <= rst_s1;  
end  

assign rst_sync_n = rst_s2;   
endmodule  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

利用前面兩級觸發器實現。特點:

  • 第一級觸發器的數據端口是接電源,即高電平1’b1。
  • 第一級觸發器的輸出,不能使用,因爲仍存在亞穩態的危險。兩級觸發器做同步,是非總線信號的最常見異步處理方法。總線信號的異步處理方法,最常見的是異步fifo實現。

下面講述理解點。

問題1. 如果沒有前面兩級觸發器的處理。異步信號直接驅動系統的觸發器。會出現什麼情況?

回答:很多人只知道觸發器D端口來源是異步的話,會因爲建立保持時間的時序違反而在觸發器Q端口產生亞穩態。 
但是不清楚,異步復位信號爲什麼會導致亞穩態的產生。

首先,回顧理論教材裏介紹的建立保持時間違反分析,教材一般都是拿沒有復位端口的D觸發器舉例。 
然後,畫出帶有異步復位端口的D觸發器,下圖帶異步復位Rd,並帶有異步置位端口Sd。 
由此得知,異步復位信號或者異步置位信號,跟數據端口D信號,沒有什麼區別,都會存在建立保持時間的違反,從而時序衝突,引發輸出亞穩態。 
這裏寫圖片描述

問題2. 復位信號存在亞穩態,有危險嗎?

回答: 
亞穩態,出現的問題或者麻煩,是在信號變化的時候,不能保證第一拍採樣的值是固定的。 
如果信號穩定,不會出現亞穩態的。就是採樣後的跳變,時刻不確定,也許早,也許晚。 
系統不希望這樣的未知狀態發生,系統希望知道在某一個時刻,後續邏輯需要的輸入信號,是穩定值。

二級觸發器同步後,第二季觸發器的輸出基本上是穩定值。後續邏輯根據穩定值,會有穩定的行爲。這就是追求的系統穩定性。

最好是系統一起復位釋放,但是時鐘域不同,不可能保證系統一起復位釋放。一般來說,系統復位釋放的順序,是需要保證的。否則系統就是不安全的。

舉個例子,系統啓動時,內核讀取啓動指令,要powerdown某外設;但是powerdown的邏輯要求外設和內核沒有通信請求正在發生。此時,外設比內核先釋放復位的情況(復位釋放的時刻,外設有可能已經開始與內核發生請求),與內核比外設先釋放復位的情況(復位釋放的時刻,外設肯定與內核沒有發生請求),是不一樣的,powerdown也許不能處理成功。

這也是異步復位信號需要同步釋放的原因,目的都是爲了避免亞穩態的產生。

問題3. 如果只做一級觸發器同步,如何?

回答:不可以。第一級觸發器的輸出,永遠存在亞穩態的可能。亞穩態,導致系統不會復位初始化到已知狀態。 
當第一級觸發器採樣異步輸入之後,允許輸出出現的亞穩態可以長達一個週期,在這個週期內,亞穩態特性減弱。在第二個時鐘沿到來時,第二級同步器採樣,之後才把該信號傳遞到內部邏輯中去。第二級輸出是穩定且已被同步了的。如果在第二級採樣時保持時間不夠,第一級的輸出仍然處於很強的亞穩態,將會導致第二級同步器也進入亞穩態,但這種故障出現的概率比較小。

一般情況下,兩級同步器總體的故障概率是一級同步器故障概率的平方。在大部分的同步化設計中,兩級同步器足以消除所有可能的亞穩態了。

問題4. 兩級觸發器同步,就能消除亞穩態嗎?

回答:可以。但需要綜合或者靜態時序分析的工作配合。第一級觸發器,永遠存在亞穩態的情況,因爲建立保持時間不能保證不發生時序衝突。第二級觸發器,可以保證不發生時序衝突。 
~~一般來說,第一級觸發器,可以在綜合的時候,設置僞路徑,忽略時序衝突。~~ 
第二級觸發器,在綜合的時候,分析時序衝突(一般出現保持時間違反,綜合會插入buffer解決吧?!)。

如此,第二級觸發器,由於避免了時序衝突的發生,輸出不會出現亞穩態。 
回答:不能。大大降低概率,如果幾十年出現一次,也無所謂了。畢竟芯片不會用幾十年,早就老化嚴重淘汰了。 
這裏寫圖片描述

問題5. 第一級觸發器的數據端口爲什麼是1’b1?

回答: 
1. 如果第一級觸發器的數據端口,使用rst_async_n。綜合後的第一級觸發器電路圖如下 
(下圖爲轉載圖片,來自http://www.cnblogs.com/qiweiwang/archive/2010/11/25/1887888.html): 
這裏寫圖片描述 
2. 如果第一級觸發器的數據端口,使用1’b1。綜合後的第一級觸發器電路圖如下: 
這裏寫圖片描述

考慮到電路實現的資源,還是第2種方案最節省,爲最佳設計。

綜上所述,異步復位同步釋放的電路結構是穩定可靠最省資源的,是最優的方案。請按套路出牌即可。

存在不同時鐘域的系統環境中,請檢查並正確處理“異步復位,同步釋放”。

  • 也不知道上述說法,有沒有誤區,請指點。純屬個人理解,僅供參考。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章