FPGA之時鐘復位之非同步復位,同步釋放
- 什麼情況下復位訊號需要做非同步復位同步釋放處理
- 非同步復位同步釋放原理
- 問題1 如果沒有前面兩級觸發器的處理非同步訊號直接驅動系統的觸發器會出現什麼情況
- 問題2 復位訊號存在亞穩態有危險嗎
- 問題3 如果只做一級觸發器同步如何
- 問題4 兩級觸發器同步就能消除亞穩態嗎
- 問題5 第一級觸發器的資料埠為什麼是1b1
- 綜上所述非同步復位同步釋放的電路結構是穩定可靠最省資源的是最優的方案請按套路出牌即可
- 存在不同時鐘域的系統環境中請檢查並正確處理非同步復位同步釋放
什麼情況下,復位訊號需要做“非同步復位,同步釋放”處理?
回答:一般來說,同步系統,都使用非同步復位。這是因為同步復位的電路實現,比非同步復位的電路實現,要浪費更多電路資源。
未在本模組時鐘域做過“非同步復位,同步釋放”處理的復位訊號,提供給本模組做非同步復位使用時,都需要做“非同步復位,同步釋放”處理。常見於系統內兩部件不在同一時鐘域的情況下。
工程實踐中,確實見過由於未做非同步復位的同步處理,而出現大概率系統宕機現象(復位的作用域是很大的)。
非同步復位同步釋放原理
程式碼實現:
- 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’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種方案最節省,為最佳設計。
綜上所述,非同步復位同步釋放的電路結構是穩定可靠最省資源的,是最優的方案。請按套路出牌即可。
存在不同時鐘域的系統環境中,請檢查並正確處理“非同步復位,同步釋放”。
- 也不知道上述說法,有沒有誤區,請指點。純屬個人理解,僅供參考。