Signal Tap Logic Analyzer是Intel_Altera提供的在线信号逻辑分析仪,在板载实验中是非常有利的调试工具。其基本原理是在用户设计的逻辑中插入一个调试模块,该模块将输入、输出缓冲器或内部(如wire,reg 类型)的信号以系统时钟的方式采集到FPGA内部的block memory ,最后通过JTAG接口传送Quartus 工具进行分析。Xilinx Vivado 提供了非常类似的工具。由于该工具没有开放软、硬件设计具体的设计原理,因此作为工具能灵活使用,对工程的调试与验证起到关键的作用就可以。使用Signal Tap Logic Analyzer将会占用一定的资源,因此对于资源、成本比较在意的工程,调试成功后可以将该调试模块删除,重新编译即可。
下面以最简单的4位开关输入、4位LED输出为例介绍Signal Tap Logic Analyzer的使用,目的是将主要目标放在Signal Tap Logic Analyzer的使用上。SW_LED 的原理图如图1,

图1
表1
| 程序信号名 | 网络标号 | FPGA管脚 | 端口说明 |
| clk | C10_50MCLK | 91 | 输入时钟 |
| LED[3] | SW7_LED7 | 77 | 拨码开关第7位 |
| LED[2] | SW6_LED6 | 76 | 拨码开关第6位 |
| LED[1] | SW5_LED5 | 75 | 拨码开关第5位 |
| LED[0] | SW4_LED4 | 74 | 拨码开关第4位 |
| SW[3] | SW3_LED3 | 87 | 拨码开关第3位 |
| SW[2] | SW2_LED2 | 86 | 拨码开关第2位 |
| SW[1] | SW1_LED1 | 83 | 拨码开关第1位 |
| SW[0] | SW0_LED0 | 80 | 拨码开关第0位 |
1.新建工程
在Quartus 下新建工程,工程名称为signaltap,顶层实体为signaltap,顶层文件为signaltap.v。
module signaltap
(
input clk,
input [3:0] sw,
output [3:0] led
);
assign led = sw;
endmodule
2. 将编辑好的工程编译,管脚锁定如表1.
3. 建立Signal Tap Logic Analyzer
-
- 单击菜单Tools->Signal Tap Logic Analyzer,如图2,并跳出图3界面

图2
在图3中分为1,2,3,4等4个区域,如图3,

图3
- 区域1主要处理逻辑分析的各种操作
- 区域2设置JTAG接口,如图4,

图4
在图中设置合适的JTAG工具链,这里采用EPT-JTAG-Blaster v1.0(64)[MBUSB-0],如没有显示合适的JTAG接口,可以通过Setup设置。
- 区域3主要设置(添加)待抓取的信号,以及信号波形。

图5
- 添加待观察信号,
在图5中选择setup标签,并双击空白区域,弹出对话框如图6,

图6
在图6中的Node Finder对话框中按如下步骤设置:
- Named:框中,用通配符*
- 在Filter:选择框中选择SignalTap: pre-synthesis,本项选择的含义是选择综合之前的信号或端口,这样的选择可以在Matching Nodes:见到所有信号和端口。缺点是一旦选择这些信号,Quartus在后续的综合中就要保持该信号不被优化,替代,合并等,对整体的系统优化不利。
- 单击List按钮,本设计中的所有信号和端口都显示在Matching Nodes: 例表中,通过 >,>>,<,<<按钮添加到Nodes Found: 例表中,注意不要选择clk信号(因为clk信号将被用来作为主时钟抓取信号)。
- 单击Insert按钮,将被观测的信号添加到区域3中。单击close按钮关闭对话框。
- 在区域4设置时钟,数据抓取深度,存储信号的RAM类型等。如图7,

图7
- 时钟选择clk
- 抓取深度设为128,256等,主要决定要观察的深度还有所选择的FPGA芯片的资源,以及资源的剩余多少(由于 signal Tap添加的信号将作为FPGA资源使用的一部分,一起综合形成一个整体)
- Segmented: 设置128的深度(深度由上一步决定),分为几个窗口
- Nodes Allocated: 设置观察的信号在窗口的位置。
这里的可选择类型很多,按照图7设置即可,在将来的使用中,可以选择不同的类型进行体会。
4. 重新编译下载
当上面设置完成后,存储并重新编译,本次编译即携带了SignalTap 的信息。编译完成后需要重新下载。

图8
- Run Analysis(F5) 或AutoRun Analysis(F6)
- 拨动开关,观察Data 窗口数据。

图9
从图9可以看出,SW[0]为高电平,对应的led[0]也为高电平,这符合程序设计结果。
5. 设置触发条件
在图10窗口(选择setup标签),右键点击led[3],并选择Either Edge(双边沿),重新运行Run Analysis。此时窗口将会等待触发条件的满足。

图10
6. 观察带触发条件的波形
单击Run Analysis后拨动sw[3] ,观察双边沿触发条件的波形。如图11,

图11
总结:利用一个简单的例子演示了signalTap的建立、设置、编译、下载、触发条件的设置等,并观察得到的波形。
练习题:设置不同的采样深度、不同的触发条件、信号满足触发条件在窗口的位置等,重新编译,运行run analysis, 观察抓取的波形。