目录
SignalTap II简介:
SignalTap II 全称 SignalTap II Logic Analyzer,是第二代系统级调试工具,可以捕获和显示实时信号,是 一款功能强大且极具实用性的 FPGA 片上调试工具软件。SignalTap II 可以选择要捕获的信号、捕获的触发 方式以及捕获的数据样本深度,实时数据提供给工程师帮助debug。
传统的 FPGA 板级调试是由外接的逻辑分析仪连接到 FPGA 的控制管脚,然后将内部信号引出至引脚 IO 上,进行板级调试。这种方法的缺点是首先我们需要一个逻辑分析仪,而逻辑分析仪一般价格都比较昂贵,且对于需要测试几十个引脚的时候,选择使用外接的逻辑分析仪就比较繁琐了。SignalTap II 在线逻辑 分析仪克服了以上所有的缺点,其借用了传统逻辑分析仪的理念以及大部分的功能,将这些功能植入到 FPGA 的设计当中,编程后存放在电路板的目标器件中,使用 FPGA 资源来构成嵌入式逻辑分析仪。SignalTap II不需要将待测信号引出至I/O上,也不需要电路板走线或者探点,当然更不需要外部的逻辑分析仪的花费, 它集成在 Altera 公司提供的 FPGA 开发工具 Quartus II 软件中。
SignalTap II使用:
在 Quartus 软件界面的菜单栏中,点击【Tool】→【SignalTap II Logic Analyzer】操作界面如图
SignalTap 软件界面
接下来我们添加需要观察的信号,双击节点列表和触发条件的空白区域
我们在节点发现器中首先将 Filer 设置为 SignalTap II:pre-synthesis,再点击【List】按钮,此时 Nodes Found 一栏就会出现我们工程代码中的信号,然后我们将 counter、sys_rst_n 和 led 添加至右侧 Selected Nodes 一栏 中,添加方法是直接双击 Node Found 一栏的信号名,如果需要删除的话,可以直接双击 Selected Nodes 一 栏的信号名,接下来我们点击【OK】按钮,完成信号的添加
这里需要注意的是,如果我们发现添加的信号变成了红色,或者有些 reg 与 wire 定义的信号可以观察, 有些不可以,这是因为 reg 与 wire 被 Quartus 软件优化掉了,导致无法使用 SignalTap 观察。这里有两种方 法解决这个问题,第一种就是将 reg 与 wire 信号改成输出端口信号,但这种方式较为繁琐;第二种方法就 是在待观察的 wire 信号旁边加上/*synthesis keep*/;对于 reg 信号则加/*synthesis noprune*/,如下所示:
添加完信号之后,接下来我们在信号配置页面中,添加采样时钟,添加方法如图
在信号配置页面 Clock 一栏中,点击右侧的【...】按钮,点击后弹出的页面如图
这个页面和添加待观察信号的页面一样,我们将系统时钟(sys_clk)作为采样数据的时钟添加至 Selected Nodes 一栏中,然后点击【OK】按钮。接下来需要设置采样的深度,我们在信号配置页面 Sample depth 一 栏中将采样深度设置为 2K,这里采样深度的值越大,所能观察信号的时间范围也就越长,但同时所消耗的 FPGA RAM 资源也就越大,设置后的界面如图
接下来保存我们的分析文件,点击 SignalTap 软件菜单栏的【File】→【Save】,如图
我们将分析文件保存在工程所在路径 par 文件夹下,然后点击【保存】按钮。接下来会弹出是否将分析 文件添加至工程的页面,我们直接点击【YES】
我们返回到 Quartus 软件界面,在工程文件导航窗口可以看到 File 一栏多了一个 stp1.stp 文件,这个文 件就是我们刚才添加至工程中的分析文件,如图所示。接下来我们需要对工程进行全编译
工程编译完成后,首先将 USB Blaster 下载器一端连接电脑,另一端连接开发板的 JTAG 接口,然后连 接开发板的电源线,并打开电源开关。接下来我们重新回到 SignalTap 软件界面,我们在JTAG 链配置窗口 中点击【Setup】找到 USB-Blaster[USB-0],这时我们在点击【Scan Chain】则会出现如图
从该图中我们可以看出,SignalTap 软件已经成功识别到我们的下载器和开发板芯片(如果没有识别到, 请检查电脑和开发板是否通过 USB Blaster 连接完成,并且开发板电源已经打开)。接下来我们给开发板下 载程序,这里需要注意的是,SignalTap 软件也是可以给开发板下载程序的,同样也是在 JTAG 链配置页面 的 SOF Manager 一栏中,点击【...】按钮,选择工程所在路径 output_files 文件夹下的 flow_led.sof,选中后 点击 Open 按钮,如图
下载程序按钮下载程序,程序下载完后,点击 SignalTap 软件工具栏中的开始分析图标
上图中第一个图标表示只运行一次;第二个图标表示自动运行,也就是会一直刷新采样的波形;第三 个图标表示停止运行。我们点击第一个开始运行图标即可采集到数据
可以通过点击和右击波形图的方式进行放大和缩小,数据默认是以 16 进 制显示的,为了方便观察数据,我们将格式改成无符号的十进制。操作方式是选中 counter 信号名
右击选择【Bus Display Format】→【Unsigned Decimal】
SignalTap 软件支持通过设置触发方式来采集波形,在 SignalTap 信号列表 Setup 一栏中,右击 sys_rst_n 信号的 Trigger Conditions 方框内的图标。
Don‘t Care 表示不关心,即不设置触发方式;Low 表示低电平触发;Falling Edge 表示下 降沿触发;Rising Edge 表示上升沿触发;High 表示高电平触发;Either Edge 表示双沿触发。由于按键复位 信号在未按下是高电平,按下之后变为低电平,所以这里设置为下降沿触发方式,然后点击【Data】一栏, 返回到波形显示页面。
再次点击工具栏中的运行一次的工具按钮,SignalTap 软件界面如图
这时我们可以看到,由于 SignalTap 软件一直等不到复位按键按下,所以它也一直不能触发,直到我们 按下复位按键之后,它便能采样到下降沿,从而进行触发。这里我们按下复位按键。
这时我们可以看到,SignalTap 软件进行了触发,然后我们分析波形可以看到,当复位按键按下以后, counter 计数器变为 0,led 变为初始状态 1h(2‘b01),这和我们的代码是一致的。这里我们需要说明的是 SignalTap 支持的触发条件除电平、边沿等触发条件外,也可以对 counter 计数器设置具体的值来触发,大家 可以试一试。如果两个或者以上的信号都设置了触发条件,那么最终仅仅当这些条件同时满足时,采样才执行。
如果大家调试好后不想要 SignalTap 的调试文件跟着工程一 起编译了(SignalTap 的调试文件编译会占用大量资源)可以直接从工程中把.stp 文件删除,或者点击 Assignments 打开 setting 找到 SignalTap 的使能开关,把它关掉即可