接著上文,MCU芯片設(shè)計了mbist、scan chain之后,功能仿真失???
有同學問,假設(shè)我們只是force ilm_sram的時鐘使之偏斜可以不?答:仿真cpu必掛死,dlm也會有問題的,不信證明給你看。
定位到CPU指令預測跳轉(zhuǎn),該預測為跳轉(zhuǎn)的指令進入到執(zhí)行階段時候,需要根據(jù)操作數(shù)據(jù)a、b是否相等來決定是否真正跳轉(zhuǎn),若預測錯誤即不跳轉(zhuǎn)則flush pipieline,重新取跳轉(zhuǎn)地址的指令。跳轉(zhuǎn)則繼續(xù)commit。
但是操作數(shù)a從cpu regfile取出來是x態(tài),追蹤發(fā)現(xiàn)操作數(shù)a是長指令回寫到regfile的,是lsu長指令。
繼續(xù)追蹤到dlm_sram輸出x態(tài),顯然dlm_sram也需要force一下時鐘。又有同學問,和ilm_sram一起簡單粗暴force為同一個時鐘可以不?來吧,這樣就又有新問題了。
?
發(fā)現(xiàn)dlm_sram想把ffc ffd ffe三地址寫0,fff想寫0x8000, 卻只有ffc ffd寫入0,ffe fff皆寫失敗,因為時鐘被force偏離了dlm_sram的要求,盡管滿足了ilm_sram。為什么不滿足dlm sram?因為各個sram的控制信號延時也不一樣啊。
因此,下圖看到sram讀出ffc的值0,其他讀出來都是x,導致pc值變成x態(tài),取指令失敗,cpu掛起。
因此,ilm sram和dlm sram被force為統(tǒng)一時鐘后,也可能錯誤的,因為force的時鐘滿足了ilm sram的偏斜,卻沒能滿足dlm sram的傾斜,因為cs/we等信號延時也不一樣的。
如下圖,黃線是ilm_sram,行為ok,紅線是dlm_sram,行為fail。
實際上,解決辦法不是force,我們應(yīng)該刪除force語句,具體方法參見知識星球。???????????
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
455文章
50816瀏覽量
423663 -
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351212 -
cpu
+關(guān)注
關(guān)注
68文章
10863瀏覽量
211779 -
仿真
+關(guān)注
關(guān)注
50文章
4082瀏覽量
133612 -
指令
+關(guān)注
關(guān)注
1文章
607瀏覽量
35714
原文標題:MCU芯片設(shè)計了mbist、scan chain之后,功能仿真失敗(二)
文章出處:【微信號:全棧芯片工程師,微信公眾號:全棧芯片工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論