前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spyglass | 常见错误lint

spyglass | 常见错误lint

作者头像
数字芯片社区
发布2021-10-11 17:06:53
9.2K0
发布2021-10-11 17:06:53
举报
文章被收录于专栏:数字芯片数字芯片

我们将分析 lint目标运行期间产生的违规行为。我们可以使用 SpyGlass GUI 中的各种调试工具来了解违规,在 RTL 代码中调试,并查看如何在 SpyGlass 环境本身中修复这些违规。并且在更改 RTL或者.prj文件之后都必须重新运行。

使用以下命令打开 SpyGlass GUI,将自动加载上次运行目标 (lint/lint_rtl)

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

在没有-batch时,SpyGlass 默认会打开 GUI。

生成对应于每个目标运行的多个报告,可从菜单栏的报告部分访问,如下所示:

在GUI底部的Violations可查看违规信息。在显示出违规信息后,点击违规信息窗口顶部的Group By,然后选择Goal by Rule

W415 Multiple drivers错误

该规则确定了可以由设计中的 2 个或更多非三态驱动器同时驱动的网络。打开原理图窗口,增量示意图窗口显示违规的结构:

可以看到两个驱动程序正在驱动信号 (WB_master_data_o[0]) ,即端口m0_data_i由端口dat_o(例如 ahb2wb_u0)和m0_data_o(例如 conmax_u1)同时驱动。因此,这是一个违规行为。

通过查看RTL代码知道该部分使用ifdef构造来启用固定代码。

因此在wb_subsystem.prj中添加以下内容来启用宏,从而启用Fix_W415宏

代码语言:javascript
复制
set_option define { Fix_W415 }

设置后重新加载项目文件和重新运行spyglass -project wb_subsystem.prj &

SYNTH_5159警告

规则 SYNTH_5159识别可能无法综合的结构。该语句包含在synthesis编译指示中,表明该语句不用于分析,但默认情况下,SpyGlass 仅将synopsyspragma注释识别为pragma(编译指示)(与 Design Compiler 相同)。我们需要通过在.prj文件中添加以下内容来启用synthesis的pragma处理:

代码语言:javascript
复制
set_option pragma { synopsys pragam synthesis}

由于此错误发生在ima_adpcm_lib预编译库中,SpyGlass会检查该库的RTL是否已更改,只有在更改后才会重新编译,因此我们需要删除现有的预编译库,使用新的pragma设置重新编译该库。

代码语言:javascript
复制
 rm -rf ima_adpcm_lib

重新运行后,SYNTH_5159警告消除。

注意: 手动删除 ima_adpcm_lib的替代方法是在.prj文件中临时添加set_option force_compile yes以强制重新编译库。

UndrivenInTerm-ML错误

查看违规消息,发现“conmax_u1”矢量输入端口“m0_addr_i”的上半部分(31:16)范围被发现是浮动的:

  • 首先双击违规消息, RTL 代码中突出显示的行显示了矢量端口m0_addr_i的端口映射,该端口映射与矢量信号WB_master_addr。
  • 在RTL显示行上,选择WB_master_addr信号(双击),从右键菜单窗口中选择选项Signal:WB_master_addr:

折叠菜单显示了声明、加载和驱动程序的许多超链接(蓝色字样)。可以看到向量信号WB_master_addr的宽度为32位,与映射的实际端口m0_addr_i的宽度相同,即端口与相同大小的信号总线完全连接,不是问题所在。

因此我们继续检查向量信号WB_master_addr的驱动程序:

使用 View -> Windows -> HDL Navigator打开 HDL Navigator窗口,这显示了所选WB_master_addr的驱动器和负载。

注意到存在一个 RTL 驱动程序信息:

驱动程序是实例ahb2wb_u0的o/p端口adr_0,但这仅驱动矢量信号WB_master_addr的低位(15:0),其余位没有报告其他驱动程序 WB_master_addr ,即高位没有驱动程序。此违规的修复方法是将高 16 位赋值为0,并需要更新 RTL。

可以看到RTL中有通过拼接进行的驱动程序,但通过ifdef结构进行控制。因此可以通过设置Fix_UndrivenInTerm宏来调用目标程序:

代码语言:javascript
复制
set_option define { Fix_UndrivenInTerm }

通常,用户不希望每次运行 SpyGlass 时都看到违规消息。可以通过定义Waive来过滤它们 。

右键单击Waive Selected Messages这将打开Waive编辑器窗口,并为其填充相关信息(违规消息、规则和设计单元 (DU))

单击Apply,如下图,已忽略刚刚的警告信息。

在界面底部选择Waiver Tree可以查看已经被过过滤掉的错误选项。

如果想在后续继续使用当前生成的Waiver,可以将这些信息保存在一个Waiver文件 (.awl) 中。在waivers编辑器窗口中右键文件,然后选择选项Save Waiver Files。:

SpyGlass会为每个Goal保存一个关于检查过滤的文件,本例中文件路径为:

代码语言:javascript
复制
./wb_subsystem/wb_subsystem/lint/lint_rtl/wb_subsystem_waiver_file.awl

我们可以将其复制到当前工作目录下,方便调用:

代码语言:javascript
复制
cp ./wb_subsystem/wb_subsystem/lint/lint_rtl/wb_subsystem_waiver_file.awl ./wb_subsystem.awl

然后将该过滤文件包含到工程中并将其设置为默认waiver 文件:

代码语言:javascript
复制
read_file -type awl ./wb_subsystem.awl
set_option default_waiver_file ./wb_subsystem.awl

然后重新加载工程文件且运行Goal。

生成Dashboard/Datasheet

在GUI界面下打开shell命令窗口,输入如下命令生成Dashboard/Datasheet

代码语言:javascript
复制
write_aggregate_report datasheet
write_aggregate_report dashboard

通过在终端中输入下面命令可以在浏览器中查看报告

代码语言:javascript
复制
firefox wb_subsystem/html_reports/dashboard.html
firefox wb_subsystem/html_reports/datasheet.html

最后可以查看.prj文件:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字ICer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • W415 Multiple drivers错误
  • SYNTH_5159警告
  • UndrivenInTerm-ML错误
  • 生成Dashboard/Datasheet
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档