博客中图片截取自参考链接 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 即可,这点当进行交互分析时非常地方便;

image-20240219200428767

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 工具快速排除或者定位设计中的一些问题,减少时间成本。

image-20240218214441460

下图为 RTL Analyzer GUI 结构,主要看左侧的 Hierarchy 以及中间的 Schematic viewer。
image-20240219214310646

下面来看下 features,从上图 3 或 4 任意一个打开进入 RTL Analysis,便可以看到下图中所示界面。可以自己手动点击中间图查找,或从左侧可以展开看到所有层级 modules 以及相关的 ports 和 nets,一般点击一下中间图会自动跳转到该 module 位置,也可以从右侧 Find 索引到目标的 modules 以及其相应的层级等。以上三种方法均可,并且在以上三种方法基础上,右击选中部分点击 Locate Node 下 Code 便可以跳转到该 module 对应的代码行,非常的方便。

image-20240218214003891

2. RTL Analyzer features and Sweep Hints Viewer application

接下来看下 Constrained 下的 Swept hints 功能的使用。这些 Swept hints 其实就是在 Synthesis 过程中发现的 design 中的一些问题,有二种方式可以打开进入到这个 Viewer。第一种如下图所示,点击 RTL Analyzer 任务栏的 Tools->View Sweep Hints,便可以直接进入查看。

image-20240219214934547

第二种是直接右击 Schematic 图中黄色高亮的 module 或者 port,选择 View Sweep Hints。如下图所示

image-20240219215253508

以上两种均可,最后会跳转到下图所示的 Viewer。可以看到有三栏功能,其中的 Root Causes 罗列了所有问题 modules 以及其下的 Object,并包括了对应的 Object Type,Root Reason(被 Swept away 的原因)和因此被 Swept away 的 Objects 数量(默认按此递减排序)。

image-20240219215036154

当点击第三栏 Sweep Hints 时便会显示下图,可以通过 Filter 来过滤对应层级的 Sweep Hints,下方会显示对应被 Swept away 的 Objects 以及原因等,方便进行 debug。

image-20240220211452418

根据官方文档(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

image-20240218214338850

Summary

简单总结下,RTL Analyzer 工具主要是用来在了解综合后网表框图,并借助 Swept hints 尽可能在早期发现代码编写 bug,以及调试工程时加快找到问题所在。希望以上介绍对大家有帮助!

Reference

  1. Enabling Early Design Analysis (intel.com)
  2. RTL Analyzer Demo (youtube.com)
  3. Intel® Quartus® Prime Pro Edition User Guides - Combined