同步復位、非同步復位、非同步復位同步釋放筆記
一般來說,競爭-冒險是由於組合電路競爭冒險產生毛刺,從而影響整個邏輯電路。其實時序電路中也是存在競爭-冒險的,而這一特性主要是由d觸發器輸入端訊號之間的竟爭產生的。存在以下兩種競爭-冒險。
1)clk上公升沿與rstn下降沿同時到達
實際上對於d觸發器而言,rstn訊號的優先順序高於clk訊號,這樣在rstn到來時,實現的是復位操作。因此,d觸發器屬於非同步復位器件。
2)clk上公升沿與rst n上公升沿同時到達
當 rstn上公升沿達到時,d觸發器在理論上完成復位了,但是此時如果ck恰好在rstn 訊號釋放的周圍,系統聽誰的?此時在電路執行中,將會出現短暫的競爭一冒險問題,系統不穩定。
設計fpga 電路時,由於rstn的優先級別比較高,所以電路通過全域性時鐘引腳輸入。rstn訊號與全域性時鐘elk稱為非同步時鐘。非同步時鐘也有很多種類,以下是專案中經常遇到的幾種∶
(1)系統非同步復位訊號;
(2)由其他處理器輸入的時鐘;
(3)內部組合邏輯產生的時鐘。
為了解決這一問題,我們需要處理好非同步復位訊號的優先順序,同時又要保證時鐘訊號的同步性。最簡單的同步方案可以使用主時鐘去打一拍,實現訊號的同步。下面根據非同步復位與同步復位的優缺點,分析外部復位訊號,解決非同步復位訊號的同步化問題。
1.非同步復位
always @ (posedge clk or negedge reset)
begin
if ( ~reset)
q <= 1』b0 ;
else
q <= data ;
end綜合後的電路如下圖:
這樣的設計,沒有對外部復位訊號進行處理,設計上比較簡單,無論時鐘沿是否有效,都會立即對目標(如暫存器、ram等)復位。非同步復位的應用要點如下:
●指定非同步復位時,只需在 always的敏感表中加入復位訊號的有效沿即可,當復位訊號有效沿到達時,無論時鐘沿是否有效,復位都會立即發揮其功能。
非同步復位的優點如下∶
●由於多數目標器件(如 fpga和cpld)和asic庫的觸發器都包含非同步復位埠,非同步復位會節約邏輯資源
●非同步復位設計簡單
● 對於大多數 fpga,都有專用的全域性非同步復位/置位資源(gsr,global set reset),使用gsr資源,非同步復位到達所有暫存器的偏斜(skew)最小
儘管我們簡化了電路,精簡了設計,但由於外部復位訊號與時鐘訊號存在一定程度的競爭,所以還是存在一些不預知的問題,如下所示。
(1)在復位訊號釋放(release)時容易出現問題。具體來說,倘若復位釋放時恰恰在時鐘有效沿附近,就很容易使暫存器輸出出現亞穩態,從而導致不穩定。
何為亞穩態?亞穩態就是資料處於最不穩定,將變未變的時刻。如圖所示,當乙個小球處於拋物面頂端時,它可能往左掉,也可能往右掉。這就好像乙個訊號在clk上公升沿與 rstn下降沿同時到達時,2個改變的條件同時滿足,會不知所措,這個問題會嚴重影響系統的穩定性。
亞穩態示意圖
(2)復位訊號容易受到毛刺的影響。這是由於時鐘抖動或按鍵觸發時的硬體原因造成的。復位訊號如果抖動,上圖中的這個小球將不斷在頂部的乙個區域內徘徊,這時系統處於極不穩定的狀態,因此,這也是我們需要考慮的乙個問題。
2.同步復位
為了解決非同步復位的競爭冒險問題,將復位訊號作為外部訊號去取樣,而非時鐘訊號;
always @ (posedge clk )
begin
if ( ~reset)
q <= 1』b0 ;
else
q <= data ;
end綜合後電路圖如下所示:
在上述**中,復位訊號作為乙個使能訊號進行取樣,不再作為d觸發器的復位埠,這樣設計電路不存在競爭-冒險問題,因為reset由全域性時鐘clk取樣,整個設計中不存在優先順序問題,全都是clk 說了算,它是乙個具有權力與威望的"ceo"。
所謂同步復位是指當復位訊號發生變化時,並不立即生效,只有當有效時鐘沿取樣到已變化的復位訊號後,才對所有暫存器復位。同步復位的應用要點如下:
●指定同步復位時,always的敏感表中僅有時鐘沿訊號,僅僅當時鐘沿採到同步復位的有效電平時,才會在時鐘沿到達時刻進行復位操作。如果目標器件或可用庫中的觸發器本身包含同步復位埠,則在實現同步復位電路時可以直接呼叫同步復位端,然而很多目標器件(如pld)和asic庫的觸發器本身並不包含同步復位埠,這樣復位訊號與輸入訊號組成某種組合邏輯(比如復位低電平有效,只需復位與輸入訊號兩者相與即可),然後將其輸入到暫存器的輸入端.為了提高復位電路的優先順序,一般在電路描述時使用帶有優先順序的if.else結構、復位電路在第乙個if下描述,其他電路在else或else.if分支中描述。
同步復位電路的優點如下∶
(1)降低了亞穩態的出現概率;
(2)可以使所設計的系統成為100%的同步時序電路,這將大大有利於時序分析、而且綜合出來的fmax一般較高∶
(3)因為它只有在時鐘有效電平到來時才有效,所以可以濾除高於時鐘頻率的毛刺。
在d觸發器中,本身就有乙個時鐘輸入端與復位埠。rst_n作為使能時鐘取樣訊號,而資料則通過乙個選擇器輸入,即當rst_n=1時,d觸發器輸入a∶而當rst_n=0時,d 髮器輸入0,這樣理論上已經解決了clk與rst_n競爭-冒險的問題,但是將rst_n作為使能訊號來操作,額外地消耗了fpga 組合電路的資源。而整個系統都採用這種方式實現同步時,fpga 消耗的總組合邏輯資源可想而知。
因此,同步復位電路也不是完美的,它的缺點如下∶
(1)同步復位的最大問題在於必須保證復位訊號的有效時間足夠長,這樣才能保證所有觸發器都能有效地復位。由於同步復位僅當時鐘沿取樣到復位訊號時才會進行復位操作,所以其訊號的持續時間起碼要大於設計的最長時鐘週期,以保證所有時鐘的有效沿都能取樣到同步復位訊號.事實上,僅僅保證同步復位訊號的持續時間大於最慢的時鐘週期還是不夠的,設計中還要考慮到同步復位訊號樹通過所有相關組合邏輯路徑時的延時,以及由於時鐘佈線產生的偏斜(skew)。這樣,只有同步復位大於時鐘最大週期,加上同步訊號穿過的組合邏輯路徑延時,再加上時鐘偏斜時,才能保證同步復位可靠、徹底。如圖 所示,假設同步復位邏輯樹組合邏輯的延時為t1,復位訊號傳播路徑的最大延時為t2,最慢時鐘的週期為period max,時鐘的skew為clk2-clk1,則同步復位的週期 t_ rst 應該滿足如下公式。
(2)由於大多數的邏輯器件的目標庫內的dff 都只有非同步復位埠,所以倘若採用同步復位,綜合器就會在暫存器的資料輸入埠插入組合邏輯,這樣就會耗費較多的邏輯資源。
3.非同步復位、同步釋放
綜上所述,非同步復位存在亞穩態問題,同步復位存占用資源問題,都不是理想的解決方案,都存在一定的弊端。
d觸發器有支援非同步復位專用的埠,採用非同步復位的埠無須額外增加器件資源。為了解決這一問題,以避免資源的浪費,我們還是希望處理外部復位訊號,以實現直接或間接地控制d觸發器的復位端。這樣充分利用了d觸發器,同時也節約了組合電路的消耗。因此,可以在將復位訊號作為使能時鐘的基礎上,人為地生成另乙個同步化後的同步復位訊號。這需要我們用d觸發器打一拍,然後直接提供給剩下的時序電路使用。修改後的同步化復位設計如下所示∶
module no_block1 (data, clk, reset, q);
input data, clk, reset;
output q;
reg q;
reg rst_n;
always@(posedge clk)
begin
if(~reset)
rst_n<=1』b0;
else
rst_n<=reset;
endalways @ (posedge clk or negedge rst_n)
begin
if ( ~rst_n)
q <= 1』b0 ;
else
q <= data ;
endendmodule
綜合後的rtl如下圖所示:
首先,第乙個d觸發器將reset打了1拍(通過def將reset同步到clk上去),這一過程將reset訊號同步到了ck時鐘域∶接著輸出的 rst_n訊號直接作為第二個d觸發器的復位訊號。這樣設計電路的好處在於只用了1個d觸發器實現了非同步復位訊號的同步,在功能上實現了非同步復位訊號的同步化,在資源上大大減少了組合邏輯的使用。
事實上,這種方式也是最常見的非同步時鐘的處理方法。對於"非同步復位,同步釋放"、理解如下。
(1)所謂"非同步復位"是針對d觸發器的復位埠,它是非同步的,但是設計中已經同步了非同步復位訊號,所以這只是某種意義上的"非同步復位"。
(2)所謂"同步釋放",實際上是由於我們設計了同步邏輯電路,外部復位訊號不會在出現釋放時與clk 訊號競爭,整個系統將與全域性時鐘clk 訊號同步。
同步復位與非同步復位 非同步復位和同步復位區別
同步復位與非同步復位 非同步復位和同步復位區別.瀏覽 188次 一 同步復位與非同步復位特點 同步復位就是指復位訊號只有在時鐘上公升沿到來時,才能有效。否則,無法完成對系統的復位工作。非同步復位是指無論時鐘沿是否到來,只要復位訊號有效,就對系統進行復位。二 非同步復位和同步復位的優缺點 1 同步復位...
非同步復位同步釋放
結構簡單,節省資源 待深度挖掘,為什麼就結構簡單了呢?1 這裡有乙個巨集觀解釋 最好是系統一起復位釋放,但是時鐘域不同,不可能保證系統一起復位釋放。一般來說,系統復位釋放的順序,是需要保證的。否則系統就是不安全的。舉個例子,系統啟動時,核心讀取啟動指令,要powerdown某外設 但是powerdo...
非同步復位同步釋放
簡介 在實際的工程中選擇復位策略之前必須考慮許多設計方面的問題,如使用同步復位或者非同步復位或者非同步復位同步釋放 asynchronous reset synchronous release或者synchronized asynchronous reset 以及是否每乙個觸發器都需要進行復位。復位...