第五章 在线逻辑分析仪-SIGNALTAP
ps:仿真实在pc端进行仿真,和fpga一点关系也没有,而signaltap是直接反馈芯片的信号。
进行 FPGA 开发的过程中,在逻辑代码上板运行前都会进行仿真验证,而 EDA 仿真工具(如 Modelsim 等)的使用更是可以可以让工程师提早发现工程中出现的一些错误。但这并不代表经过仿真工具验证后的设计就能够达到预期。事实上,在上板运行时仍有可能遇到各种各样的问题。使用仿真工具进行验证的时候所设计 Testbench 的激励输入有时不能囊括一切可能发生的情况,并且由于软件仿真与实际硬件之间总是存在着细微的差别,诸如此类的原因导致工程师在上板运行时仍会发现各种设计问题。而很多情况下,在 FPGA 实时运行中需要查看某些信号,因此需要一个实时的信号分析工具获取 FPGA 内部的实时信号从而进行调试分析——SignalTap II 应运而生。
SignalTap 是由 Altera 公司开发的一个在线、片内信号分析的工具,为设计开发者验证所用。其作用类似于一个数字逻辑分析仪,利用 signaltap 工具基本上可以代替数字逻辑分析仪。Signaltap 是Quartus 里最常用的工具,希望同学们可以熟练使用。
第1节 软件原理
在使用 SignalTap 前先来理解一下 SignalTap 的原理,从而有助于理解各个参数。
如图 1.5- 1 为 SignalTap II 的基本工作原理,通过此图可以直观的理解触发条件、采样时钟、采样深度等的概念(概念及相关设置见第三节)及其之间的关系。
在调试过程中,某些需要观察分析的信号被称为“被测信号”,可以存在多个被测信号。
SignalTap II 的基本工作过程如下:以被测信号为对象,根据需要设置合理的触发条件,在触发条件(如图中的被测信号下降沿)满足时的前后一段时间,每个采样时钟的上升沿会对被测信号进行一次采集,并将采集的信号值存储在内部的 RAM 中。工程师可以指定触发条件前后采多少个样点,如果 RAM 比较大,则可以保存比较多的数据。反之,如果 RAM 比较小,那么保存的数据自然比较少,RAM 大小决定了观察数据的多少。最后 SignalTap 将读出RAM 中的数据并逐个在显示器中显示出来,因此 SignalTap 观测到的都是理想的(这说明再出现一些特殊信号时候,你是检测不出来的),没有毛刺的信号,工程师可以在显示器中观测信号,从而达到对信号进行在线调试分析的目的。
第2节 软件界面
打开 Quartus 软件,在菜单栏中,选择 Tools>SignalTal II Logic Analyzer 后可以打开 SignalTap 工具。如下图 1.5:
图 1.5- 3 中将需要注明的地方进行了标记,接下来将对各处功能进行详细介绍:
图 1.5- 3 中所标识的 1—4 为基本的软硬件配置:
1 为下载线选择;
2 为硬件检测(识别相关的 FPGA 设备);
3 为工程配置文件选择(sof 文件);
4 为加载 sof 文件(1-3 均完成后即可加载文件)。
图示 5—7 为采样设置:
5 为选择采样时钟,采样时钟要根据具体需要进行设置, 可以为模块的工作时钟,也可以为内部信号;
6 为采样深度设置,采样深度并非越大越好,要根据分析需求进行合理设置;
7 为触发位置选择,包括前段触发、中间触发、后端触发三种方式,以触发点为参考,根据触发位置的不同能得到不同时间段的信号值。
图示左边区域 8—9 为信号设置,包括添加信号,设置信号触发条件等。在 8 中空白处双击即可添加信号界面,根据需要添加工程中的相应信号,添加信号后即可设置其触发条件。
图中标识的 10 为资源使用情况指示,如果资源多于 FPGA 本身的资源,综合时会出现报错从而无法进行分析。
最上面的 11 为运行操作按钮,开始运行后,待触发条件满足后会显示波形。
第3节 使用流程
首先需要选择下载线方式、FPGA 芯片型号、工程配置文件,如下图 1.5- 4 所示:
随后设置采样时钟、采样深度以及采样信号。
图 1.5- 5 为采样时钟及采样深度的设置。此处选择 FPGA 内部 pll 锁相环输出的信号 c1 作为采样时钟。这里需要注意的是,采样时钟不一定是工程里的时钟,内部任何信号都是可以作为采样时钟的。这里将采样深度设置为 128,即共计可以观察到到 128 个采样点的数据。在 setup 窗口中双击空白地方,弹出如下图 1.5- 6所示界面。
图 1.5- 6 中红色框表示的是选择哪一阶段的信号,例如选取的是综合前或是综合后的信号等。因为综合时软件会自动进行优化,有些信号可能会找不到。一般会选择 pre-synthesis 或 Design Entry(all name)模式,在 Nodes Found 选择要观察的信号,将其添加到右边框中即可。
本例中选择 key_col 和 rst_n 信号来进行观察,如图 1.5-7所示:
采样信号选择好后即可进行触发条件的设置。观察 trigger Conditions 一列,key_col 的默认值为 xh(总线型信号的 don’t care),rst_n 的默认值为 don’t care。在 trigger Conditions 一列中右击 rst_n 所在的行,将会出现 6 种触发条件供工程师选择。
图 1.5- 8 中 6 种触发条件的含义如下:
Don’t Care:表示不关心,也即任意,此信号的值不影响触发条件;
Low :低电平触发;
Falling Edge:下降沿触发;
Rising Edge:上升沿触发;
High:高电平触发;
Either Edge:双沿触发,即有变化时触发。
此处可以假定为上升沿触发,对 key_col 也进行触发条件的设置,具体设置如下所示。
图 1.5- 9 中设置的触发条件含义为:当 rst_n 为上升沿并且 key_col 全为高(Fh)时触发。注意,这里多触发条件之间默认为“与”的关系,可能会被误认为是“或”的关系。最后进行综合并下载,点击“Run Analysis”按钮后查看结果。
如果触发条件成立,则可在 Data 窗口观察到采样波形,图 1.5- 10 是某一工程的采样结果,可以看到其采样波形与 modelsim 波形相似。点击波形后可以放大波形进行观看,右击波形则为缩小波形。
第4节 案例说明
本节中将采用几个案例来对 SignalTap 的使用步骤进行详细的说明。
案例 1:SignalTap 的采样时钟不一定是时钟信号,也可以是其他任意的信号。SignalTap 会在采样时钟的上升沿对信号值进行捕捉,如果没有时钟上升沿则 SignalTap 一直处于等待状态。
案例 2:观测时可以改变采样的深度以便观察到信号更长时刻的值。图 1.5- 11 中设置的深度为128,这意味着一共可以观察到 128 个点的值。如果这一观察量不够则可以将其设置成更大的数值。
但需要注意的是,SignalTap 需要使用到 FPGA 内部的 RAM 资源来保存采样的数据,所以采样深度越大,需要使用的的 RAM 就越大,与此同时占用的 FPGA 资源也就更多。然而 FPGA 的资源是有限的,当 FPGA 的内部资源不支持设置采样点数所占用的 RAM 资源数时,在编译时会出现报错提示。
案例 3:通过设置 segmented 参数可以检查满足触发条件的次数。例如,发现按键存在失灵情况时,为了定位此问题需要检查按键按下的次数,判断其是否与捕捉到信号次数一致。
该操作的主要设置如下:
将 segmented 设置为 32;
将捕捉到信号 key_vld 拉到显示窗口,该信号为 1 表示捕捉到一个按键。
设置触发条件为:key_vld 的上升沿;
按下 run 键,等待触发条件满足;
按下按键 4 次。
按停止捕捉键。
如果此时 SignalTap 波形界面出现 5 个窗口,其中前 4 个表示条件满足捕捉到 key_vld 的上升沿触发条件的窗口,则表示按下按键的次数与捕捉到的次数一致。否则代表发生错误,按键存在问题。
案例 4:添加信号后,如界面中该信号显示为红色,如图 1.5- 12 所示,则表示该信号的捕捉存在问题。
采样信号为红色出现该问题的可能性原因有:
该信号在电路综合时被优化。
a) 虽然该信号已经产生,但其没有被视为条件进行调用,或者不是输出信号。此时系统认为信号是多余的,因此在综合时会将该信号优化掉。
b) 如果该信号是有用信号,不应该被优化掉。则说明电路有 BUG,需要工程师去定位错误。
组合逻辑信号一般是捕捉不到的。其解决方法为忽略该信号,可以将产生该信号的所有条件都调用出来,从而推敲结果是否正确。
案例 5:图 1.5- 13 中包含的一个案例触发条件是:当 en 为下降沿且 en_tmp 发生变化。注意,只有在采样时钟上升沿时捕捉到两个条件同时满足时才会进行触发。
图 1.5- 14 所示波形中,在第 5 时钟上升沿时观察到 en 等于 1,en_tmp 等于 1,其不满足条件。而在第 6 时钟时捕获到 en 的下降沿(之前为 1,现在为 0)与 en_tmp 的下降沿(之前为 1,现在为0),可以看出第 6 个时钟满足触发条件。
在线逻辑分析仪是每个 FPGA 学习开发者必须熟练掌握的基本工具,是使用 FPGA 的必备能力之一。针对 SignalTap 的使用方法,下面链接中提供了 6 个训练工程以方便练习掌握这一工具。
工程训练网址:请点击