用spyglass检查rtl语法的介绍
专栏:ExASIC Oct. 21, 2025, 12:14 p.m. 8 阅读
本文介绍用spyglass检查rtl语法的入门操作

rtl有没有语法错,有时候动态仿真真靠不住。如果靠dc综合来排错有点太靠后期了。用spyglass来静态检查rtl到是个不错的方法,速度快,还全面。下面介绍用spyglass检查rtl语法的入门级操作。

一、打开spyglass,读入rtl

直接敲命令spyglass就行。

# module load spyglass
spyglass

image.png

点左侧按钮“Add File”,选中rtl file list(注意:file list中的路径要相对当前路径有效),点“Add”加到右侧,再选择文件类型为“sourcelist”,最后点“OK”。

image.png

当然如果源文件不多,也可以选中每一个verilog文件,分别添加。

二、读入stdcell库

如果rtl中例化了stdcell、sram等IP,则需要再读入他们的lib库(corner不重要,任意选一个就行,比如ss_v1p62_125c)。还是通过“Add File”,选择xxx.lib后,type自动识别到GatesLib

image.png

三、设置顶层模块名等后进行“Read Design”

左侧点“Set Options”,top level design unit的value处填入顶层模块名。根据需要可能需要使能systemverilog语言,默认是关闭的。其它option看实际需要。最后点左侧“Read Design”->“Run Design Read”进行编译RTL。

image.png

image.png

四、设置语法检查项,进行语法检查

点击顶部工具条“Goal Setup”,勾上lintadv_lint,点“Run Goal”。等片刻,就可以生成语法检查报告,再根据warning和error进行排查和修改RTL。

image.png

image.png

五、哪些warning和error应该特别注意?

下面总结了几点要特别注意的问题:

序号检查项检查的原因或者影响
1多驱动正常数字逻辑不会带多驱,很可能代码写错了。可能造成内部短路。
2输入悬空一般是忘记赋值,或者接线了。大概率会造成功能缺失。
3组合逻辑循环一般是代码写错,正常逻辑不会有这种循环。
4latch很可能是组合逻辑或者状态机忘记else或default状态。会造成时序更复杂,电路容易不稳定。

最后,需要说明的是动态仿真、静态lint、综合工具编译报错都是语法检查的手段,实际项目中几种方法需要同时使用,才能保证尽量少出bug。

感谢阅读,更多文章点击这里:【专栏:ExASIC】
最新20篇 开设专栏