ic设计中寄存器到底需不需要复位
原理上当然不需要
但是设计上会带来很多不确性,加大风险
甚至初期仿真时候都会带来麻烦,因为设计不好的话x值如果参与逻辑判断结果就不是预期的了
fpga可以考虑减少复位,一般我们只在大位宽的数据流上节省复位
没有复位,到了post simulation的时候出来的那些红叉叉,烦也烦死你
不用复位的reg可以减少面积,post simulation可以force notifier to 0消除X,写个脚本可以轻松解决
需要复位
同事请问你所谓的损失一些性能具体是什么含义?
我非常奇怪,notifier这种modeling方式的存在本身就是用于发现timing上的问题。随意的force不是自欺欺人吗?
就仿真开始的一点点时间里稍微force一下 然后马上release掉 哈哈
force notifier 或者随机的force reg一个0或者1的值
说一下我的看法。
1.如果电路的触发器使用异步或是同步复位,那么可以保证所有触发器在加电之后处于稳定状态,只要电路设计的功能正确,应该没有问题。
2.如果触发器不使用复位逻辑,那么看这个触发器的用途才能判断会不会有问题,如果这个触发器表达的功能在后面的逻辑锥中有决定性的作用(甚至在更多层的DFF之后才会表现出来),则比较危险,因为加电之后,没有复位的DFF是有可能是1或0,所以simulator用unknown来表达这种效应(除非某些foundary会确认他们的标准单元不会发生这种事情),这种异常的情况可能会使chip不稳定,有的时候不能工作正确。
对啊 完全同意
对于那种跟功能相关来判断不复位有没有问题 感觉在写RTL时候就可以定下来
之前有个项目买了个IP核, RTL模型排版上做了加密 几乎人类无法阅读的
网表模型, 怎么仿都过不去, 一大堆的XXXX, debug网表。。。发现有X和X非的逻辑, 按时这种逻辑可以判断为0或者1, 但因为计算的对象是X, 就导致输出个X 一直传下去
往上找源头 就是有些东西没有初始值啊。。 无奈情况下force了它们
其实VCS对门级仿真也提供了这种支持的 仿真开始的时候通过cli输入个啥命令 就能全部给0 或者1
没说清楚,不好意思,首先是在design的保证下可以用
代复位端的DFF比不带复位端DFF的面积大 速度慢 这个应该是肯定的吧
VCS没有这种功能吧,我做后仿的时候没听说过。
没有复位,主要是为了节省面积。ARM里面也很多寄存器没有复位端的。
数据流动中间需要缓存,这种寄存器就没啥必要复位。
另外,由于状态机肯定会复位,其它一些寄存器的状态由状态机而定,这样也不需要复位端。反正只要状态机复位,这个寄存器会自动恢复为一个固定值。