FPGA开发过程中,能够方便的观察模块中信号的时序变化对逻辑的开发有很重要的意义。在quartus中的signal
tap
就是能够方便的抓取模块中的信号,这类似与ISE的chipscope,但是在vivado中就没有了,必须内部例化ila,抓取的数据也不太方便,所以个人对vivado的使用还是感觉不太方便。言归正传,这里将详细讲解signal
tap的使用,我使用的quartus版本为10.1.
1.创建并设置STP文件
STP是signal tap的缩写,在quartus界面中点击file,选中new,弹出下面框:

选中SignalTap II
Logic A nalyzer File点击OK,弹出下面框:

2.在STP文件中添加实例(instance)
添加方法:在上图中的instance窗口中点击右键,选择create instance。
默认情况下,STP中有一个默认名为auto_signaltap_0的instance,双击auto_signaltap_0可以修改为自己定义的名字。
3.在instance中添加观测节点(nodes)
点击Edit,选中Add Nodes...(此处有一个需要注意的:上面的步骤必须在打开一个工程后操作,否则Edit中的Add
Nodes...将会是灰色,无法选中) ,然后弹出:

这个时候就需要添加你所需要抓取的信号。Look
in中选择抓取的信号所在的模块,Filter修改为:
SignalTap
II:pre-synthesis.(这两步非常重要,否则的话在Nodes
Found中会提示non-mathcad),在Named中输入所需抓取的信号名(貌似必须是全名),点击List,在Nodes
Found中就会出现该信号,双击该信号,该信号就会出现在Selected
Nodes里面。同样在Named中输入另外需要抓取的信号,使之出现在Selected
Nodes里面。添加完所有的信号后,点击OK。

4.为instance添加采样时钟
点击软件中下部的Setup按键,在右边会出现:

点击上图的clk旁边的[...]将会弹出与上面一样的Noder
Finder窗口,选择好合适的时钟信号。然后设置一些基本的参数:
采样深度,Sample depth
个人建议选大些,但是又不能超过FPGA资源,不然在后面的编译会报错。
RAM类型,这个默认为auto,不用管
触发,Trigger 这个在初期使用signal
tap就选择默认,后期可以根据具体信号波形来设置。
5.重新编译添加了signal tap工程
在quartus10.1中一般在上面的步骤都做好后,关闭signal
tap窗口一直点击OK就行。为了确保工程中的确添加了我们刚刚新建的stp文件,可以打开工程,选中Entity中的顶层,右键点击settings,就会出现:

选中左边的SignalTap II Logic
Analyzer,在右边[...]选中刚刚新建的stp文件。
6.编译和下载代码
按照一般的方法,编译和生成sof文件。下载代码需要在SignalTap
II 中下载,双击stp文件,就会弹出:

给板子上电,并且连上JTAG线(有的称为仿真器)。界面就会变成:

点击右上角的SOF Manager后面的[...],选择好刚刚生成的SOF文件,然后点击program
device。
7.抓取数据,观测波形
在下载好sof后,点击Instance Manager旁边的run
analyzer(也就是红色的三角标志),就会弹出:

界面上就是抓取出来的信号波形,此时完成了signal
tap的基本操作。
理论分析:
1.SignalTap II 的优缺点(摘自《altera
FPGA/CPLD设计(基础篇)》(第2版))
优点:
1.不占用额外的I/O管脚
2.不占用PCB上的空间
3.不破坏信号的完整性
4.相对传统逻辑分析仪设备,SignalTap II
免费试用。
缺点:SignalTap II
中抓取数据的深度取决于RAM剩余大小,特别是在低端的FPGA中,特别是学习板中,由于RAM太小,抓取的数据太少,SignalTap
II 基本对设计没有帮助。
2.触发位置的选择
以前似乎有四种选择,现在好像只能找到三种:
1.Pre trigger
position
:采样的数据12%为触发前,88%为触发后
2.Center trigger position
:采样的数据50%为触发前,50%为触发后
3.Post
trigger
position
:采样的数据88%为触发前,12%为触发后