我们将分析 lint目标运行期间产生的违规行为。我们可以使用 spyglass gui 中的各种调试工具来了解违规,在 rtl 代码中调试,并查看如何在 spyglass 环境本身中修复这些违规。
并且在更改 rtl或者.prj文件之后都必须重新运行。
使用以下命令打开 spyglass gui,将自动加载上次运行目标 (lint/lint_rtl)
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宏:
set_option define { fix_w415 }
设置后重新加载项目文件和重新运行spyglass -project wb_subsystem.prj &
synth_5159警告
规则 synth_5159识别可能无法综合的结构。该语句包含在synthesis编译指示中,表明该语句不用于分析,但默认情况下,spyglass 仅将synopsys和pragma注释识别为pragma(编译指示)(与 design compiler 相同)。我们需要通过在.prj文件中添加以下内容来启用synthesis的pragma处理:
set_option pragma { synopsys pragam synthesis}
由于此错误发生在ima_adpcm_lib预编译库中,spyglass会检查该库的rtl是否已更改,只有在更改后才会重新编译,因此我们需要删除现有的预编译库,使用新的pragma设置重新编译该库。
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宏来调用目标程序:
set_option define { fix_undriveninterm }
通常,用户不希望每次运行 spyglass 时都看到违规消息。可以通过定义waive来过滤它们 。
右键单击waive selected messages这将打开waive编辑器窗口,并为其填充相关信息(违规消息、规则和设计单元 (du))
单击apply,如下图,已忽略刚刚的警告信息。
在界面底部选择waiver tree可以查看已经被过过滤掉的错误选项。
如果想在后续继续使用当前生成的waiver,可以将这些信息保存在一个waiver文件 (.awl) 中。在waivers编辑器窗口中右键文件,然后选择选项save waiver files。:
spyglass会为每个goal保存一个关于检查过滤的文件,本例中文件路径为:
./wb_subsystem/wb_subsystem/lint/lint_rtl/wb_subsystem_waiver_file.awl
我们可以将其复制到当前工作目录下,方便调用:
cp ./wb_subsystem/wb_subsystem/lint/lint_rtl/wb_subsystem_waiver_file.awl ./wb_subsystem.awl
然后将该过滤文件包含到工程中并将其设置为默认waiver 文件:
read_file -type awl ./wb_subsystem.awlset_option default_waiver_file ./wb_subsystem.awl
然后重新加载工程文件且运行goal。
生成dashboard/datasheet
在gui界面下打开shell命令窗口,输入如下命令生成dashboard/datasheet:
write_aggregate_report datasheetwrite_aggregate_report dashboard
通过在终端中输入下面命令可以在浏览器中查看报告
firefox wb_subsystem/html_reports/dashboard.htmlfirefox wb_subsystem/html_reports/datasheet.html
最后可以查看.prj文件:
光敏电阻和光电二极管优劣势分析,电阻电桥搭建几点重要指标
倒装晶片的组装的回流焊接工艺
联芯获联电28nm技术授权,内地芯片又将遭受创击
如何构建容错量子计算机?
为什么说网络切片技术是5G进军垂直行业的一柄利器
如何在SpyGlass环境本身中修复这些Lint错误呢?
音响知识13大法则经验搅出靓声
琴棋书画无所不能,人工智能是艺术还是鹦鹉学舌?
iPhone 15系列完整爆料 iPhone15多少钱?iPhone15什么时候上市?
手机指纹模组测试,屏下指纹识别的优缺点
Jetson 百万开发者故事 | 为了孩子的健康成长,他用 NVIDIA Jetson 做了一个象棋机器人
创想三维3D打印机 穿越中国 只为聆听您内心真实声音
扬尘污染自动监控系统防控扬尘污染
5G+终端AI =万物互联的时代正在到来
电动机烧坏但热继电器不动作什么原因
拥抱工业互联网正当其时!多重挑战犹存不容忽视
国内千元机华为和金立杀入前3,华为荣耀8与红米4A表现抢眼
华为发布自动驾驶移动网络系列化解决方案
微功率乘法器/除法器电路原理
柔性电子器件有多重要,它的未来发展如何