以下內容摘自正點原子的:《邏輯設計開發指南》
復位電路是數字邏輯設計中非常常用的電路,不管是 fpga 還是 asic 設計,都會涉及到復位,一般 fpga或者 asic 的復位需要我們自己設計復位方案。復位指的是將暫存器恢復到預設值。一般復位功能包括同步復位和非同步復位。復位一般由硬體開關觸發引起,也可以由復位邏輯控制引起。
1、 數字邏輯為什麼需要復位?
2、 fpga 板上面沒有復位按鍵怎麼辦?
3、 復位只有通過按鍵復位乙個控制方式嗎?
4、 同步復位好還是非同步復位好呢?
5、 復位是高電平有效還是低電平有效好呢?
依次來解決一下上面的疑問
1、 數字邏輯為什麼需要復位?
數位電路中暫存器和 ram 在上電之後預設的狀態和資料是不確定的,如果有復位,我們可以把暫存器復位到初始狀態 0,ram 的資料可以通過復位來觸發 ram 初始化到全 0。那可能很多人會問為什麼是全 0呢?其實一般邏輯起始都是從 0 開始變化的,這個是根據設計的需要設定的乙個值,如果設計需要暫存器上電復位為 1,也是可以的。還有一種情況是邏輯進入了錯誤的狀態,通過復位可以把所有的邏輯狀態恢復到初始值,如果沒有復位,那麼邏輯可能永遠執行在錯誤的狀態。因此復位功能是很重要的乙個功能。
2、 fpga 板上面沒有復位按鍵怎麼辦?
沒有復位按鍵也沒有關係,因為 fpga 內部也會有上電復位的功能,不管是 intel(已收購 altera)還是 xilinx 的 fpga,都是有上電復位電路,也就是 por(power on reset)電路。fpga 晶元內部有乙個上電檢測模組,一旦檢測到電源電壓超過檢測門限後,就產生乙個上電復位脈衝(power on reset)送給所有的暫存器,這個脈衝會自動作用在各個暫存器的復位端,和功能復位管腳共同控制暫存器的復位。
還有一種情況,就是 fpga 重新配置之後,也會觸發上電復位。因此 fpga 板上面即使沒有復位按鍵也是沒有關係的。
3、 復位只有通過按鍵復位乙個控制方式嗎?
復位按鍵是一種控制方式,還有一種上電自動復位控制,如下圖所示。
這種是一種簡單的 rc 復位電路,電源接通時候,通過 r1 對 c2 進行充電,經過一段延遲後加到電路當中產生復位訊號,這個復位訊號的上公升速度低於電源的上電速度,當復位引腳檢測到高電平時候,系統復位結束,進入正常工作狀態。
4、 同步復位好還是非同步復位好呢?
同步復位指的是當時鐘上公升沿檢測到復位訊號,執行復位操作,有效的時鐘沿是前提。
verilog 中是這樣寫的:
always @ (posedge clk) begin
if(rst_n ==
1'b0)
y <=
1'b0 ;
else
y <= b ;
end
同步復位的優點如下:a、有利於**器的**;
b、可以使所設計的系統成為 100%的同步時序電路,有利於時序分析,而且可綜合出較高的 fmax;
c、由於只在時鐘有效電平到來時才有效,所以可以濾除高於時鐘頻率的復位毛刺。
同步復位也有一些缺點,缺點如下:
a、復位訊號的有效時長必須大於時鐘週期,才能真正被系統識別並完成復位任務。同時還要考慮諸如時鐘偏移、組合邏輯路徑延時、復位延時等因素(所以復位訊號有時需要脈衝展寬,用以保證時鐘有效期間有足夠的復位寬度);
b、由於大多數的邏輯器件的目標庫內的 dff 都只有非同步復位埠,所以,倘若採用同步復位的話,綜合器就會在暫存器的資料輸入埠插入組合邏輯,這樣就會一方面額外增加 fpga 內部的邏輯資源,另一方面也增加了相應的組合邏輯門時延。
非同步復位指的是無論時鐘沿是否到來,只要復位訊號有效,就對系統進行復位。當時鐘上公升沿檢測到復位訊號,執行復位操作。
verilog 中是這樣寫的:
always @ (posedge clk or negedge rst_n) begin
if(rst_n ==
1'b0)
y <=
1'b0 ;
else
y <= b ;
end
優點:a、大多數目標器件庫的 dff 都有非同步復位埠,那麼該觸發器的復位埠就不需要額外的組合邏輯,這樣就可以節省資源;
b、設計相對簡單;
c、非同步復位訊號產生和響應都很方便(電路在任何情況下都能復位而不管是否有時鐘出現)。
非同步復位也有一些缺點,缺點如下:
a、最大的問題在於它屬於非同步邏輯,問題出現在復位釋放時,而不是有效時,如果復位釋放接近時鐘有效沿,則觸發器的輸出可能進入亞穩態(此時 clk 檢測到的 rst_n 的狀態就會是乙個亞穩態,即是 0 是 1是不確定的),從而導致復位失敗。
b、可能因為雜訊或者毛刺造成虛假復位訊號(比如系統正常工作時突然復位)(注意:時鐘埠、清零和置位埠對毛刺訊號十分敏感,任何一點毛刺都可能會使系統出錯,因此判斷邏輯電路中是否存在冒險以及如何避免冒險是設計人員必須要考慮的問題);
c、靜態定時分析比較困難,靜態時序分析一般是針對同步設計的,都是基於時鐘週期來分析時序的。
d、對於 dft(designfortest 可測性設計)設計,如果復位訊號不是直接來自於 i/o 引腳,在 dft 掃瞄和測試時,復位訊號必須被禁止,因此需要額外的同步電路。
總結下來,我們推薦使用非同步復位、同步釋放的方式,並且復位訊號為低電平有效。
這裡我們再進一步解釋下,
1、復位訊號到來的有效與否與 clk 無關,而且復位訊號的撤除也與 clk 無關,但是復位訊號的撤除是在下乙個 clk 來到後才起的作用。
2、非同步復位同步撤離的目的為了防止復位訊號撤除時,可能產生的亞穩態。
非同步復位同步撤離產生的 verilog **如下:
復位訊號 rst_sync_n 由高拉低時實現 y 暫存器的非同步復位。同步釋放,這個是關鍵,即當復位訊號rst_async_n 撤除時(由低拉高),由於雙緩衝電路(雙觸發器)的作用,rst_sync_n 不會隨著 rst_async_n 的撤除而撤除。假設 rst_async_n 撤除時發生在 clk 上公升沿,如果不加此電路則可能發生亞穩態事件,但是加上此電路以後,假設第一級 d 觸發器 clk 上公升沿時 rst_async_n 正好撤除,(第乙個 dff 此時是處於亞穩態的;假設此時識別到高電平;若是識別到低電平,則增加乙個 delay)則 dff1 輸出高電平,此時第二級觸發器也會更新輸出,但是輸出值為前一級觸發器 clk 來之前時的 q1 輸出狀態,顯然 q1 之前為低電平,所以第二級觸發器輸出保持復位低電平,直到下乙個 clk 來之後,才隨著變為高電平,即同步釋放。
5、 復位訊號是高電平有效還是低電平有效好呢?
一般數位電路設計裡面是使用低電平復位,但是在一些 ip 電路裡面,比如 fpga 的 fifo 或者一些其他硬核 ip,一般都是高電平復位。使用低電平還是高電平復位都差不多,不過習慣上一般使用低電平復位。
復位電路設計 非同步復位 同步釋放
以下內容摘自正點原子的 邏輯設計開發指南 復位電路是數字邏輯設計中非常常用的電路,不管是 fpga 還是 asic 設計,都會涉及到復位,一般 fpga或者 asic 的復位需要我們自己設計復位方案。復位指的是將暫存器恢復到預設值。一般復位功能包括同步復位和非同步復位。復位一般由硬體開關觸發引起,也...
同步復位 非同步復位 非同步復位同步釋放筆記
同步復位 非同步復位 非同步復位同步釋放筆記 一般來說,競爭 冒險是由於組合電路競爭冒險產生毛刺,從而影響整個邏輯電路。其實時序電路中也是存在競爭 冒險的,而這一特性主要是由d觸發器輸入端訊號之間的竟爭產生的。存在以下兩種競爭 冒險。1 clk上公升沿與rstn下降沿同時到達 實際上對於d觸發器而言...
非同步復位同步釋放
結構簡單,節省資源 待深度挖掘,為什麼就結構簡單了呢?1 這裡有乙個巨集觀解釋 最好是系統一起復位釋放,但是時鐘域不同,不可能保證系統一起復位釋放。一般來說,系統復位釋放的順序,是需要保證的。否則系統就是不安全的。舉個例子,系統啟動時,核心讀取啟動指令,要powerdown某外設 但是powerdo...