hxing

拒绝思维懒惰,习惯深度思考,提升认知水平。

导航

网表里修改寄存器默认值(二)

 

       在网表里修改寄存器默认值(一)里面,提到两种修改寄存器默认值的方式。我在我的项目里使用了第二种方式,即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。

 

posted on 2022-02-10 18:00  hxing  阅读(326)  评论(0编辑  收藏  举报