全面剖析數字電路中的復位設計
隨著(zhù)數字化設計和SoC的日益復雜,復位架構也變得非常復雜。在實(shí)施如此復雜的架構時(shí),設計人員往往會(huì )犯一些低級錯誤,這些錯誤可能會(huì )導致亞穩態(tài)、干擾或其他系統功能故障。本文討論了一些復位設計的基本的結構性問(wèn)題。在每個(gè)問(wèn)題的最后,都提出了一些解決方案。
本文引用地址:http://dyxdggzs.com/article/247850.htm復位域交叉問(wèn)題
1. 問(wèn)題
在一個(gè)連續設計中,如果源寄存器的異步復位不同于目標寄存器的復位,并且在起點(diǎn)寄存器的復位斷言過(guò)程中目標寄存器的數據輸入發(fā)生異步變化,那么該路徑將被視為異步路徑,盡管源寄存器和目標寄存器都位于同一個(gè)時(shí)鐘域,在源寄存器的復位斷言過(guò)程中可能導致目標寄存器出現亞穩態(tài)。這被稱(chēng)為復位域交叉,其中啟動(dòng)和捕捉觸發(fā)的復位是不同的。
在這種情況下,C寄存器和A寄存器的起點(diǎn)異步復位斷言是不同的。在C寄存器復位斷言過(guò)程中而A觸發(fā)器沒(méi)有復位,如果A寄存器的輸入端有一些有效數據交易,那么C寄存器的起點(diǎn)異步復位斷言引起的異步變更可能導致目標A寄存器發(fā)生時(shí)序違規,從而可能產(chǎn)生亞穩態(tài)。

圖1:復位域交叉問(wèn)題
在上面的時(shí)序圖中,當有一些有效數據交易通過(guò)C1進(jìn)行時(shí),rst_c_b獲得斷言,導致C1發(fā)生異步改變,w.r.t clk從而使QC1進(jìn)入亞穩態(tài),這可能導致設計發(fā)生功能故障。
2. 解決方案
* 使用異步復位、不可復位觸發(fā)器或D1觸發(fā)器POR.
* 如果復位源rst_c_b是同步的,那么則認為來(lái)自C_CLR --> Q的用于從rst_c_b_reg -->C_CLR-->C_Q1-->C1-->A_D進(jìn)行設置保持檢查的時(shí)序弧能夠避免設計亞穩態(tài)。然而,通常在默認情況下 C_CLR-->Q時(shí)序弧在庫中不啟用,需要在定時(shí)分析過(guò)程中明確啟用。
* 在目的地(A)使用雙觸發(fā)器同步器,以避免設計中發(fā)生亞穩態(tài)傳播。然而,設計人員應確保安裝兩個(gè)觸發(fā)器引入的延遲不會(huì )影響預期功能。
由于組合環(huán)路導致復位源干擾
1. 問(wèn)題
在SoC 中,全局系統復位在設備中組合了軟件或硬件生成的各種復位源。LVD復位、看門(mén)狗復位、調試復位、軟件復位、時(shí)鐘丟失復位是導致全局系統復位斷言的一些示例。 然而,如果由于任何復位源導致的全局復位斷言是完全異步的,且復位發(fā)生源邏輯被全局復位清零,那么設計中會(huì )產(chǎn)生組合環(huán)路,這會(huì )在該復位源產(chǎn)生干擾。組合路徑的傳播延遲會(huì )根據不同的流程、電壓或溫度以及干擾范圍而不同。如果設計中使用了組合信元用于復位斷言和去斷言,那么也會(huì )導致模擬中出現紊亂情況。這被視為設計人員的非常低級的錯誤。

圖2:復位源干擾(基本問(wèn)題)
在上圖中,當復位源SW_Q斷言時(shí),會(huì )導致rst_b斷言,這是全局復位?,F在,如果全局復位本身被用于清除 “SW_Q” 復位斷言,那么會(huì )在設計中在SW_Q輸出和全局復位時(shí)產(chǎn)生干擾。此外,在模擬中,這會(huì )導致紊亂情況,因為復位源斷言試圖通過(guò)該組合邏輯去斷言。
然而,如果復位源(SW_Q)在復位狀態(tài)機(觸發(fā)器的SET/CLR輸入)為全局復位斷言被異步使用,那么復位干擾可能能夠復位整個(gè)系統(通過(guò)斷言全局復位),因為全局系統復位去斷言不僅僅與復位源去斷言相關(guān)。當該復位源(有干擾)被同步使用或在觸發(fā)器D輸入使用的情況下可能依然有一個(gè)問(wèn)題。干擾范圍可能無(wú)法在至少一個(gè)周期內保持穩定,因此這不會(huì )被目標觸發(fā)器捕獲。此外,該復位源不能被用作任何電路的時(shí)鐘(除了脈沖捕捉電路),因為它可能違反時(shí)鐘寬度。

圖3:復位源干擾(問(wèn)題2)
在上圖中,復位源SW_Q將出現干擾。雖然如果復位源SW_Q的干擾在某個(gè)觸發(fā)器被捕捉作為復位事件狀態(tài)(在S)或用于其他目的,全局復位輸出(rst_b)都沒(méi)有干擾,但它將導致時(shí)序違反/亞穩態(tài),或根本不可能被捕獲。
2. 解決方案
* 設計人員永遠都不應犯下上述(圖2)低級錯誤。
* 如果復位實(shí)現如圖3所示,那么設計人員應保證復位源(在該示例中為SW_Q)總是在觸發(fā)器的SET/CLR輸入使用,而不在D或CLK使用。
* 解決這個(gè)問(wèn)題的最好的方法是在復位狀態(tài)機中使用之前注冊該復位源。 雖然它將導致時(shí)鐘依靠全局復位斷言,但是無(wú)論如何,如果沒(méi)有時(shí)鐘,該內部復位(SW_Q)都不會(huì )斷言。請參見(jiàn)圖4.

圖4:解決方案1
此外,用戶(hù)也可以擴展SW_Q斷言,然后再在設計中使用它,復位斷言與時(shí)鐘無(wú)關(guān)。 請參見(jiàn)圖5.

圖5:解決方案2
復位路徑的組合邏輯
1. 問(wèn)題(I)
如果組合邏輯輸入大約在同一時(shí)間發(fā)生變化,那么使用復位路徑中的組合邏輯可能產(chǎn)生干擾,這可能在設計中觸發(fā)虛假復位。下面是一個(gè)RTL代碼,它會(huì )在設計中意外復位。
assign module_a_rstb = !((slave_addr[7:0]==8‘h02 & write_enable & (wdata[7:0]==00))
always @(posedge clk or negedge module_rst_b)
if(!module_rst_b) data_q <= 1’b0;
else data_q <= data_d;
在上面的示例中,slave_addr,write_enable和wdata改變它們的值 w.r.t system clock,使用靜態(tài)時(shí)序分析,設計人員可以保證在目標觸發(fā)器的設置時(shí)間窗口之前這些信號在一個(gè)時(shí)鐘周期內的穩定性。然而,在該示例中,這些信號直接用作觸發(fā)器的異步清零輸入。
因此,即使在特定的時(shí)間slave_addr[7:0]在邏輯上將其值從“00000110”改為 “01100000”,但由于組合邏輯的傳播延遲(凈延遲和信元延遲)它可以用一個(gè)序列“00000110 --> 00000010 --> 00000000 --> 01000000 --> 01100000”生成過(guò)渡。
在這段時(shí)間里,salve_addr為“00000010”,如果wdata[7:0]始終為零且“write_enable” 已經(jīng)被斷言,那么它將在module_rst_b創(chuàng )建一個(gè)無(wú)用脈沖,從而導致虛假復位。

圖6:復位路徑的組合邏輯
2. 解決方案
首先注冊組合輸出,然后再將其用作復位源(如圖7所示)。

圖7:復位路徑的組合邏輯解決方案
3. 問(wèn)題(II)
在上面的示例中,復位路徑的組合邏輯解決方案并不完善。如果組合邏輯輸入大約在同一時(shí)間發(fā)生變化,那么它可能在設計中觸發(fā)虛假復位。然而,如果組合邏輯的輸入信號變化相互排斥,那么它可能不會(huì )引起任何設計問(wèn)題。例如,測試模式和功能模式相互排斥。因此復位路徑的測試復用是有效的設計實(shí)踐。
然而,對于某些情況,變化相互排斥的靜態(tài)信號或信號可能會(huì )導致設計出現虛假復位觸發(fā)。下面的示例描述了此類(lèi)設計可能出現問(wèn)題。

圖8:復位路徑的組合邏輯(問(wèn)題 2)
在上面的示例中,多路復用結構用于復位路徑,同時(shí)進(jìn)行RTL編碼。其中“mode” 是一個(gè)控制信號,不頻繁改變,而mode0_rst_b和mode_1_rst_b是兩個(gè)復位事件,然而在合成RTL時(shí),在門(mén)控級它被分解成不同的復雜的組合(And-Or-Invert[AOI])信元。雖然在邏輯上它相當于一個(gè)多路復用器,但由于不同的信元和凈延遲,每當信號“mode”從 1-->0變化時(shí),final_rst_b都會(huì )產(chǎn)生干擾。
數字濾波器相關(guān)文章:數字濾波器原理
評論