1. 程式人生 > 其它 >FPGA之時鐘復位之非同步復位,同步釋放

FPGA之時鐘復位之非同步復位,同步釋放

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

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

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

非同步復位同步釋放原理

程式碼實現:

  1. always @ (posedge clk, negedge rst_async_n) 
  2. if (!rst_async_n) begin 
  3. rst_s1 <= 1'b0;
  4. rst_s2 <= 1'b0;
  5. end
  6. else begin
  7. rst_s1 <= 1'b1;
  8. rst_s2 <= rst_s1;
  9. end
  10. assign rst_sync_n = rst_s2;
  11. endmodule

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

  • 第一級觸發器的資料埠是接電源,即高電平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種方案最節省,為最佳設計。

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

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

  • 也不知道上述說法,有沒有誤區,請指點。純屬個人理解,僅供參考。