Spyglass Lint工具可以用于RTL代码检查,包括了语法检查,位宽不匹配检查,综合性检查等。尽管我们知道Design Compiler也具备Lint功能,但Spyglass作为专用Lint工具有着更好的性能。
一般Spyglass Lint操作可以插入到RTL编写阶段,在综合前对代码质量进行检查。
这里简单介绍一下Spyglass的Lint操作。
Spyglass可以通过GUI界面或者脚本进行调用。使用GUI界面操作的效率比较多,这里直接介绍自动化脚本。
类似于其他Synopsys软件,Spyglass可以通过tcl脚本进行操作:
set design_name "example"
# read in files
read_file -type sourcelist ../../prj/filelist.f
# read_file -type gateslib ../../lib/
read_file -type sgdc ../../src/sdc/${design_name}.sgdc
# setup
set_option top ${design_name}
set_option sdc2sgdc yes
current_goal Design_Read -top ${design_name}
link_design -force
# run lint
current_goal lint/lint_rtl -top ${design_name}
run_goal
# save project
save_project -force
上面的tcl脚本起到的作用包括了:读入文件,读入设计,运行RTL Lint以及保存工程四个步骤。
read_file命令用于文件的读入,可以用read_file -type verilog {xxx.v xxx.v}
的方式来挨个输入要读入的文件,更高效的做法是直接复用filelist.f文件,使用read_file -type sourcelist xxx.f
即可,此外如果编写了设计约束的话,可以通过read_file -type sgdc xxx.sgdc
的方式来进行读入。这里的sgdc可以写成复用sdc的方式,因为我们run DC的时候还是吃的sdc文件。
current_design xxx
sdc_data -file ../../src/sdc/xxx.sdc
注意后面要通过set_option sdc2sgdc yes
来对这个功能进行配合。
一些设计中的没有.v,需要被设为黑盒子的IP模块可以通过read_file -type gateslib xxxx.lib
的方式来实现读入。
读入设计阶段Design Read阶段会检查一下是否存在语法错误,如果顺利通过,那么就会进入RTL_Lint。Spyglass提供了许多不同的Lint功能,这里只简单介绍lint_rtl和lint_turbo_rtl这两种Lint。
通过current_goal
设置目前目标为lint_rtl,run_goal
命令开始运行lint,lint_rtl只对RTL代码进行Lint,此时可以不读入sgdc。如果Lint顺利通过,可以看到log中打印:
其中Fatals,Errors应该均为零,Warnings的内容可以具体内容具体分析。
通过gui_start
命令可以启动Spyglass的图形界面:
在下方的窗口里可以看到Message Tree,可以点开查看条目的具体内容。
通过点击上面的MS小按钮可以查看设计的原理图,和DC里面差不多。
如果读入了sgdc,那么可以进一步运行lint_turbo_rtl,将设计和约束文件在一起进行Lint。方法是点击上面的Goal Setup,勾选lint_turbo_rtl,然后点击Run Goal(s):
这里如果没有读入sgdc那么会报Fatal,如果有的话,那么可以和lint_rtl一样先看summary,然后看Message Tree做具体分析:
标签:Lint,file,read,rtl,lint,asic,Spyglss,读入 From: https://www.cnblogs.com/sasasatori/p/18401030