復(fù)位設(shè)計(jì)中的結(jié)構(gòu)性缺陷及解決方案(一)
else data_q = data_d;
在上面的示例中,slave_addr,write_enable和wdata改變它們的值 w.r.t system clock,使用靜態(tài)時(shí)序分析,設(shè)計(jì)人員可以保證在目標(biāo)觸發(fā)器的設(shè)置時(shí)間窗口之前這些信號(hào)在一個(gè)時(shí)鐘周期內(nèi)的穩(wěn)定性。然而,在該示例中,這些信號(hào)直接用作觸發(fā)器的異步清零輸入。
因此,即使在特定的時(shí)間slave_addr[7:0]在邏輯上將其值從“00000110”改為 “01100000”,但由于組合邏輯的傳播延遲(凈延遲和信元延遲)它可以用一個(gè)序列“00000110 --> 00000010 --> 00000000 --> 01000000 --> 01100000”生成過渡。
在這段時(shí)間里,salve_addr為“00000010”,如果wdata[7:0]始終為零且“write_enable” 已經(jīng)被斷言,那么它將在module_rst_b創(chuàng)建一個(gè)無用脈沖,從而導(dǎo)致虛假?gòu)?fù)位。
圖6:復(fù)位路徑的組合邏輯
2. 解決方案
首先注冊(cè)組合輸出,然后再將其用作復(fù)位源(如圖7所示)。
圖7:復(fù)位路徑的組合邏輯解決方案
3. 問題(II)
在上面的示例中,復(fù)位路徑的組合邏輯解決方案并不完善。如果組合邏輯輸入大約在同一時(shí)間發(fā)生變化,那么它可能在設(shè)計(jì)中觸發(fā)虛假?gòu)?fù)位。然而,如果組合邏輯的輸入信號(hào)變化相互排斥,那么它可能不會(huì)引起任何設(shè)計(jì)問題。例如,測(cè)試模式和功能模式相互排斥。因此復(fù)位路徑的測(cè)試復(fù)用是有效的設(shè)計(jì)實(shí)踐。
然而,對(duì)于某些情況,變化相互排斥的靜態(tài)信號(hào)或信號(hào)可能會(huì)導(dǎo)致設(shè)計(jì)出現(xiàn)虛假?gòu)?fù)位觸發(fā)。下面的示例描述了此類設(shè)計(jì)可能出現(xiàn)問題。
圖8:復(fù)位路徑的組合邏輯(問題 2)
在上面的示例中,多路復(fù)用結(jié)構(gòu)用于復(fù)位路徑,同時(shí)進(jìn)行RTL編碼。其中“mode” 是一個(gè)控制信號(hào),不頻繁改變,而mode0_rst_b和mode_1_rst_b是兩個(gè)復(fù)位事件,然而在合成RTL時(shí),在門控級(jí)它被分解成不同的復(fù)雜的組合(And-Or-Invert[AOI])信元。雖然在邏輯上它相當(dāng)于一個(gè)多路復(fù)用器,但由于不同的信元和凈延遲,每當(dāng)信號(hào)“mode”從 1-->0變化時(shí),final_rst_b都會(huì)產(chǎn)生干擾。
4. 解決方案
* 在合成過程中在復(fù)位路徑保留多路復(fù)用結(jié)構(gòu),因?yàn)槎嗦窂?fù)用結(jié)構(gòu)與其他組合邏輯相比易于產(chǎn)生干擾。MUX Pragma可以在編碼RTL時(shí)使用,這將有助于合成工具在復(fù)位路徑中保留任何多路復(fù)用器。
評(píng)論