spyglass | 基础操作

2021-10-11 17:07:15 浏览数 (1)

SpyGalss是目前业界唯一可靠的RTL Sign off解决方案,可以帮助客户在设计早期发现潜在问题,保证产品质量,极大的减少设计风险,降低设计成本。

包含五大模块:lint, CDC(跨时钟域检查), LP(低功耗),Constraint(约束),DFT(可测试性)。

本文测试用例

该测试设计包括具有符合 Wishbone 总线的 USB 控制器 (USB) 和音频解码器内核 (IMA_ADPCM)。这些组件连接到 Wishbone 连接矩阵 (WB_Conmax),后者又使用 Wishbone-to-Amba 桥 (wb2ahb) 连接到 AMBA 总线。该设计属于混合 RTL 类型,同时使用 Verilog 和 VHDL,如下方框图所示:

设计目录结构:

包括:rtl(用于存放代码),sim(用于存放中间文件和工程文件)、filelist文件等。

spyglass GUI操作

首先我们在sim目录中打开spyglass GUI界面操作:

读取设计文件

GUI界面打开spyglass

代码语言:javascript复制
spyglass &

然后点击Add File(s)添加文件:

所需文件路径存放在filelit文件中:

设置顶层模块

添加完文件后点击Set Options,然后选择列表中选择Top Level Design Unit,Value值为顶层模块名,如下图所示:

编译设计

点击Read Design,再在左侧点击Run Design Read开始进行设计文件编译和分析,在读取完成后会在下方窗口列出问题。如下图所示:

如下图,其中三个问题类型都为ErrorAnalyzeB Box,这是因为有的模块文件没有添加,spygalss无法找到,后面spygalss会将其作为黑盒子处理。

左侧instance下文件不同颜色标识意义为:

•绿色表示已准备好进行分析但尚未在内部综合; •黑色表示无法分析该块(黑框); •白色表示该模块是可综合的;

注意:默认情况下,设计读取不合成设计,因此尚未创建原理图。要使用 SpyGlass 进行完整的设计分析,应首先解决所有黑框,并且选择复选框Synthesize Netlist, 并重新运行Run Design Read。因此我们需将设计文件路径全部包括进去,在filelist添加以下文件:

代码语言:javascript复制
../rtl/usb/usbf_top.v
../rtl/usb/usbf_utmi_if.v
../rtl/usb/usbf_utmi_ls.v

并且将conmaxusb等库文件添加进去,重新Run Design Read。如下,ErrorAnalyzeB Box问题已经解决2个,还有一个问题是IMA_ADPCM引起的,后面会解决。

静态分析

下面列出使用spyglass来进行lint分析的步骤。注意使用spyglass进行分析不要求完整的工程文件。

首先选择Linting RTL分析。在窗口上方中间点击Goal Setup ,然后在主窗口区勾选Lint_rtl

得到结果后,查看Lint分析结果。首先展开lint/lint_rtl文件夹消息。选择并展开inferLatch文件夹,错误相关的代码会在RTL代码窗口中显示出来:

点击

符号得出电路图如图:

由电路和.v文件都可得出,这是因为hready信号没有在else后赋值,生成了锁存器。如果这些Latch是故意的,那通过屏蔽对该处的规则检查即可,否则我们修改代码后重新运行Goal。

最后save工程后关闭,打开工程文件wb_subsystem.prj,打开的文件如下:

  • read_file: 命令定义了在 SpyGlass 运行期间要读取的各种类型的文件。
  • language_mode: 选项用于指定当前 SpyGlass 运行的操作语言。默认值为“混合”,(将处理 Verilog、VHDL 和混合语言设计)。
  • projectwdir: 选项用于指定项目工作目录
  • GuideWare/latest : 是默认规则设置,它在项目文件中定义为 active_methodology。

可以在wb_subsystem.prj中,将这些源文件列表添加进去:

代码语言:javascript复制
read_file -type sourcelist ../filelist/file.list
read_file -type sourcelist ../rtl/wb_conmax/file.list

spyglass 命令操作

在上述基础上,将使用-batch选项在批处理模式下运行SpyGlass。同样的操作也可以在GUI模式下完成。

通过下面的指令来运行SpyGlass工程:

代码语言:javascript复制
spyglass -project wb_subsystem.prj -designread -batch

提示有6个错误。SpyGlass会生成比较多的报告,其中常用的报告为:

./wb_subsystem/wb_subsystem/Design_Read/spyglass_reports/moresimple.rpt其内容如下:

它们是被实例化的标准单元,提示没有定义。这些单元很可能会使用 -y/-v 选项传递,所以我们在 usb中的目录,看是否有没有加进去的库文件。可以看到 usb_lib 目录存在于usb目录中,但没有指定 -y 作为 file.list的一部分。

通过在 .prj中添加以下内容,指定Verilog库路径../rtl/usb/usb_lib和库文件扩展名.v以读取缺失的定义:

代码语言:javascript复制
  set_option y { ../rtl/usb/usb_lib }
  set_option libext { .v }

然后重新执行命令spyglass -project wb_subsystem.prj -designread -batch

可以看到剩下的一个黑盒错误来自IMA_ADPCM_top。这部分采用VHDL设计,出现黑盒问题原因是其设计文件尚未包含在.prj文件。

预编译库来解决IMA_ADPCM_top黑盒问题

预编译HDL库,需要指定逻辑库中要预编译的文件列表,以及逻辑库名和物理目录的映射关系。这是使用lib_hdlfiles(定义要编译到命名库的文件)和 lib(将命名库映射到物理目录)选项来完成的:

代码语言:javascript复制
set_option libhdlfiles ima_adpcm_lib "../rtl/ima_adpcm/IMA_ADPCM_Encode.vhd 
                                   ../rtl/ima_adpcm/IMA_adpcm_steptable_rom.vhd 
                                   ../rtl/ima_adpcm/WAV_header_rom.vhd 
                                    ../rtl/ima_adpcm/IMA_ADPCM_top.vhd "
set_option lib ima_adpcm_lib ../ima_adpcm_lib

首先删除包含上次运行保存的网表的结果目录,然后重新运行,确认这个最新的项目文件解决了来自IMA_ADPCM_top的黑盒错误:

代码语言:javascript复制
rm -rf wb_subsystem
spyglass -project wb_subsystem.prj -designread –batch

运行Goal及查看报告信息

通过下面命令来获取可用的Goal列表:

代码语言:javascript复制
spyglass –project wb_subsystem.prj -showgoals

使用如下命令来运行lint/lint_rtl分析:

代码语言:javascript复制
spyglass -project wb_subsystem.prj -goals lint/lint_rtl -batch

在文件./wb_subsystem/wb_subsystem/lint/lint_rtl/spyglass_reports/moresimple.rpt中查看更为详细的报告:

gui

0 人点赞