FPGA开发过程中,能够方便的观察模块中信号的时序变化对逻辑的开发有很重要的意义。在quartus中的signal tap 就是能够方便的抓取模块中的信号,这类似与ISE的chipscope,但是在vivado中就没有了,必须内部例化ila,抓取的数据也不太方便,所以个人对vivado的使用还是感觉不太方便。言归正传,这里将详细讲解signal tap的使用,我使用的quartus版本为13.1.1.
创建并设置STP
文件 STP
是signal tap
的缩写,在quartus
界面中点击file
,选中new
,弹出下面框:
选中SignalTap II Logic A nalyzer File
点击OK
,弹出下面框:
2.
在STP
文件中添加实例(instance
) 添加方法:在上图中的instance
窗口中点击右键,选择createinstance
。默认情况下,STP
中有一个默认名为auto_signaltap_0
的instance
,双击auto_signaltap_0
可以修改为自己定义的名字。3.
在instance
中添加观测节点(nodes
) 点击Edit
,选中AddNodes...(
此处有一个需要注意的:上面的步骤必须在打开一个工程后操作,否则Edit
中的Add Nodes...
将会是灰色,无法选中)
,然后弹出:
这个时候就需要添加你所需要抓取的信号。Look in
中选择抓取的信号所在的模块,Filter
修改为:SignalTap II:pre-synthesis.(
这两步非常重要,否则的话在NodesFound
中会提示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
文件。下载代码需要在SignalTapII
中下载,双击stp
文件,就会弹出:
给板子上电,并且连上JTAG
线(有的称为仿真器)。界面就会变成:
点击右上角的SOF Manager
后面的,选择好刚刚生成的SOF
文件,然后点击program device
。7.
抓取数据,观测波形 在下载好sof
后,点击InstanceManager
旁边的run analyzer
(也就是红色的三角标志),就会弹出:
界面上就是抓取出来的信号波形,此时完成了signal tap
的基本操作。理论分析:1.SignalTap II
的优缺点(摘自《alteraFPGA/CPLD
设计(基础篇)》(第2
版)) 优点: 1.
不占用额外的I/O
管脚 2.
不占用PCB
上的空间 3.
不破坏信号的完整性 4.
相对传统逻辑分析仪设备,SignalTapII
免费试用。 缺点:SignalTapII
中抓取数据的深度取决于RAM
剩余大小,特别是在低端的FPGA
中,特别是学习板中,由于RAM
太小,抓取的数据太少,SignalTap II
基本对设计没有帮助。2.
触发位置的选择 以前似乎有四种选择,现在好像只能找到三种: 1.Pretrigger position :
采样的数据12%
为触发前,88%
为触发后 2.Centertrigger position :
采样的数据50%
为触发前,50%
为触发后 3.Posttrigger position :
采样的数据88%
为触发前,12%
为触发后
FPGA开发过程中,能够方便的观察模块中信号的时序变化对逻辑的开发有很重要的意义。在quartus中的signal tap 就是能够方便的抓取模块中的信号,这类似与ISE的chipscope,但是在vivado中就没有了,必须内部例化ila,抓取的数据也不太方便,所以个人对vivado的使用还是感觉不太方便。言归正传,这里将详细讲解signal tap的使用,我使用的quartus版本为13.1.1.
创建并设置STP
文件 STP
是signal tap
的缩写,在quartus
界面中点击file
,选中new
,弹出下面框:
选中SignalTap II Logic A nalyzer File
点击OK
,弹出下面框:
2.
在STP
文件中添加实例(instance
) 添加方法:在上图中的instance
窗口中点击右键,选择createinstance
。默认情况下,STP
中有一个默认名为auto_signaltap_0
的instance
,双击auto_signaltap_0
可以修改为自己定义的名字。3.
在instance
中添加观测节点(nodes
) 点击Edit
,选中AddNodes...(
此处有一个需要注意的:上面的步骤必须在打开一个工程后操作,否则Edit
中的Add Nodes...
将会是灰色,无法选中)
,然后弹出:
这个时候就需要添加你所需要抓取的信号。Look in
中选择抓取的信号所在的模块,Filter
修改为:SignalTap II:pre-synthesis.(
这两步非常重要,否则的话在NodesFound
中会提示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
文件。下载代码需要在SignalTapII
中下载,双击stp
文件,就会弹出:
给板子上电,并且连上JTAG
线(有的称为仿真器)。界面就会变成:
点击右上角的SOF Manager
后面的,选择好刚刚生成的SOF
文件,然后点击program device
。7.
抓取数据,观测波形 在下载好sof
后,点击InstanceManager
旁边的run analyzer
(也就是红色的三角标志),就会弹出:
界面上就是抓取出来的信号波形,此时完成了signal tap
的基本操作。理论分析:1.SignalTap II
的优缺点(摘自《alteraFPGA/CPLD
设计(基础篇)》(第2
版)) 优点: 1.
不占用额外的I/O
管脚 2.
不占用PCB
上的空间 3.
不破坏信号的完整性 4.
相对传统逻辑分析仪设备,SignalTapII
免费试用。 缺点:SignalTapII
中抓取数据的深度取决于RAM
剩余大小,特别是在低端的FPGA
中,特别是学习板中,由于RAM
太小,抓取的数据太少,SignalTap II
基本对设计没有帮助。2.
触发位置的选择 以前似乎有四种选择,现在好像只能找到三种: 1.Pretrigger position :
采样的数据12%
为触发前,88%
为触发后 2.Centertrigger position :
采样的数据50%
为触发前,50%
为触发后 3.Posttrigger position :
采样的数据88%
为触发前,12%
为触发后