復(fù)位設(shè)計(jì)中的結(jié)構(gòu)性缺陷及解決方案(一)
然而,如果復(fù)位源(SW_Q)在復(fù)位狀態(tài)機(jī)(觸發(fā)器的SET/CLR輸入)為全局復(fù)位斷言被異步使用,那么復(fù)位干擾可能能夠復(fù)位整個(gè)系統(tǒng)(通過(guò)斷言全局復(fù)位),因?yàn)槿窒到y(tǒng)復(fù)位去斷言不僅僅與復(fù)位源去斷言相關(guān)。當(dāng)該復(fù)位源(有干擾)被同步使用或在觸發(fā)器D輸入使用的情況下可能依然有一個(gè)問(wèn)題。干擾范圍可能無(wú)法在至少一個(gè)周期內(nèi)保持穩(wěn)定,因此這不會(huì)被目標(biāo)觸發(fā)器捕獲。此外,該復(fù)位源不能被用作任何電路的時(shí)鐘(除了脈沖捕捉電路),因?yàn)樗赡苓`反時(shí)鐘寬度。
圖3:復(fù)位源干擾(問(wèn)題2)
在上圖中,復(fù)位源SW_Q將出現(xiàn)干擾。雖然如果復(fù)位源SW_Q的干擾在某個(gè)觸發(fā)器被捕捉作為復(fù)位事件狀態(tài)(在S)或用于其他目的,全局復(fù)位輸出(rst_b)都沒(méi)有干擾,但它將導(dǎo)致時(shí)序違反/亞穩(wěn)態(tài),或根本不可能被捕獲。
2. 解決方案
* 設(shè)計(jì)人員永遠(yuǎn)都不應(yīng)犯下上述(圖2)低級(jí)錯(cuò)誤。
* 如果復(fù)位實(shí)現(xiàn)如圖3所示,那么設(shè)計(jì)人員應(yīng)保證復(fù)位源(在該示例中為SW_Q)總是在觸發(fā)器的SET/CLR輸入使用,而不在D或CLK使用。
* 解決這個(gè)問(wèn)題的最好的方法是在復(fù)位狀態(tài)機(jī)中使用之前注冊(cè)該復(fù)位源。 雖然它將導(dǎo)致時(shí)鐘依靠全局復(fù)位斷言,但是無(wú)論如何,如果沒(méi)有時(shí)鐘,該內(nèi)部復(fù)位(SW_Q)都不會(huì)斷言。請(qǐng)參見(jiàn)圖4.
圖4:解決方案1
此外,用戶也可以擴(kuò)展SW_Q斷言,然后再在設(shè)計(jì)中使用它,復(fù)位斷言與時(shí)鐘無(wú)關(guān)。 請(qǐng)參見(jiàn)圖5.
圖5:解決方案2
復(fù)位路徑的組合邏輯
1. 問(wèn)題(I)
如果組合邏輯輸入大約在同一時(shí)間發(fā)生變化,那么使用復(fù)位路徑中的組合邏輯可能產(chǎn)生干擾,這可能在設(shè)計(jì)中觸發(fā)虛假?gòu)?fù)位。下面是一個(gè)RTL代碼,它會(huì)在設(shè)計(jì)中意外復(fù)位。
assign module_a_rstb = !((slave_addr[7:0]==8‘h02 write_enable (wdata[7:0]==00))
always @(posedge clk or negedge module_rst_b)
評(píng)論