一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

jf_GctfwYN7 ? 來源:芯時代青年 ? 2023-12-25 09:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

復(fù)位消抖

這篇文章就先聊下復(fù)位消抖,在開始之前先說明一下因為我的經(jīng)驗有限且很多是道聽途說,所以文中難免有所疏漏和錯誤,請大家不吝賜教。

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

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

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

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

wKgaomVtd2GAA2lnAABoIL9qtec009.jpg

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

wKgZomVtd2GAJmeuAACdalg0EPY304.jpg

同樣的,如果有兩個延時D觸發(fā)器,那么復(fù)位信號必須維持L電平在兩個clk時鐘周期以上,或門才能在時鐘沿處打出一個L信號出來:

wKgaomVtd2GAVtogAACysChIyXA738.jpg

如果有三個延時D觸發(fā)器,那么復(fù)位信號必須維持L電平在三個clk時鐘周期以上,或門才能在時鐘沿處打出一個L信號出來:

wKgZomVtd2GAcU_1AADGGJY8l6k362.jpg

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

第二種方式通過累加器來完成,簡單來說就是數(shù)一下rst_n連續(xù)出現(xiàn)了多少拍,假如需要通過100M消抖時鐘來濾除100ns以下的復(fù)位抖動,那么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拍對外輸出復(fù)位信號,對應(yīng)的波形示意如下:

wKgZomVtd2GAOD04AADmjQArDGE867.jpg

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

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

wKgZomVtd2GAKp02AABxFn4JL6Q000.jpg

對應(yīng)的波形也很簡單:

wKgaomVtd2KAW3WvAACr7fNUwcc331.jpg

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

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

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

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

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

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

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

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

wKgZomVtaiqAPNP2AAB7UqNQjSc577.jpg

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

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

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

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

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

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

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

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

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

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

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

wKgZomVtfsCASnY0AACP4Q9M9Sc025.jpg

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

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

降頻后復(fù)位。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

對外輸出valid。

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

wKgaomVtaCKAEOwUAAAr7OABUfw200.jpg

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

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

wKgZomVtaCKATpMsAAArxk-5BQo577.jpg

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

對外輸出的ready。

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

wKgaomVtaCKAXT3_AAAqVpIO49c913.jpg

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

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

wKgZomVtaCKAL9VKAAApK5x572M756.jpg

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

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

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

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

配置復(fù)位

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

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

wKgZomWI4PGAEYfmAACmfsOuCPc558.jpg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

wKgaomWI4PGAeUe6AACADtZzUOo980.jpg

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






審核編輯:劉清

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

    關(guān)注

    31

    文章

    5434

    瀏覽量

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

    關(guān)注

    3

    文章

    173

    瀏覽量

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

    關(guān)注

    0

    文章

    49

    瀏覽量

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

    關(guān)注

    0

    文章

    128

    瀏覽量

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

    關(guān)注

    0

    文章

    50

    瀏覽量

    9668

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

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

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

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

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

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

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

    請問反激寬電壓輸入時,為什么通常會設(shè)計成低壓連續(xù)模式,高壓不連續(xù)模式

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

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

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

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

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

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

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

    兩級DFF同步器跨時鐘域處理簡析

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

    針對鋼坯鍛件的缺陷通常會采用哪些措施

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

    5G工程師通常會遇到哪些問題?

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

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

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

    在高速設(shè)計中跨多個FPGA分配復(fù)位信號

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

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

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

    公司大廳通常會用哪些LED顯示屏?

    公司大廳通常會用到以下幾種 LED 顯示屏: 一、全彩 LED 顯示屏 功能與特點: 色彩豐富鮮艷:能夠呈現(xiàn)出 1600 多萬種顏色,真實還原圖像和視頻的色彩,無論是公司的宣傳視頻、產(chǎn)品圖片,還是
    的頭像 發(fā)表于 11-15 14:51 ?1041次閱讀