接着上文,MCU芯片设计了mbist、scan chain之后,功能仿真失败?
有同学问,假设我们只是force ilm_sram的时钟使之偏斜可以不?答:仿真cpu必挂死,dlm也会有问题的,不信证明给你看。
定位到CPU指令预测跳转,该预测为跳转的指令进入到执行阶段时候,需要根据操作数据a、b是否相等来决定是否真正跳转,若预测错误即不跳转则flush pipieline,重新取跳转地址的指令。跳转则继续commit。
但是操作数a从cpu regfile取出来是x态,追踪发现操作数a是长指令回写到regfile的,是lsu长指令。
继续追踪到dlm_sram输出x态,显然dlm_sram也需要force一下时钟。又有同学问,和ilm_sram一起简单粗暴force为同一个时钟可以不?来吧,这样就又有新问题了。
发现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态,取指令失败,cpu挂起。
因此,ilm sram和dlm sram被force为统一时钟后,也可能错误的,因为force的时钟满足了ilm sram的偏斜,却没能满足dlm sram的倾斜,因为cs/we等信号延时也不一样的。
如下图,黄线是ilm_sram,行为ok,红线是dlm_sram,行为fail。
实际上,解决办法不是force,我们应该删除force语句,具体方法参见知识星球。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !