网表里修改寄存器默认值(二)
在网表里修改寄存器默认值(一)里面,提到两种修改寄存器默认值的方式。我在我的项目里使用了第二种方式,即Q 跟 QN 端互换,D端取反。
同时,在RTL里修改了该寄存器的默认值。但是在做formality时仍然比对不过。百思不得其解,检查了又检查,依然找不到原因,遂请教了大牛。
经过大牛的查看,分析出了原因,给出了解决方案,最后formality比对也通过了。现介绍分析思路如下。
要修改的寄存器RTL code 如下:
寄存器cp1_timer的默认值要改成 2‘b11。所以直接改成如下的code。
需要修改网表的地方如下所示:
做了如下修改:
然后使用formality工具,报出了unmatch points,使用start_gui命令,打开formality界面窗口,此时gui界面会罗列所有比对不过的point。点击其中一个point,然后右击选择show patterns,然后会弹出一个新的界面,该界面显示了这个point的信息。其中一点信息是:
此处提示Reference 是Async set,Implementation 是Async clear。所以这种改法会造成寄存器的行为不一致。
然后大牛给出了新的方法,按理上RTL应该是上面的改法,但是出现了不一致,那么RTL就应该按照netlist 的改法,即D端取反,然后Q端再取反,改法如下。
这样修改后,再做formality 就没报unmatch point。