【導讀】復位信號在數字電路里面的重要性?xún)H次于時(shí)鐘信號。對電路的復位往往是指對觸發(fā)器的復位,也就是說(shuō)電路的復位中的這個(gè)“電路”,往往是指觸發(fā)器,這是需要注意的。
今天我們來(lái)聊聊聊聊復位電路的基礎,本文的主要內容有:
復位電路概述
同步復位電路
異步復位電路
復位策略——復位網(wǎng)絡(luò )
1、復位電路概述
復位信號在數字電路里面的重要性?xún)H次于時(shí)鐘信號。對電路的復位往往是指對觸發(fā)器的復位,也就是說(shuō)電路的復位中的這個(gè)“電路”,往往是指觸發(fā)器,這是需要注意的。
有的電路需要復位信號,就像是有的電路需要時(shí)鐘信號那樣,而有的電路是不需要復位信號的。
復位又分為同步復位和異步復位,這兩種各有優(yōu)缺點(diǎn)。
下面我們主要來(lái)說(shuō)說(shuō)復位信號的用途和不需要復位信號的情況。
(1)復位的目的
復位最基本的目的就是使電路(主要是觸發(fā)器)進(jìn)入一個(gè)能穩定操作的確定狀態(tài)(主要是觸發(fā)器在在某個(gè)確定的狀態(tài)),主要表現為下面兩點(diǎn):
①使電路在復位后從確定的初始狀態(tài)運行:
● 上電的時(shí)候,為了避免上電后進(jìn)入隨機狀態(tài)而使電路紊亂,這個(gè)時(shí)候你就需要上電復位了。
● 有時(shí)候,電路在某個(gè)狀態(tài)下,你想或者別人要求你從電路的初始狀態(tài)開(kāi)始進(jìn)行延時(shí)你的電路功能,這個(gè)時(shí)候你就要對你的電路進(jìn)行復位,讓它從最初的狀態(tài)開(kāi)始運行。
②使電路從錯誤狀態(tài)回到可以控制的確定狀態(tài):
有的時(shí)候,你的電路發(fā)生了異常,比如說(shuō)狀態(tài)機跑飛了、系統供電炸了之類(lèi)的,總之就是電路運行得不正常了,這個(gè)時(shí)候你就要對電路進(jìn)行復位,讓它從錯誤的狀態(tài)回到一個(gè)正常的狀態(tài)。
上面說(shuō)的都是和實(shí)際電路有關(guān)的,下面我們就從電路仿真的角度看一下復位信號的重要性。
● 仿真的要求
復位信號在仿真里面主要是使電路仿真時(shí)具有可知的初始值:
在仿真的時(shí)候,信號在初始狀態(tài)是未知狀態(tài)(也就是所謂的x,不過(guò)對信號初始化之后的這種情況除外,因為仿真的時(shí)候對信號初始化就使信號有了初始值,這就不是x了)。
對于數據通路(數字系統一般分為數據通路和控制通路,數據通路一般是對輸入的數據進(jìn)行處理,控制通路則是對運行的情況進(jìn)行操作),在實(shí)際電路中,只要輸入是有效數據(開(kāi)始的時(shí)候可能不是有效的),輸出后的狀態(tài)也是確定的;在仿真的時(shí)候,也是輸入數據有效了,輸出也就確定了。也就是說(shuō),初始不定態(tài)對數據通路的影響不明顯。
對于控制通路,在實(shí)際電路中,只要控制通路完備(比如說(shuō)控制通路的狀態(tài)機是完備的),即使初始狀態(tài)即使是不定態(tài),在經(jīng)過(guò)一定的循環(huán)后,還是能回到正確的狀態(tài)上;然而在仿真的時(shí)候就不行了,仿真的時(shí)候由于初始狀態(tài)為未知態(tài),控制電路一開(kāi)始就陷入了未知態(tài);仿真跟實(shí)際電路不同,仿真是“串行”的,仿真時(shí)控制信號的初始不定態(tài)會(huì )導致后續的控制信號結果都是不定態(tài),也就是說(shuō),初始的不定態(tài)對控制通道是致命的。
(2)不需要復位信號的一些情況
復位信號很重要,但是并不是每一部分的電路都需要復位電路,一方面是復位電路也消耗邏輯資源、占用芯片面積,另一方面是復位信號會(huì )增加電路設計的復雜性(比如要考慮復位的策略、復位的布局布線(xiàn)等等)。
當某個(gè)電路的輸出在任何時(shí)刻都可以不受到復位信號的控制就有正確的值時(shí),比如說(shuō)數據通路中的對數據進(jìn)行處理的部分。
在某些情況下,當流水線(xiàn)的寄存器(移位寄存觸發(fā)器)在高速應用中時(shí),應該去掉某些寄存器的復位信號以使設計達到更高的性能,因為帶復位的觸發(fā)器比不帶復位的觸發(fā)器更復雜,反應也更慢。
對復位信號/電路有一定的概念后,下面我們就來(lái)說(shuō)說(shuō)復位的方式,也就是同步電路和異步電路以及它們的優(yōu)缺點(diǎn)。
2、同步復位
(1)同步復位電路
同步復位是指復位信號在時(shí)鐘有效沿到來(lái)時(shí)才復位電路(主要是復位觸發(fā)器)。
因此同步復位的復位信號受到時(shí)鐘信號的控制。同步復位的觸發(fā)器RTL代碼和電路如下所示:
上面的電路在FPGA中容易綜合得到;也有可能綜合得到下面這樣的電路:
(2)同步復位的優(yōu)點(diǎn)
①首先同步復位一般能確保電路是100%同步的,因為電路都是由同步時(shí)鐘觸發(fā)。
②同步復位會(huì )綜合為更小的觸發(fā)器(更????感覺(jué)有點(diǎn)不太對,可能FPGA跟ASIC不一樣吧?)。從前面電路中我們也可以看到,復位電路僅僅是由一個(gè)普通的觸發(fā)器和一個(gè)與門(mén)構成。
③由于同步復位僅僅發(fā)生在時(shí)鐘的有效沿,當外部的復位信號有毛刺時(shí),時(shí)鐘可以當做過(guò)濾毛刺的手段,也就是說(shuō)同步復位受到復位信號的毛刺影響小。
④當復位信號是由內部電路產(chǎn)生時(shí),此時(shí)復位信號就有可能有毛刺,時(shí)鐘就可以過(guò)濾毛刺。也就是說(shuō),可以在那些使用內部信號當做復位信號的設計中,使用同步復位。
(3)同步復位的缺點(diǎn)
①使用同步復位可能使綜合工具無(wú)法分辨分辨復位信號和其他控制信號,導致進(jìn)行復位的控制邏輯遠離觸發(fā)器(也就是說(shuō),并不是所以的ASIC庫都有內置的同步復位邏輯,綜合工具可能把符合邏輯綜合到觸發(fā)器自身之外)。
例如對于帶同步復位和加載使能的觸發(fā)器,代碼如下所示:
綜合得到的電路圖如下所示,左邊是理想的電路,右邊是可能綜合出的電路:
這兩個(gè)電路的功能完全一樣,只不過(guò)右邊電路的復位控制邏輯(即復位與門(mén))在多路復用器之外,也就是遠離了觸發(fā)器。
解決方法就是:一方面這個(gè)只是綜合工具的問(wèn)題,一般綜合工具會(huì )自動(dòng)識別在敏感列表里面又在條件表達式信號中的第一個(gè)信號為復位信號;另一方面,可以在RTL代碼編寫(xiě)的時(shí)候,加入相關(guān)的綜合指令,讓綜合的時(shí)候把復位邏輯靠近觸發(fā)器。
②由于同步復位需要在時(shí)鐘沿的觸發(fā)下才能起作用,復位信號是以短脈沖的方式出現時(shí),時(shí)鐘沿就有可能錯失這個(gè)復位信號,導致復位脈沖丟失,同步復位電路沒(méi)有起到作用,時(shí)序圖如下所示:
解決辦法:一方面,可以采用脈沖捕捉電路,這個(gè)電路在我的跨時(shí)鐘域控制信號傳輸中有講到。
另一方面,可以將復位信號進(jìn)行脈沖擴展,維持足夠長(cháng)的時(shí)間,這個(gè)可以通過(guò)一個(gè)小的計數器實(shí)現,如下圖所示:
③同步復位可能有組合邏輯延時(shí),當復位邏輯距離觸發(fā)器比較遠時(shí),這個(gè)時(shí)候就不能把觸發(fā)器當做即時(shí)響應復位信號的觸發(fā)器,而是有一定延時(shí)的觸發(fā)器,這個(gè)時(shí)候就有了復位信號偏移的問(wèn)題,關(guān)于復位信號偏移的描述,我們將在異步復位中進(jìn)行描述。
解決方法:使用內置的同步復位觸發(fā)器;綜合的時(shí)候加入相關(guān)的綜合指令,這個(gè)和①類(lèi)似。
④我們前面說(shuō)過(guò),在由內部組合邏輯的產(chǎn)生復位信號的設計中,推薦使用同步復位。其實(shí)這也是有缺點(diǎn)的,這是因為這樣產(chǎn)生復位信號的組合邏輯一方面在仿真的時(shí)候容易出現x態(tài),另一方面在實(shí)際電路中,這樣的復位信號容易被外部(多個(gè))信號影響。
解決方法:不建議使用內部產(chǎn)生的復位信號;使用異步復位。
⑤門(mén)控時(shí)鐘的同步復位可能無(wú)效:使用門(mén)控時(shí)鐘的時(shí)候,由于復位信號依賴(lài)于時(shí)鐘,在復位信號發(fā)出的時(shí)候,時(shí)鐘可能關(guān)閉了。
這個(gè)時(shí)候就會(huì )導致實(shí)際的電路沒(méi)有被復位,如下圖所示:
解決方法:只能使用異步復位,并在時(shí)鐘恢復前移除異步復位。
⑥總線(xiàn)設計中的同步復位問(wèn)題:
在總線(xiàn)控制中,系統上電復位的時(shí)候,我們要求不同芯片之間的總線(xiàn)工作在合理的狀態(tài)上(比如處于高阻態(tài)或者輸出);然而上電之后,由于系統時(shí)鐘可能仍未正常工作,上電(同步)復位就可能無(wú)效,這個(gè)時(shí)候各個(gè)模塊(芯片)就可能不會(huì )把總線(xiàn)接口設置為特定的狀態(tài),(當多個(gè)模塊同時(shí)輸出數據到總線(xiàn)上時(shí))就可能導致電平?jīng)_突,嚴重的話(huà)會(huì )燒壞接口。
解決辦法:為了防止芯片上電時(shí)內部總線(xiàn)出現競爭,有兩種解決辦法,一種是采用異步上電復位,如下圖所示:
這個(gè)時(shí)候使用了異步復位,使能信號oe輸出0,也就是有了初始的狀態(tài)
另一種方法是使用復位信號能直接撤銷(xiāo)三態(tài)使能的電路,如下所示:
從電路圖中可以看到復位信號一方面控制了復位邏輯,另一方面控制了三態(tài)的使能端;這種技術(shù)簡(jiǎn)化了復位-高阻這個(gè)條路徑的時(shí)序分析。
3、異步復位
(1)異步復位電路
異步復位觸發(fā)器則是在設計觸發(fā)器的時(shí)候加入了一個(gè)復位引腳,也就是說(shuō)復位邏輯集成在觸發(fā)器里面。
(一般情況下)低電平的復位信號到達觸發(fā)器的復位端時(shí),觸發(fā)器進(jìn)入復位狀態(tài),直到復位信號撤離。帶異步復位的觸發(fā)器電路圖和RTL代碼如下所示:
(2)異步復位的優(yōu)點(diǎn)
①使用異步復位的最大好處就是復位路徑上沒(méi)有延時(shí),如上面的圖所示,復位信號一直連接到觸發(fā)器的復位端口,而不是像同步復位那樣需要經(jīng)過(guò)一個(gè)復位控制邏輯(如與門(mén))。這樣子就減少了外界信號的影響。
②與時(shí)鐘沒(méi)有關(guān)系,不管時(shí)鐘上升沿有沒(méi)有到來(lái),只要復位信號一有效,觸發(fā)器就會(huì )復位,也就是基本上做到實(shí)時(shí)性;由于與時(shí)鐘沒(méi)有關(guān)系,因此也可以用在門(mén)控時(shí)鐘里面。
③綜合工具能自動(dòng)推斷出異步復位而不必加入任何綜合指令。
(3)異步復位的缺點(diǎn)
①復位撤離問(wèn)題
在介紹復位撤離問(wèn)題之前,先說(shuō)一下復位恢復時(shí)間和去除時(shí)間。所謂的復位恢復時(shí)間是指撤離一個(gè)復位信號時(shí),復位信號從有效跳變?yōu)闊o(wú)效的時(shí)刻與下一個(gè)有效時(shí)鐘沿之間的這段時(shí)間;去除時(shí)間是指撤離一個(gè)復位信號時(shí),復位信號從有效跳變?yōu)闊o(wú)效的時(shí)刻 與上一個(gè)有效時(shí)鐘沿之間的這段時(shí)間(可以類(lèi)比于觸發(fā)器的建立時(shí)間和保持時(shí)間)。如下圖所示:
上圖中,rst_n1是要求的復位恢復時(shí)間,rst_n2滿(mǎn)足復位恢復時(shí)間,rst_n3復位恢復時(shí)間不足。
上圖中,rst_nA是要求的復位去除時(shí)間,rst_n2滿(mǎn)足復位去除時(shí)間,rst_n3復位去除時(shí)間不足。
從上面的兩個(gè)圖中可以知道,如果你想讓某個(gè)時(shí)鐘沿起作用(也就是采數據),那么你就應該在“恢復時(shí)間”之前讓異步控制信號變無(wú)效;如果你想讓某個(gè)時(shí)鐘沿不起作用(也就是在這個(gè)時(shí)鐘沿依舊復位),那么你就應該在“去除時(shí)間”過(guò)后使控制信號變無(wú)效。
異步復位信號的恢復和去除時(shí)間需要大于一定的時(shí)間,如果你的異步復位信號在這兩種情況之間(撤離),那么就沒(méi)法確定時(shí)鐘沿是否起作用了,即判斷不出是復位還是不復位(不復位即是D觸發(fā)器才輸入端的數據)。
介紹了復位恢復時(shí)間和去除時(shí)間之后,我們就可以看看異步復位信號的問(wèn)題了。由于異步復位信號與系統時(shí)鐘毫無(wú)關(guān)系,復位可以在隨時(shí)施加,也可以隨時(shí)撤離。在施加的時(shí)候復位信號的時(shí)候,不存在任何問(wèn)題,因為這跟復位恢復時(shí)間扯不上關(guān)系。
但是,在撤離復位信號的情況下就有問(wèn)題了,主要有兩個(gè)問(wèn)題:
● 當異步復位信號的撤離時(shí)刻在時(shí)鐘有有效沿附近時(shí),就可能導致恢復時(shí)間或去除時(shí)間不足,即這個(gè)時(shí)候違背了復位恢復時(shí)間或去除時(shí)間,這時(shí)就可能導致觸發(fā)器的輸出端為亞穩態(tài)(注意是可能),如下所示:
但是并不是所有情況都會(huì )產(chǎn)生亞穩態(tài),當復位值和此時(shí)的的輸出相同時(shí),就不會(huì )產(chǎn)生亞穩態(tài),如下圖所示:
這是因為:復位信號翻轉的時(shí)候,如果復位信號判斷是低電平,輸出就復位即一定是低電平;
如果判斷復位信號是高電平,輸出信號就等于對輸入信號的采樣值。圖里面輸入信號就是低電平,不管你是復位還是不復位,輸出一直是低電平,沒(méi)有亞穩態(tài)。
● 復位狀態(tài)不一致的問(wèn)題:
復位信號很時(shí)鐘信號一樣,復位通過(guò)復位網(wǎng)絡(luò )到達各個(gè)觸發(fā)器。一方面,復位網(wǎng)絡(luò )具有非常大的扇出和負載,到達不同的觸發(fā)器存在不同的延時(shí),也就是存在復位偏移,因此撤離異步復位的時(shí)刻也是不一樣的;
另一方面,由于時(shí)鐘網(wǎng)絡(luò )也存在時(shí)鐘偏移。這個(gè)時(shí)候異步復位信號就有可能在不同的觸發(fā)器的不同時(shí)鐘周期內進(jìn)行撤離,也就是說(shuō)異步復位的信號不一致,如下圖所示:
異步復位信號a是異步復位信號源,異步復位信號b、c、d是到達觸發(fā)器的異步信號。
我們可以看到,b信號是在本周期就撤離了復位;c信號則由于復位恢復時(shí)間不滿(mǎn)足,則可能導致觸發(fā)器輸出亞穩態(tài):而d信號則由于延時(shí)太長(cháng)(但是滿(mǎn)足了復位去除時(shí)間),在下一個(gè)周期才撤離復位。
撤離問(wèn)題的解決方法:異步復位的同步釋放
異步復位的同步釋放電路也稱(chēng)為復位同步器,這個(gè)方法是將外部輸入的異步復位信號進(jìn)行處理,產(chǎn)生另外一個(gè)適合用于后面電路的復位信號,這個(gè)處理后的復位信號能夠異步復位電路中的觸發(fā)器,又不會(huì )存在撤離問(wèn)題(因為經(jīng)過(guò)了同步);這個(gè)異步復位同步釋放的處理電路和RTL代碼如下所示:
從圖中可以看到,這是用外部異步復位信號來(lái)復位一對觸發(fā)器,這對觸發(fā)器異步地驅動(dòng)主復位信號,也就是這對觸發(fā)器產(chǎn)生電路需要的復位信號,這些復位信號再到達各個(gè)觸發(fā)器,然后進(jìn)行復位。
理想的異步復位同步釋放的時(shí)序如下所示:
上圖中,在理想的情況下,復位信號在兩級D觸發(fā)器上面的撤離時(shí)間可能不一樣,這個(gè)和復位信號傳輸到的觸發(fā)器位置和觸發(fā)器的時(shí)鐘沿有關(guān)。理想情況下的復位信號傳輸到目標觸發(fā)器都能夠同時(shí)撤離,并且不在時(shí)鐘有效沿附近。
實(shí)際情況一般不是那么理想的,當不是理想的情況下,也就是說(shuō)復位信號到達目標寄存器存在時(shí)鐘偏移,并且復位信號有可能在時(shí)鐘有效沿附近撤離,這個(gè)時(shí)候復位器出現的問(wèn)題就有三種:第一級OK,第二級出現問(wèn)題;第一級出現問(wèn)題,第二級OK;兩級都出現問(wèn)題。
下面我們就來(lái)看看這三種情況下產(chǎn)生的復位信號是什么情況:
第一級的撤離沒(méi)有問(wèn)題,第二級的撤離出現在時(shí)鐘的有效沿附近,也就是說(shuō)第二級的D觸發(fā)器的撤離時(shí)間不滿(mǎn)足復位恢復時(shí)間或者去除時(shí)間,這時(shí)候的時(shí)序圖如下所示:
我們可以看到無(wú)論是觸發(fā)器判斷此刻是復位還是不復位,輸出都是一樣的,也就是說(shuō),輸出rst_n不是亞穩態(tài),而是確定的值。
第一級的撤離出現問(wèn)題,第二級的撤離沒(méi)有問(wèn)題,這時(shí)候的時(shí)序圖如下所示:
我們可以看到,第一級觸發(fā)器雖然產(chǎn)生了亞穩態(tài),但是由于第二級觸發(fā)器的存在,亞穩態(tài)并沒(méi)有傳播下去,得到的復位信號依然是干凈的,只不過(guò)這個(gè)復位信號可能延長(cháng)多一個(gè)周期而已(這是因為亞穩態(tài)穩定后的可能態(tài)引起的)。
最極端的一種情況是,兩級的撤離都不滿(mǎn)足復位恢復時(shí)間或者去除時(shí)間,這時(shí)候的時(shí)序圖如下所示:
我們可以看到第一級觸發(fā)器產(chǎn)生了亞穩態(tài),但是由于第二級觸發(fā)器的存在,亞穩態(tài)沒(méi)有傳播下去;雖然第二級觸發(fā)器的復位信號撤離也在時(shí)鐘有效沿附近,但是跟第一種情況一樣,第二級觸發(fā)器是不會(huì )產(chǎn)生亞穩態(tài)的。因此即使是極端狀態(tài),輸出的復位信號也是干凈的。
由此我們可以看到,異步復位的同步撤離能夠有效地解決撤離導致的復位恢復時(shí)間或者去除時(shí)間不足的問(wèn)題,同時(shí)把復位信號同步化,解決了復位撤離偏移的問(wèn)題。
②異步復位的抖動(dòng)問(wèn)題
當外部輸入的異步復位信號產(chǎn)生毛刺時(shí),任何滿(mǎn)足觸發(fā)器最小復位脈沖寬度的輸入都有可能引起觸發(fā)器復位,這問(wèn)題是源頭上的問(wèn)題,即使是使用上面的同步器,也還是有同樣的敏感問(wèn)題,時(shí)序圖如下所示:
解決方法:一個(gè)是使用同步復位,另一個(gè)就是過(guò)濾毛刺了,過(guò)濾毛刺和消抖的思路有點(diǎn)像,主要就是經(jīng)過(guò)一段延時(shí)之后,在經(jīng)過(guò)邏輯門(mén)判斷產(chǎn)生外部來(lái)的是不是真正復位信號,加上過(guò)濾毛刺信號部分的同步撤離電路和時(shí)序如下所示:
在上圖中,我們可以看到,抖動(dòng)問(wèn)題得到了解決。然而這種方法還是有缺點(diǎn)的,主要就是這個(gè)延時(shí)電路的延時(shí)控制可能隨著(zhù)環(huán)境而變化,而且延時(shí)的時(shí)間要合適長(cháng)才行,絕對不能太短。
③DFT的問(wèn)題
在DFT的時(shí)候,如果異步復位信號不能直接被I/O引腳驅動(dòng),就必須將異步復位線(xiàn)和后面的的被驅動(dòng)電路斷開(kāi),用來(lái)保證DFT掃描和測試能夠正確進(jìn)行??傊惒綇臀辉黾恿薉FT的復雜性。
4、復位策略——復位網(wǎng)絡(luò )
在數字電路里面,復位信號驅動(dòng)了很多觸發(fā)器,僅次于時(shí)鐘,因此復位也往往形成或者使用復位網(wǎng)絡(luò )。
復位網(wǎng)絡(luò )的設計也是有值得斟酌的地方,例如,由于復位的扇出太大,全部的復位不能僅僅由一個(gè)端口驅動(dòng),也就是不能像下面一樣:
既然上面的不行,那就改成下面的唄,也就是使用多各“并聯(lián)”的同步釋放,分擔一下負載壓力:
然而這種方案還是有問(wèn)題的,這是第一級的撤離出現問(wèn)題,第二級的撤離沒(méi)有問(wèn)題的時(shí)候,亞穩態(tài)穩定后的狀態(tài)可能不一樣,導致rst_n的復位不一致,有的復位可能會(huì )快/慢一個(gè)周期。
最后的方案是,先進(jìn)行同步釋放之后,同步后的復位信號又當做各個(gè)部分的異步信號,然后進(jìn)行同步釋放,如下所示:
這樣先經(jīng)過(guò)前級的同步釋放之后,就不存在亞穩態(tài)穩定好導致的輸出rst_n不一致的問(wèn)題了。
最后說(shuō)一下多時(shí)鐘域的復位:在多時(shí)鐘域復位中,外部的異步復位信號的同步釋放應該各自的時(shí)鐘進(jìn)行同步,比如異步FIFO中,寫(xiě)時(shí)鐘域就用寫(xiě)時(shí)鐘進(jìn)行同步釋放;讀時(shí)鐘域就用讀時(shí)鐘進(jìn)行同步釋放。
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問(wèn)題,請電話(huà)或者郵箱editor@52solution.com聯(lián)系小編進(jìn)行侵刪。
推薦閱讀:
如何用VIN max小于系統輸入電壓的簡(jiǎn)易降壓控制器
Vishay蟬聯(lián)BISinfotech頒發(fā)的2021年度BETA獎