書(shū)接上文嗷接上文。
【芯片設(shè)計(jì)】復(fù)位那些小事 —— 異步復(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ú)法保證在同一拍。

復(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)的走線也就不稱(chēng)問(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)之談難免有所疏漏。
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129968 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1971瀏覽量
134988 -
復(fù)位
+關(guān)注
關(guān)注
0文章
179瀏覽量
25045 -
復(fù)位信號(hào)
+關(guān)注
關(guān)注
0文章
70瀏覽量
6816
原文標(biāo)題:【芯片設(shè)計(jì)】復(fù)位那些小事 —— 系統(tǒng)解復(fù)位的特殊處理
文章出處:【微信號(hào):Rocker-IC,微信公眾號(hào):路科驗(yàn)證】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于Xilinx FPGA的復(fù)位信號(hào)處理
對(duì)于芯片中的復(fù)位信號(hào)我們通常會(huì)有哪些特殊處理?
請(qǐng)問(wèn)ADUC7060的復(fù)位電路有特殊要求嗎?
復(fù)位系統(tǒng)組成部件
引起處理器和系統(tǒng)復(fù)位的原因有哪些呢
特殊尺寸機(jī)器人的位置反解算法
stm32復(fù)位電路設(shè)計(jì) 淺析stm32復(fù)位電路方法
STM32復(fù)位來(lái)源 以及系統(tǒng)和內(nèi)核復(fù)位區(qū)別
CM3(STM32) 內(nèi)核復(fù)位與系統(tǒng)復(fù)位區(qū)別及應(yīng)用
STM32學(xué)習(xí)筆記 | 引起電源和系統(tǒng)異常復(fù)位的原因
STM32復(fù)位來(lái)源、以及系統(tǒng)和內(nèi)核復(fù)位區(qū)別
STM32芯片的那些系統(tǒng)級(jí)復(fù)位功能
stm32軟復(fù)位 內(nèi)核復(fù)位和系統(tǒng)復(fù)位
GD32 MCU電源復(fù)位和系統(tǒng)復(fù)位有什么區(qū)別
系統(tǒng)解復(fù)位的特殊處理
評(píng)論