一. 使用perl对Soc中的digital ip进行lint check
1. purpose
- 在SoC芯片设计中,需要用到很多的digital ip。在前端设计来到中后期时,在RTL sign off之前,需要对rtl进行lint check,一般使用的是synopsys家的SpyGlass。如果一个个到对应的ip目录下run SpyGlass软件并查看输出报告是非常费事费力的,而且还不能确定万无一失。因此我们就可以使用perl脚本的方式来运行SpyGlass来进行lint check。
2. Design Flow
-
首先我们要确定使用场景:
- 当SoC中的digital ip并不是都release并且Top Core把digital ip都instance啦,此时我们进行spyglass时,更偏向自己写一个vfiles,此文件包含了要instance的ip的文件路径,通过此路径,我们进到对应的目录下,进行lint check。
- 当Top Core instance了所有的digital ip后并且Top Core可以编译,此时编译Top Core可以自动生成vfiles,此时就不用我们自己定义vfiles,会更准确更自动化。
-
因为对于此perl脚本运行时,给出的options至少有 customized vfiles mode 和 toplevelbuild mode 以及 restart mode(因为通常编译一个top core需要较久的时间,如果之前check时编译过top core,那么此模式直接去对应目录读取vfiles即可)以及help模式。
如下,同时给出了usage
GetOptions( 'help' => \$GetHelp, # get help 'h' => \$GetHelp, # get help 'file|f=s' => \$VFileName, # get vfile 'top_build|t' => \$TopCoreBuild, # it wiil build the top core and use vfile 'restart|r' => \$RestartCheck, # it will restart again and use the vfile already exist );
-
再进一步分析,给出了不同options之后,我们要根据不同的options分别做相应的处理。
-
首先是top core build模式,对于此模式需要先进到top core目录下,编译rtl,生成vfile,因此需要一个top_core_build函数来做相应的处理。
-
之后就是拿到了对应的vfiles,我们需要对此文件进行预处理。因为vfiles给的都是用到的ip对应的绝对路径文件,因此预处理此文件获得用到的ip名和ip的版本。因此需要个get_ipname函数。此函数返回一个hash %IPsGroup,包含了对应的ip名和版本号。
-
之后就是拿到了对应的IPsGroup,来循环分别处理每个ip,先判断run cdccheck相应的文件存不存在,然后再分别进入到相应的ip位置run cdccheck,然后分析输出的的cdc report。
-
之后会陆续更新相应部分的perl代码和思路。