0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對(duì)于芯片中的復(fù)位信號(hào)我們通常會(huì)有哪些特殊處理?

jf_GctfwYN7 ? 來(lái)源:芯時(shí)代青年 ? 2023-12-25 09:52 ? 次閱讀

經(jīng)常在面試時(shí)問(wèn)到一個(gè)問(wèn)題:對(duì)于芯片中的復(fù)位信號(hào)我們通常會(huì)有哪些特殊處理?這個(gè)時(shí)候我一般希望得到的回答包括:復(fù)位消抖、異步復(fù)位同步撤離、降頻復(fù)位、關(guān)斷時(shí)鐘復(fù)位和復(fù)位保護(hù)等處理方案。

復(fù)位消抖

這篇文章就先聊下復(fù)位消抖,在開(kāi)始之前先說(shuō)明一下因?yàn)槲业慕?jīng)驗(yàn)有限且很多是道聽(tīng)途說(shuō),所以文中難免有所疏漏和錯(cuò)誤,請(qǐng)大家不吝賜教。

復(fù)位信號(hào)在使用前一般需要進(jìn)行消抖處理,也稱為復(fù)位濾毛刺。復(fù)位的抖動(dòng)可能會(huì)導(dǎo)致芯片產(chǎn)生多次復(fù)位動(dòng)作,給系統(tǒng)帶來(lái)不確定性和誤差。消抖的目的是為了確保復(fù)位信號(hào)的穩(wěn)定性和可靠性,從而保證系統(tǒng)能夠正常工作。通過(guò)消抖,可以消除復(fù)位信號(hào)的抖動(dòng)干擾,保證復(fù)位信號(hào)的可靠性和穩(wěn)定性,避免系統(tǒng)故障和數(shù)據(jù)丟失等問(wèn)題。

舉個(gè)例子,如果要消除30ns以下的復(fù)位抖動(dòng),那么30ns以下的復(fù)位信號(hào)rst_n拉低操作就會(huì)被消抖電路消除,不會(huì)對(duì)電路產(chǎn)生任何的影響,只有30ns以上的復(fù)位拉低操作才能作用于內(nèi)部電路。

所以復(fù)位消抖電路具體長(zhǎng)什么樣子呢?目前我了解的有三種方式,不過(guò)因?yàn)闆](méi)有實(shí)際參與過(guò)CRG模塊的設(shè)計(jì)與流片,所以以下內(nèi)容只做參考。我們假定濾毛刺時(shí)鐘為100M,需要濾除的復(fù)位抖動(dòng)為30ns以下的信號(hào)。

第一種方式通過(guò)濾毛刺時(shí)鐘+D觸發(fā)器來(lái)完成,如要濾過(guò)30ns的抖動(dòng)電路圖如下:

wKgaomVtd2GAA2lnAABoIL9qtec009.jpg

D觸發(fā)器的數(shù)量關(guān)系是如何得到的呢?先假設(shè)我只有一個(gè)延時(shí)D觸發(fā)器,那么復(fù)位信號(hào)必須維持L電平在一個(gè)clk時(shí)鐘周期以上或門(mén)才能在時(shí)鐘沿處打出一個(gè)L信號(hào)出來(lái)(即時(shí)鐘上升沿時(shí)rst_n || rst_n_ff1 == 1'b0),如下面的波形圖所示:

wKgZomVtd2GAJmeuAACdalg0EPY304.jpg

同樣的,如果有兩個(gè)延時(shí)D觸發(fā)器,那么復(fù)位信號(hào)必須維持L電平在兩個(gè)clk時(shí)鐘周期以上,或門(mén)才能在時(shí)鐘沿處打出一個(gè)L信號(hào)出來(lái):

wKgaomVtd2GAVtogAACysChIyXA738.jpg

如果有三個(gè)延時(shí)D觸發(fā)器,那么復(fù)位信號(hào)必須維持L電平在三個(gè)clk時(shí)鐘周期以上,或門(mén)才能在時(shí)鐘沿處打出一個(gè)L信號(hào)出來(lái):

wKgZomVtd2GAcU_1AADGGJY8l6k362.jpg

因此,在或們前放置了N個(gè)延時(shí)D觸發(fā)器,就可以濾除N*T(T為消抖時(shí)鐘的周期)時(shí)長(zhǎng)以下的復(fù)位毛刺信號(hào)。這種方式存在一個(gè)巨大隱患,消抖時(shí)鐘信號(hào)是不受復(fù)位控制的,一旦消抖時(shí)鐘信號(hào)出了什么問(wèn)題,復(fù)位信號(hào)將永遠(yuǎn)無(wú)法從消抖電路傳遞出去。

第二種方式通過(guò)累加器來(lái)完成,簡(jiǎn)單來(lái)說(shuō)就是數(shù)一下rst_n連續(xù)出現(xiàn)了多少拍,假如需要通過(guò)100M消抖時(shí)鐘來(lái)濾除100ns以下的復(fù)位抖動(dòng),那么rst_n要連續(xù)出現(xiàn)10拍低電平才達(dá)到100ns的復(fù)位標(biāo)準(zhǔn)。將rst_n打兩拍rst_n_ff1/rst_n_ff2消除亞穩(wěn)態(tài),當(dāng)rst_n_ff2持續(xù)達(dá)到10拍對(duì)外輸出復(fù)位信號(hào),對(duì)應(yīng)的波形示意如下:

wKgZomVtd2GAOD04AADmjQArDGE867.jpg

這個(gè)消抖方案呢同樣存在上面的問(wèn)題,消抖時(shí)鐘信號(hào)是不受復(fù)位控制的,所以在芯片內(nèi)的模塊級(jí)別可能會(huì)被采用,但是在外部復(fù)位消抖時(shí)是一般不會(huì)使用的。

第三種方式是通過(guò)延時(shí)器件來(lái)實(shí)現(xiàn),要濾去100ns以下毛刺,那么就引入100ns延時(shí)器件,組成如下電路:

wKgZomVtd2GAKp02AABxFn4JL6Q000.jpg

對(duì)應(yīng)的波形也很簡(jiǎn)單:

wKgaomVtd2KAW3WvAACr7fNUwcc331.jpg

通過(guò)波形可以看出,如果復(fù)位時(shí)長(zhǎng)不夠100ns,prst_n根本不會(huì)被觸發(fā)。這個(gè)電路的隱患在于如何保證延時(shí)器件在不同溫度等外部環(huán)境干擾下的延時(shí)準(zhǔn)確性。

異步復(fù)位,同步撤離

對(duì)于使用異步復(fù)位的系統(tǒng),低電平復(fù)位系統(tǒng)時(shí)復(fù)位信號(hào)是允許不與工作時(shí)鐘對(duì)齊的即純純異步復(fù)位;但是在復(fù)位撤離時(shí),需要與工作時(shí)鐘對(duì)齊,即滿足removal time要求(在時(shí)鐘有效沿來(lái)臨之后,異步復(fù)位信號(hào)需要繼續(xù)保持有效的最短時(shí)間),或者說(shuō)復(fù)位的撤離行為是受到時(shí)鐘控制的。

既然都已經(jīng)是異步復(fù)位了,為何還要多此一舉呢?

1.對(duì)于復(fù)位這個(gè)操作行為而言,純異步處理是完全可以的,因?yàn)樗械?a target="_blank">元器件都會(huì)最終回到初始值。當(dāng)然了,這里指的是整體復(fù)位或者說(shuō)帶保護(hù)的局部復(fù)位。你別管這些寄存器誰(shuí)先復(fù)位誰(shuí)后復(fù)位誰(shuí)出現(xiàn)亞穩(wěn)態(tài)了,只要不是著火了最后都會(huì)回到復(fù)位值。就像電視劇里說(shuō)的“反正早晚都是沒(méi),早沒(méi)晚沒(méi)又有什么區(qū)別呢”。所以異步復(fù)位出電路是沒(méi)有任何問(wèn)題的。

2.但是對(duì)于復(fù)位撤銷(xiāo)這個(gè)行為就不一樣了。一旦復(fù)位撤銷(xiāo)了各個(gè)元器件就會(huì)開(kāi)始工作了,但是復(fù)位信號(hào)如果是純異步的打到某個(gè)寄存器接口上的時(shí)候可能就撞到亞穩(wěn)態(tài)窗口上了(不滿足removal time),亞穩(wěn)態(tài)就會(huì)在電路里開(kāi)始蔓延搗亂,出現(xiàn)什么情況可就難說(shuō)了。所以復(fù)位撤離這個(gè)事必須得是受到時(shí)鐘控制的,不能是純異步電路。

這里有一點(diǎn)要注意哈,同步撤離這個(gè)操作解決的是異步復(fù)位可能的亞穩(wěn)態(tài)問(wèn)題,并不是說(shuō)能夠保證所有的寄存器在同一時(shí)間收到復(fù)位撤離的操作。這個(gè)事就類(lèi)似與信號(hào)打3拍同步一樣,咱們先解決亞穩(wěn)態(tài)問(wèn)題,再處理信號(hào)傳的對(duì)不對(duì)的問(wèn)題。通過(guò)異步復(fù)位同步撤離先確保沒(méi)有亞穩(wěn)態(tài),再處理寄存器不能在同一拍接收到復(fù)位撤銷(xiāo)導(dǎo)致錯(cuò)誤的問(wèn)題。

如何做到異步復(fù)位同步撤離呢?請(qǐng)看下面這個(gè)電路:

wKgZomVtaiqAPNP2AAB7UqNQjSc577.jpg

rst_n經(jīng)過(guò)濾波后得到prst_n,因此我們只需要分析prst_n的行為影響即可。

正常工作狀態(tài)下,prst_n==1;

異步復(fù)位時(shí)prst_n由1跳轉(zhuǎn)為0,兩個(gè)D觸發(fā)器立刻被復(fù)位。也就是說(shuō)rst_work_n會(huì)立即下拉至低電平復(fù)位系統(tǒng),這個(gè)下拉顯然時(shí)候不受時(shí)鐘控制的,因此實(shí)現(xiàn)了異步復(fù)位;

復(fù)位撤離時(shí)prst_n由0跳轉(zhuǎn)為1,兩個(gè)D觸發(fā)器的復(fù)位被撤銷(xiāo)了開(kāi)始正常工作。但是高電平需要兩個(gè)周期才會(huì)到達(dá)rst_work_n端,這兩個(gè)周期足以消除復(fù)位帶來(lái)的亞穩(wěn)態(tài)并且保證系統(tǒng)感知的復(fù)位rst_work_n在時(shí)鐘沿上,因此實(shí)現(xiàn)了同步撤銷(xiāo);

借助于這個(gè)電路設(shè)計(jì),系統(tǒng)的異步復(fù)位同步撤離功能就實(shí)現(xiàn)了。不過(guò)當(dāng)年我還問(wèn)了大佬一個(gè)問(wèn)題:這樣的話系統(tǒng)就延時(shí)了2個(gè)周期才復(fù)位的啊,會(huì)不會(huì)有bug?

大佬的回答是這樣的:你這啥系統(tǒng)啊真的在乎這一兩個(gè)周期的事么?早跑幾周期晚跑幾周期有啥關(guān)系,只要?jiǎng)e跑錯(cuò)了就行!

解復(fù)位的特殊處理

解復(fù)位就是復(fù)位撤離,系統(tǒng)解復(fù)位就是復(fù)位結(jié)束了系統(tǒng)準(zhǔn)備開(kāi)始工作。

前文咱們提過(guò),復(fù)位撤離比復(fù)位要復(fù)雜一些,因?yàn)閺?fù)位了大家就是一起回到初始狀態(tài)去,寄存器也不采樣了,有什么毛刺啊亞穩(wěn)態(tài)啊只要不影響其他系統(tǒng)(這個(gè)之后講)都沒(méi)關(guān)系的。這就相當(dāng)于晚上回家上床準(zhǔn)備上床睡覺(jué),你愛(ài)穿啥衣服睡就穿啥衣服不穿也沒(méi)人管。但是解復(fù)位就不一樣了,這就是起床要出門(mén)上班了,怎么著也得準(zhǔn)備好才能出去工作,不能穿著秋褲就往外跑。

所以的對(duì)于解復(fù)位(其實(shí)也不光是解復(fù)位,局部復(fù)位本身也很危險(xiǎn))就需要做跟多的額外工作了,上一篇說(shuō)的同步撤離之后,還有什么問(wèn)題需要解決呢?

主要是復(fù)位信號(hào)到達(dá)各個(gè)寄存器的時(shí)間不一致的問(wèn)題。復(fù)位信號(hào)在系統(tǒng)內(nèi)是有很大的扇出的,連接到所有需要復(fù)位的寄存器的復(fù)位端。這也就導(dǎo)致了復(fù)位在系統(tǒng)中的走線特別長(zhǎng),過(guò)長(zhǎng)的走線又會(huì)導(dǎo)致工具在復(fù)位信號(hào)上增加buffer以提升驅(qū)動(dòng)能力,那么如果時(shí)鐘頻率很高,復(fù)位信號(hào)最終到達(dá)各個(gè)寄存器的時(shí)間也就無(wú)法保證在同一拍。

wKgZomVtfsCASnY0AACP4Q9M9Sc025.jpg

復(fù)位走線到達(dá)各個(gè)寄存器不在同一拍會(huì)有什么后果呢?這個(gè)不能一概而論。對(duì)于一些復(fù)位解除后就開(kāi)始工作的電路系統(tǒng)比如自動(dòng)計(jì)數(shù)取指模塊,各個(gè)寄存器之間可能存在依賴關(guān)系,如果只部分寄存器被復(fù)位或解復(fù)位,可能會(huì)導(dǎo)致不一致的狀態(tài),從而影響系統(tǒng)的正確運(yùn)行。同時(shí)呢,如果復(fù)位方案做的不好,某系統(tǒng)進(jìn)行復(fù)位時(shí)一部分復(fù)位了一部分沒(méi)有復(fù)位,也可能會(huì)產(chǎn)生毛刺被未復(fù)位的寄存器采樣,進(jìn)而輸出使能影響到其他系統(tǒng)的正常工作。

總之呢,復(fù)位走線到各個(gè)寄存器不在同一拍,可能存在系統(tǒng)穩(wěn)定性的風(fēng)險(xiǎn)。因此在對(duì)復(fù)位還需要對(duì)系統(tǒng)的復(fù)位做一些特殊的處理。特殊的處理有哪些呢,不同的團(tuán)隊(duì)也有多種多樣的選擇,這里列舉一些我所聽(tīng)聞過(guò)的方案吧。

降頻后復(fù)位。

先把時(shí)鐘降頻,再進(jìn)行復(fù)位和解復(fù)位的操作,再提頻回正常工作時(shí)鐘頻率。你不是怕復(fù)位走線到各個(gè)寄存器的時(shí)間不一致導(dǎo)致不在同一拍復(fù)位嗎?那好,我把時(shí)鐘降頻總可以吧,1GHz太快了降到500M,500M還快降到100M,100M還快到10M總可以了吧,一個(gè)周期這么長(zhǎng)時(shí)間足夠你復(fù)位信號(hào)慢慢溜達(dá)到各個(gè)寄存器的。所以采用這種方案時(shí),會(huì)在復(fù)位前將工作時(shí)鐘32分頻或者64分頻(取決于系統(tǒng)的面積和工作時(shí)鐘,可以算的),然后進(jìn)行復(fù)位和解復(fù)位,之后在將時(shí)鐘提頻至工作狀態(tài)。

這種方案下,可以在sdc中將復(fù)位信號(hào)設(shè)置為multicycle,檢查其在64個(gè)時(shí)鐘周期內(nèi)能夠作用到所有的寄存器復(fù)位端。

**關(guān)時(shí)鐘后復(fù)位。**

這個(gè)方法更徹底,怕各個(gè)寄存器看到復(fù)位和解復(fù)位的時(shí)間不一致導(dǎo)致功能錯(cuò)亂?那直接把工作時(shí)鐘給關(guān)斷不久好了,反正是異步復(fù)位不用擔(dān)心沒(méi)有時(shí)鐘復(fù)位信號(hào)作用不到寄存器端。時(shí)鐘一關(guān)所有寄存器相當(dāng)于原地停工,這個(gè)時(shí)候別說(shuō)復(fù)位信號(hào)了,啥信號(hào)過(guò)來(lái)都沒(méi)事,寄存器都不干了嘛。所以此時(shí)復(fù)位信號(hào)的走線也就不稱問(wèn)題了,先復(fù)位再慢慢悠悠的解復(fù)位,都搞定了歇一會(huì)再把時(shí)鐘打開(kāi)。

這種方案下,可以在sdc中將復(fù)位信號(hào)設(shè)置為false_path,畢竟相當(dāng)于準(zhǔn)靜態(tài)的信號(hào),工作時(shí)復(fù)位信號(hào)不會(huì)跳變。

復(fù)位保護(hù)。

這個(gè)方法的思路是,不是擔(dān)心我這塊的復(fù)位影響其他系統(tǒng)工作嘛,那么不去處理復(fù)位和時(shí)鐘,而是把系統(tǒng)裹起來(lái)。怎么裹起來(lái)呢,把所有的對(duì)外輸出使能啊、握手啊這類(lèi)信號(hào)都先和低電平與在一起,保證不管一會(huì)發(fā)生啥事,都不會(huì)有關(guān)鍵信號(hào)發(fā)生跳變。保護(hù)好之后,再去拉復(fù)位信號(hào),過(guò)一會(huì)再解復(fù)位,再等會(huì)時(shí)間等系統(tǒng)穩(wěn)定下來(lái)了,再把保護(hù)電路解除開(kāi)始正常工作。

這種方案下,也可以在sdc中將復(fù)位信號(hào)設(shè)置為false_path。

復(fù)位之后等待一定時(shí)間再開(kāi)始下任務(wù)。

這個(gè)方案更多的是在任務(wù)層面看,也就是說(shuō)面對(duì)解復(fù)位后可能存在的系統(tǒng)不穩(wěn)定性,先不要著急下任務(wù)下配置下指令,而是等待一定時(shí)間等系統(tǒng)中可能存在的不穩(wěn)定狀態(tài)都結(jié)束了,再開(kāi)始進(jìn)入工作模式去下任務(wù)。

當(dāng)然了不是說(shuō)所有系統(tǒng)都適用以上的方法,比如某個(gè)系統(tǒng)確實(shí)是解復(fù)位后就立即開(kāi)始工作,那用復(fù)位保護(hù)就沒(méi)效果,因?yàn)槟銉?nèi)部狀態(tài)都亂了保護(hù)其他系統(tǒng)還有啥用呢。所以說(shuō)還是具體問(wèn)題具體分析吧,以上也只是經(jīng)驗(yàn)之談難免有所疏漏。

典型的軟復(fù)位流程

在聊到復(fù)位的時(shí)候總會(huì)區(qū)分兩個(gè)概念:硬復(fù)位和軟復(fù)位。

硬復(fù)位就是通常所說(shuō)的復(fù)位,是通過(guò)硬件電路或者特殊的硬件信號(hào)來(lái)觸發(fā)的復(fù)位過(guò)程。當(dāng)拉低外部復(fù)位信號(hào)時(shí)硬復(fù)位被觸發(fā),復(fù)位線會(huì)直接影響系統(tǒng)的硬件電路與寄存器,將系統(tǒng)的內(nèi)部狀態(tài)恢復(fù)到一個(gè)已知的初始狀態(tài)。硬復(fù)位通常是由外部的控制電路或者特定的硬件引腳來(lái)觸發(fā),例如按下一個(gè)復(fù)位按鈕或者通過(guò)特定的電路邏輯條件。

軟復(fù)位是通過(guò)軟件的程序代碼或者寄存器配置等方式觸發(fā)的復(fù)位過(guò)程。當(dāng)軟復(fù)位被觸發(fā)時(shí),系統(tǒng)一般需要執(zhí)行特定的步驟來(lái)響應(yīng)軟復(fù)位需求,確認(rèn)進(jìn)入待復(fù)位狀態(tài)后才會(huì)進(jìn)入復(fù)位流程,將系統(tǒng)的內(nèi)部狀態(tài)恢復(fù)到一個(gè)已知的初始狀態(tài)。軟復(fù)位通常是在程序執(zhí)行中的某個(gè)特定條件下發(fā)生,例如檢測(cè)到一個(gè)錯(cuò)誤或者需要重新初始化系統(tǒng)時(shí)。

硬復(fù)位一般是整芯片甚至芯片組復(fù)位,這個(gè)過(guò)程可以說(shuō)是比較簡(jiǎn)單粗暴的。而軟復(fù)位一般是芯片的部分系統(tǒng)進(jìn)行復(fù)位重啟,有時(shí)也稱為快速?gòu)?fù)位、動(dòng)態(tài)復(fù)位、配置復(fù)位,大多是通過(guò)一系列的流程來(lái)完成的。

本篇中就聊一聊典型的系統(tǒng)軟復(fù)位流程。

1.觸發(fā)軟復(fù)位啟動(dòng)條件。這一般是系統(tǒng)內(nèi)部或SOC出現(xiàn)了致命的錯(cuò)誤比如任務(wù)執(zhí)行超時(shí)、總線數(shù)據(jù)錯(cuò)誤或安全機(jī)制報(bào)錯(cuò)等,上位的MCU或者CPU判斷需要對(duì)該系統(tǒng)進(jìn)行軟復(fù)位操作以恢復(fù)功能;

2.停止下發(fā)任務(wù)。判斷需要對(duì)系統(tǒng)軟復(fù)位后,應(yīng)當(dāng)從任務(wù)層停止下發(fā)新的任務(wù),避免系統(tǒng)錯(cuò)誤進(jìn)一步的蔓延影響其他進(jìn)程;

3.下達(dá)軟復(fù)位請(qǐng)求。請(qǐng)求可能通過(guò)配置系統(tǒng)的寄存器或者從控制接口下發(fā)使能信號(hào);

4.系統(tǒng)接收到軟復(fù)位的請(qǐng)求后,需要做出一系列的處理。這時(shí)一般有兩種方向選擇,一種是主動(dòng)停止工作,比如停止執(zhí)行接下來(lái)的取指、在指令或者卷積層邊界停止進(jìn)一步的計(jì)算;另一種是被動(dòng)停止工作,也就是內(nèi)部邏輯不停止工作,而通過(guò)系統(tǒng)邊界的模塊響應(yīng)軟復(fù)位,進(jìn)而對(duì)內(nèi)部通路進(jìn)行阻塞或者假握手假接收等行為使內(nèi)部被動(dòng)停止工作。

5.系統(tǒng)邊界的模塊監(jiān)聽(tīng)所有通路,等待所有已經(jīng)發(fā)出的請(qǐng)求全部收回應(yīng)答(典型的比如AW請(qǐng)求收回Bresp,AR請(qǐng)求收回Rdata),這樣做的目的是避免本系統(tǒng)的復(fù)位對(duì)SOC或其他系統(tǒng)產(chǎn)生影響,也避免對(duì)解除復(fù)位后的本系統(tǒng)產(chǎn)生影響(如未收全,本系統(tǒng)復(fù)位解除后總線返回了一筆復(fù)位前的Bresp,那本系統(tǒng)直接就亂了);

6.邊界的模塊收全所有應(yīng)有的返回信息后,或者未能收全但是到達(dá)超時(shí)閾值后,系統(tǒng)進(jìn)入待復(fù)位狀態(tài);

7.此時(shí)如果本系統(tǒng)仍然保留著訪問(wèn)DDR和sram的備份通路,那么上位機(jī)可以通過(guò)配置寄存器去間接訪問(wèn)內(nèi)存和寄存器進(jìn)行保留現(xiàn)場(chǎng)。如果沒(méi)有規(guī)劃該功能,則略過(guò)這一步驟;

8.上位機(jī)配置復(fù)位保護(hù)寄存器使能復(fù)位保護(hù)電路,避免系統(tǒng)復(fù)位過(guò)程中有毛刺或者使能信號(hào)擴(kuò)散到總線或其他系統(tǒng);

9.上位機(jī)配置對(duì)系統(tǒng)進(jìn)行時(shí)鐘降配或者關(guān)斷時(shí)鐘等操作,這個(gè)是可選操作,一般來(lái)說(shuō)如果復(fù)位保護(hù)做的比較嚴(yán)格,這里不對(duì)時(shí)鐘進(jìn)行處理也沒(méi)關(guān)系;

10.配置復(fù)位或拉低系統(tǒng)的復(fù)位信號(hào),持續(xù)一段時(shí)間,這個(gè)時(shí)間沒(méi)有太嚴(yán)格的要求,按毫秒計(jì)時(shí)也沒(méi)有關(guān)系,少的話也得幾十拍確保系統(tǒng)內(nèi)所有寄存器都完成了復(fù)位;

11.復(fù)位已經(jīng)完成,之后配置解復(fù)位或拉高系統(tǒng)的復(fù)位信號(hào),解除系統(tǒng)的復(fù)位狀態(tài),之后等待一段時(shí)間等內(nèi)部電路穩(wěn)定下來(lái);

12.配置時(shí)鐘恢復(fù)工作頻率或恢復(fù)時(shí)鐘,可選;

13.配置復(fù)位保護(hù)寄存器解除復(fù)位保護(hù),恢復(fù)總線連接;

14.可以再等待一段時(shí)間后,重新下任務(wù)或恢復(fù)現(xiàn)場(chǎng),重啟系統(tǒng)完成。

軟復(fù)位的流程沒(méi)有特別嚴(yán)格的規(guī)定,通常是根據(jù)芯片的需求而規(guī)劃,上面所述也只是經(jīng)驗(yàn)之談。不過(guò)大抵都遵循停任務(wù) - 收應(yīng)答 - 斷連接 - 復(fù)位 - 解復(fù)位 - 重連接 - 下任務(wù)的思路。

復(fù)位保護(hù)電路

前面提到了,在一些系統(tǒng)中會(huì)通過(guò)復(fù)位保護(hù)的方式來(lái)避免復(fù)位過(guò)程中的“亂象”,所以本章就針對(duì)復(fù)位保護(hù)多聊一下。

復(fù)位保護(hù)電路,是在系統(tǒng)進(jìn)行復(fù)位的過(guò)程中對(duì)接口進(jìn)行硬性邏輯保護(hù),避免毛刺和錯(cuò)誤對(duì)周?chē)到y(tǒng)產(chǎn)生影響的模塊。通常而言,復(fù)位保護(hù)電路的開(kāi)啟應(yīng)該在復(fù)位之前,關(guān)閉應(yīng)該在復(fù)位撤離之后。咱們針對(duì)握手接口來(lái)分類(lèi)看下如何進(jìn)行復(fù)位保護(hù)(使能接口也類(lèi)似)。

對(duì)外輸出valid。

在復(fù)位期間由于復(fù)位信號(hào)到達(dá)不同寄存器的時(shí)間不同,加之組合邏輯路徑,可能會(huì)產(chǎn)生錯(cuò)誤的valid信號(hào)對(duì)外輸出。顯然在本系統(tǒng)單獨(dú)復(fù)位的場(chǎng)景下,是不應(yīng)該有對(duì)外的valid輸出的,因此在復(fù)位前,需要將對(duì)外輸出的valid信號(hào)&&0操作,確保復(fù)位和解復(fù)位期間沒(méi)有valid誤觸發(fā)。

wKgaomVtaCKAEOwUAAAr7OABUfw200.jpg

對(duì)內(nèi)輸入的ready。

進(jìn)入復(fù)位的階段,對(duì)內(nèi)輸入的ready是可以不做處理的,因?yàn)榧词箯?fù)位時(shí)出現(xiàn)了對(duì)外valid的誤觸發(fā),系統(tǒng)也馬上就會(huì)進(jìn)入復(fù)位狀態(tài)了不會(huì)有任何影響。在解復(fù)位階段,如果流程內(nèi)能夠通過(guò)時(shí)鐘關(guān)斷或時(shí)鐘降頻等手段來(lái)保證系統(tǒng)內(nèi)的寄存器同一拍解復(fù)位,在內(nèi)部不產(chǎn)生valid誤觸,對(duì)內(nèi)輸入的ready可以不經(jīng)過(guò)邏輯處理。

wKgZomVtaCKATpMsAAArxk-5BQo577.jpg

如果沒(méi)有其他的手段保護(hù),可以考慮對(duì)內(nèi)的in_ready = out_ready || 1來(lái)保證在復(fù)位撤離階段將誤觸發(fā)的valid通過(guò)假握手丟棄掉。

對(duì)外輸出的ready。

系統(tǒng)復(fù)位期間,從業(yè)務(wù)需求上其他系統(tǒng)理應(yīng)不對(duì)該系統(tǒng)有事務(wù)操作。如果真的出現(xiàn)了極端異常場(chǎng)景,那么比較合理的情況是對(duì)外輸出的ready保證為1,將事務(wù)丟棄,不阻塞其他系統(tǒng),如果為帶rsp的事務(wù)那就等待其他系統(tǒng)的超時(shí)中斷。

wKgaomVtaCKAXT3_AAAqVpIO49c913.jpg

對(duì)內(nèi)輸入的valid。

在復(fù)位和復(fù)位期間,一般而言輸入的valid是無(wú)需理會(huì)的。解復(fù)位時(shí)最好也是通過(guò)其他手段保證不出現(xiàn)內(nèi)部的ready誤觸,且當(dāng)本系統(tǒng)單獨(dú)復(fù)位期間其他系統(tǒng)理應(yīng)不存在請(qǐng)求到來(lái),因此對(duì)內(nèi)輸入的valid也是不需要經(jīng)過(guò)特殊處理的。

wKgZomVtaCKAL9VKAAApK5x572M756.jpg

如果沒(méi)有其他的手段保護(hù),可以考慮對(duì)內(nèi)的in_valid = out_valid && 0,避免內(nèi)部誤觸發(fā)的ready同in_valid進(jìn)行了握手。

復(fù)位保護(hù)電路。

通常而言,復(fù)位保護(hù)的使能信號(hào)從寄存器輸出,作用于RTL,那么同樣存在一個(gè)異步路徑的問(wèn)題。因?yàn)槭鼓軓?fù)位保護(hù)和撤銷(xiāo)復(fù)位保護(hù)時(shí),RTL是沒(méi)有處于工作狀態(tài)的,且內(nèi)部電路處于穩(wěn)態(tài)。沒(méi)有工作處于穩(wěn)態(tài)時(shí),對(duì)外的valid必然為0,ready必然為1(如果不滿足這個(gè)條件,請(qǐng)單獨(dú)討論)。

對(duì)外out_valid = 0 && (~prot_en),此時(shí)prot_en由1跳變?yōu)?(或0跳變位1),輸出邏輯不會(huì)改變,也不存在亞穩(wěn)態(tài)采樣的問(wèn)題;對(duì)外輸出的out_ready = 1 || (prot_en),此時(shí)prot_en由1跳變?yōu)?(或0跳變位1),輸出邏輯不會(huì)改變,同樣不存在亞穩(wěn)態(tài)采樣的問(wèn)題。因此個(gè)人認(rèn)為,由寄存器輸出的prot_en作用于內(nèi)部邏輯時(shí),無(wú)需經(jīng)過(guò)跨異步處理。

配置復(fù)位

本篇仍舊基于工作經(jīng)驗(yàn),難免有疏漏和錯(cuò)誤。在前文聊過(guò)了軟復(fù)位和硬復(fù)位之后,最后一篇來(lái)說(shuō)說(shuō)另外一種我遇到的系統(tǒng)復(fù)位方案 —— 配置復(fù)位,很多情況下我更愿意把配置復(fù)位稱作快速?gòu)?fù)位。粗略的一算復(fù)位情況還挺多,硬復(fù)位、軟復(fù)位、配置復(fù)位、快速?gòu)?fù)位、動(dòng)態(tài)復(fù)位等。

一款芯片的復(fù)位會(huì)分很多級(jí),很大部分的小系統(tǒng)比如加速器這種的都已經(jīng)接在三級(jí)或者四級(jí)復(fù)位總線了,看到的硬復(fù)位已經(jīng)和很多軟復(fù)位&&在了一起,看到的軟復(fù)位也可以簡(jiǎn)單理解為更上層的“配置復(fù)位”。當(dāng)然我們不在細(xì)節(jié)上做太深的探究,畫(huà)個(gè)圖簡(jiǎn)單里表示下好了。

wKgZomWI4PGAEYfmAACmfsOuCPc558.jpg

配置復(fù)位和其他復(fù)位的區(qū)別主要在哪里呢?最大的一個(gè)區(qū)別是,系統(tǒng)的配置復(fù)位不會(huì)復(fù)位寄存器單元。想想看就很清晰,配置復(fù)位必然是通過(guò)配置寄存器單元來(lái)完成的,你要用人家就不能給人家復(fù)位了對(duì)吧。熟悉的配置復(fù)位流程和軟復(fù)位流程很接近:

1.觸發(fā)配置復(fù)位啟動(dòng)條件。如系統(tǒng)內(nèi)部出現(xiàn)了致命的錯(cuò)誤、任務(wù)執(zhí)行超時(shí)、安全機(jī)制報(bào)錯(cuò)等;

2.停止下發(fā)任務(wù)。從任務(wù)層停止下發(fā)新的任務(wù),避免系統(tǒng)錯(cuò)誤進(jìn)一步的蔓延影響其他進(jìn)程;

3.通過(guò)配置總線下發(fā)達(dá)配置復(fù)位請(qǐng)求;

4.系統(tǒng)接收到配置復(fù)位的請(qǐng)求后,停下處理的工作;

5.系統(tǒng)邊界的模塊監(jiān)聽(tīng)所有通路,等待所有已經(jīng)發(fā)出的請(qǐng)求全部收回應(yīng)答;

6.邊界的模塊收全所有應(yīng)有的返回信息后,或者未能收全但是到達(dá)超時(shí)閾值后,系統(tǒng)進(jìn)入待復(fù)位狀態(tài);

7.此時(shí)如果本系統(tǒng)仍然保留著訪問(wèn)DDR和sram的備份通路,那么上位機(jī)可以通過(guò)配置寄存器去間接訪問(wèn)內(nèi)存和寄存器進(jìn)行保留現(xiàn)場(chǎng)。如果沒(méi)有規(guī)劃該功能,則略過(guò)這一步驟;

8.上位機(jī)配置復(fù)位保護(hù)寄存器使能復(fù)位保護(hù)電路,避免系統(tǒng)復(fù)位過(guò)程中有毛刺或者使能信號(hào)擴(kuò)散到總線或其他系統(tǒng);

9.通過(guò)系統(tǒng)總線配置時(shí)鐘降頻寄存器或關(guān)斷核時(shí)鐘寄存器;

10.通過(guò)系統(tǒng)總線配置復(fù)位寄存器,持續(xù)一段時(shí)間確保系統(tǒng)內(nèi)所有寄存器都完成了復(fù)位;

11.復(fù)位完成后配置復(fù)位寄存器解除復(fù)位,之后等待一段時(shí)間;

12.配置時(shí)鐘恢復(fù)工作頻率或恢復(fù)時(shí)鐘;

13.配置復(fù)位保護(hù)寄存器解除復(fù)位保護(hù),恢復(fù)總線連接;

14.重新下任務(wù)或恢復(fù)現(xiàn)場(chǎng),重啟系統(tǒng)完成。

流程這么相似的情況下,配置復(fù)位和軟復(fù)位最大的區(qū)別在哪里呢?我個(gè)人的經(jīng)驗(yàn)是,配置復(fù)位不會(huì)將寄存器復(fù)位那么所有的配置都得以保留,復(fù)位完成后可以不重新下配置的情況下快速的重啟任務(wù),所以我更喜歡將配置復(fù)位稱為快速?gòu)?fù)位。當(dāng)然,這個(gè)區(qū)別并不固定,軟復(fù)位也可以只復(fù)位核部分不復(fù)位寄存器部分,連接合理使用得當(dāng)?shù)那闆r下都是允許的。

之前面對(duì)的最復(fù)雜的系統(tǒng)復(fù)位場(chǎng)景基本就是下面這樣了:

wKgaomWI4PGAeUe6AACADtZzUOo980.jpg

因?yàn)闅v史遺留和甩鍋等一些原因吧,我交付的系統(tǒng)中有一部分應(yīng)該歸屬于NOC系統(tǒng)的總線模塊。這部分總線模塊的引入帶來(lái)了一個(gè)尷尬的問(wèn)題,軟復(fù)位時(shí)候不能將這部分進(jìn)行復(fù)位,否則NOC就掛了!所以最后的系統(tǒng)的復(fù)位域分了三個(gè)層級(jí):硬復(fù)位——復(fù)位全系統(tǒng),軟復(fù)位——復(fù)位core和reg,配置復(fù)位——只復(fù)位core,保留配置。光復(fù)位方案就要分三套,真是不想回首的痛苦經(jīng)歷啊。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119816
  • D觸發(fā)器
    +關(guān)注

    關(guān)注

    3

    文章

    164

    瀏覽量

    47828
  • SDC
    SDC
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    15518
  • CLK
    CLK
    +關(guān)注

    關(guān)注

    0

    文章

    127

    瀏覽量

    17104
  • 累加器
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    9436

原文標(biāo)題:【芯片設(shè)計(jì)筆記】復(fù)位那些小事(建議收藏)

文章出處:【微信號(hào):IC修真院,微信公眾號(hào):IC修真院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Xilinx FPGA的復(fù)位信號(hào)處理

    作者:NingHeChuan Get Smart About Reset: Think Local, Not Global。 對(duì)于復(fù)位信號(hào)處理,為了方便
    的頭像 發(fā)表于 12-25 12:08 ?2558次閱讀
    基于Xilinx FPGA的<b class='flag-5'>復(fù)位</b><b class='flag-5'>信號(hào)</b><b class='flag-5'>處理</b>

    為什么AD630實(shí)現(xiàn)精密相位比較的功能時(shí),輸入兩個(gè)相位差為90度的兩個(gè)信號(hào)經(jīng)過(guò)低通濾波器得到直流信號(hào)通常會(huì)偏移?

    請(qǐng)問(wèn)為什么AD630芯片實(shí)現(xiàn)精密相位比較的功能時(shí)候,輸入兩個(gè)相位差為90度的兩個(gè)信號(hào)經(jīng)過(guò)低通濾波器得到直流信號(hào)通常會(huì)偏移,往往得不到零。調(diào)整相位差比如94度或者86度才可以得到基本為零
    發(fā)表于 06-04 14:15

    FPGA實(shí)戰(zhàn)演練邏輯篇12:復(fù)位電路

    保證器件內(nèi)部邏輯快速進(jìn)入正常的工作狀態(tài)。因此,F(xiàn)PGA器件外部通常會(huì)引入一個(gè)用于內(nèi)部復(fù)位的輸入信號(hào),這個(gè)信號(hào)稱之為復(fù)位
    發(fā)表于 04-10 13:59

    感應(yīng)加熱電源通常會(huì)用哪些頻率跟蹤技術(shù)?

    始終能夠工作在功率因數(shù)接近或等于1的準(zhǔn)諧振或諧振狀態(tài),以實(shí)現(xiàn)逆變器的零電流或零電壓開(kāi)關(guān),其頻率跟蹤電路是必不可少的。 通常情況下,想要實(shí)現(xiàn)對(duì)高頻感應(yīng)加熱系統(tǒng)的頻率跟蹤,工程師通常會(huì)使用鎖相環(huán)電路來(lái)實(shí)現(xiàn)
    發(fā)表于 10-30 08:57

    例說(shuō)FPGA連載12:狀態(tài)初始——復(fù)位電路

    狀態(tài),以保證器件內(nèi)部邏輯快速進(jìn)入正常的工作狀態(tài)。因此,F(xiàn)PGA器件外部通常會(huì)引入一個(gè)用于內(nèi)部復(fù)位的輸入信號(hào),這個(gè)信號(hào)稱之為復(fù)位
    發(fā)表于 07-25 15:19

    請(qǐng)問(wèn)反激寬電壓輸入時(shí),為什么通常會(huì)設(shè)計(jì)成低壓連續(xù)模式,高壓不連續(xù)模式

    反激寬電壓輸入時(shí),為什么通常會(huì)設(shè)計(jì)成低壓連續(xù)模式,高壓不連續(xù)模式
    發(fā)表于 10-22 11:46

    FPGA復(fù)位電路的設(shè)計(jì)

    保證器件內(nèi)部邏輯快速進(jìn)入正常的工作狀態(tài)。因此,F(xiàn)PGA器件外部通常會(huì)引入一個(gè)用于內(nèi)部復(fù)位的輸入信號(hào),這個(gè)信號(hào)稱之為復(fù)位
    發(fā)表于 04-12 06:35

    開(kāi)關(guān)電源內(nèi)部的損耗有哪些?通常會(huì)在什么情況下出現(xiàn)?

    要提高開(kāi)關(guān)電源的效率,就必須分辨和粗略估算各種損耗。開(kāi)關(guān)電源內(nèi)部的損耗大致可分為四個(gè)方面:開(kāi)關(guān)損耗、導(dǎo)通損耗、附加損耗和電阻損耗。這些損耗通常會(huì)在有損元器件中同時(shí)出現(xiàn)。
    發(fā)表于 03-11 06:04

    stm32開(kāi)發(fā)工具通常會(huì)使用到的軟件

    stm32 開(kāi)發(fā)工具通常會(huì)使用到的軟件,工具。工具的熟練掌握還是很有必要的,不僅能解決很多的問(wèn)題,還能極大的提升我們的工作效率,要知道我把多余時(shí)間拿來(lái)摸魚(yú)多好哇
    發(fā)表于 08-06 07:17

    兩級(jí)DFF同步器跨時(shí)鐘域處理簡(jiǎn)析

    下。比如SOC芯片中的CPU通常會(huì)工作在一個(gè)頻率上,總線信號(hào)(比如DRAM BUS)會(huì)工作在另一個(gè)時(shí)鐘頻率下,而普通的信號(hào)又會(huì)工作在另外的時(shí)鐘頻率下。這3個(gè)不同時(shí)鐘頻率下工作的
    發(fā)表于 02-17 06:34

    針對(duì)鋼坯鍛件的缺陷通常會(huì)采用哪些措施

    加熱后表面形成的氧化皮。坯料或鍛件表面會(huì)因氧化皮造成裂紋、折疊、劃傷、夾雜、凹凸不平等現(xiàn)象。這項(xiàng)缺陷如果不及時(shí)清除,將會(huì)給后續(xù)鍛造工藝帶來(lái)不良的影響。 針對(duì)鋼坯鍛件的缺陷通常會(huì)采用酸洗、噴砂、拋丸、滾筒以及高
    發(fā)表于 03-02 12:00 ?475次閱讀

    5G工程師通常會(huì)遇到哪些問(wèn)題?

    語(yǔ)說(shuō)的“酒香不怕巷子深”。這個(gè)故事還得從5G工程師會(huì)遇到的問(wèn)題談起。 1 5G工程師通常會(huì)遇到哪些問(wèn)題? 無(wú)線網(wǎng)絡(luò)從物理層到應(yīng)用層之間的協(xié)議層次結(jié)構(gòu)非常復(fù)雜。 因此在5G的開(kāi)發(fā)、驗(yàn)證或是部署等等最具挑戰(zhàn)性的階段,定位和解決問(wèn)題是一個(gè)巨大的挑戰(zhàn), 即:
    的頭像 發(fā)表于 05-17 09:40 ?1830次閱讀
    5G工程師<b class='flag-5'>通常會(huì)</b>遇到哪些問(wèn)題?

    IC設(shè)計(jì)的特殊信號(hào)打拍方式及RR輪詢調(diào)度

    Axi總線打拍模塊通常會(huì)采用特殊設(shè)計(jì)的IP模塊,將所有axi總線信號(hào)互聯(lián)到axi打拍ip上,起到一個(gè)橋接的作用,能夠解決時(shí)序問(wèn)題。
    發(fā)表于 10-03 15:26 ?1312次閱讀

    在高速設(shè)計(jì)中跨多個(gè)FPGA分配復(fù)位信號(hào)

    SoC設(shè)計(jì)中通常會(huì)有“全局”同步復(fù)位,這將影響到整個(gè)設(shè)計(jì)中的大多數(shù)的時(shí)序設(shè)計(jì)模塊,并在同一時(shí)鐘沿同步釋放復(fù)位。
    發(fā)表于 05-18 09:55 ?216次閱讀
    在高速設(shè)計(jì)中跨多個(gè)FPGA分配<b class='flag-5'>復(fù)位</b><b class='flag-5'>信號(hào)</b>

    晶振溫度特性測(cè)試通常會(huì)進(jìn)行高達(dá)150℃的測(cè)試

    晶振溫度特性測(cè)試通常會(huì)進(jìn)行高達(dá)150℃的測(cè)試主要是因?yàn)橐韵聨讉€(gè)原因:1極端條件測(cè)試:在電子產(chǎn)品的設(shè)計(jì)和測(cè)試中,常常需要對(duì)元件在極端條件下的性能進(jìn)行測(cè)試,以確保元件在所有可能遇到的溫度范圍內(nèi)工
    的頭像 發(fā)表于 04-29 08:29 ?424次閱讀
    晶振溫度特性測(cè)試<b class='flag-5'>通常會(huì)</b>進(jìn)行高達(dá)150℃的測(cè)試