提取RTL工程中寄存器

文章目录

前言

一、工程Hierarchy树状图

二、重构工程

1.重构Hierarchy树状图

2.重构文件夹

3.mv RTL代码

三、提取寄存器



前言

        最近所作课题需要将工程中所有寄存器提取出进行后处理,这里记录一下提取工程寄存器的流程。


一、工程Hierarchy树状图

        首先需要明白一点,直接从RTL代码提取reg信号作为寄存器是不对的,因为在代码中存在各种例化,所以提取的寄存器数量是不正确的。

        为了能够正确提取中实际综合后的寄存器,我们需要得到工程综合后的Hierarchy层级。这一步可以在VCS综合后,在Verdi中进行导出。

        右键其中一个模块,点击Export Hierarchy,即可导出。

        可以看到生成的Hierarchy层级图如下:

  

二、重构工程

1.重构Hierarchy树状图

        得到上述树状图,使用脚本提取的时候还有些困难,所以重新构建一下树状图。

        具体原理是按照层级结构,使用脚本将M或N替换为1-9。

python3 replace.py

      如下图进行转化:

2.重构文件夹

        根据重构后的树状图,生成带有Hierarchy层次结构的文件夹结构。

python3 mkdir.py

        如下图,可以看到文件名由例化名字和源module名字所组成:


3.mv RTL代码

        将工程中的RTL代码进行提取,匹配module名与括号内名字,将相对应的RTL代码放入指定文件夹中。

python3 mv_rtl2folder.py

        可以看到,脚本将对应的RTL代码放入了与其Module相对应的文件夹中。

三、提取寄存器

        根据自己需求,将寄存器提取出,我的目的是在顶层将其作为信号引出,以及统计寄存器的数量,所以生成如下:

        这里需要注意寄存器名字可能会重复,为了解决重复性问题,在脚本中加入自检模块,会将重复信号检测到,并按照顺序末尾补count,已解决重复性的问题。

猜你喜欢

转载自blog.csdn.net/m0_45287781/article/details/132993441