Quartus RTL Analyzer 使用笔记
博客中图片截取自参考链接 1 和 2 中官方视频,二个视频有许多共同之处,对比参考。
参考链接 3 给出了官方文档中相关说明
0. Advantages of the Enable Early Design Analysis
RTL Analyzer 工具可以看做是 Early Design Analysis,作为 Quartus 独有的功能,有如下几个优点或者说必要(来自官方说明):
- 第一点,方便在工程编译初期总览全局,随着工程变得越来越大,越早发现问题就越能节约成本。虽然此时的 Analysis 还不能反应总体的 Placement,但也是综合之后的结果。
- 第二点,运行完这步后 Quartus 会生成 report 来反应 design 中的问题,比如某些接口连接问题或者逻辑判断不完备等,常见的几种类型后面会有介绍;
- 第三点,交叉交互即后面的 Cross Probing,使用该工具可以在多个不同 viewer 下进行相应 module 的跳转,只需右击 Locate Node -> RTL Analyzer 即可,这点当进行交互分析时非常地方便;
1. RTL Analyzer - Compilation Dashboard quick description
RTL Analyzer 这部分功能是在 Compilation 的第二步 Analysis & Synthesis,其中第二条 Analysis & Elaboration 中可以看到四个图标,如下图所示。其中前两个作用不大,重点是第三个 Constrint 以及 Swept。简单来说就是 Constrained 下仍然可以看到所有的 netlist,其中有问题或者即将被优化的部分会以黄色显示,而在 Swept 部分则仅显示综合器认为正确部分,去掉了 Constrained viewer 中显示黄色部分。另外 Constrained Viewer 中有个很重要的部分是 Swept hints,以上部分后面会详细展开说。
从开始编译到运行结束 Analysis & Synthesis 一般只需要 10 分钟左右,因此可以借助 RTL Analyzer 工具快速排除或者定位设计中的一些问题,减少时间成本。
下图为 RTL Analyzer GUI 结构,主要看左侧的 Hierarchy 以及中间的 Schematic viewer。
下面来看下 features,从上图 3 或 4 任意一个打开进入 RTL Analysis,便可以看到下图中所示界面。可以自己手动点击中间图查找,或从左侧可以展开看到所有层级 modules 以及相关的 ports 和 nets,一般点击一下中间图会自动跳转到该 module 位置,也可以从右侧 Find 索引到目标的 modules 以及其相应的层级等。以上三种方法均可,并且在以上三种方法基础上,右击选中部分点击 Locate Node 下 Code 便可以跳转到该 module 对应的代码行,非常的方便。
2. RTL Analyzer features and Sweep Hints Viewer application
接下来看下 Constrained 下的 Swept hints 功能的使用。这些 Swept hints 其实就是在 Synthesis 过程中发现的 design 中的一些问题,有二种方式可以打开进入到这个 Viewer。第一种如下图所示,点击 RTL Analyzer 任务栏的 Tools->View Sweep Hints,便可以直接进入查看。
第二种是直接右击 Schematic 图中黄色高亮的 module 或者 port,选择 View Sweep Hints。如下图所示

以上两种均可,最后会跳转到下图所示的 Viewer。可以看到有三栏功能,其中的 Root Causes 罗列了所有问题 modules 以及其下的 Object,并包括了对应的 Object Type,Root Reason(被 Swept away 的原因)和因此被 Swept away 的 Objects 数量(默认按此递减排序)。
当点击第三栏 Sweep Hints 时便会显示下图,可以通过 Filter 来过滤对应层级的 Sweep Hints,下方会显示对应被 Swept away 的 Objects 以及原因等,方便进行 debug。
根据官方文档(p28)所述,大致有一下几种类型的 Root Causes(下图中也有说明,而且结合来看)
-
A node stuck at constant 0 or 1 (Stuck at Constant).
比如某个 module 的 input 直接置为 0 或者恒定值 1.
-
A node behaved as a wire and was deleted.
比如某个乘法器的 select wire line 连接到某个恒定值
-
A node was modified during the sweep but it was not deleted (modified).
-
A node lost all fan-outs and it was deleted (lost fanout).
当某个 module 确定为无效时,此时连接到它的其他 module 的 port 都会是 lost fan-outs 状态.
-
A port or instance port got disconnected because the parent or child did not have a fan-out
Summary
简单总结下,RTL Analyzer 工具主要是用来在了解综合后网表框图,并借助 Swept hints 尽可能在早期发现代码编写 bug,以及调试工程时加快找到问题所在。希望以上介绍对大家有帮助!