资讯详情

Quartus II SignalTap使用

首先说一下SignalTap和ModuleSim显然,这是两件不同的事情,SignalTap是集成于Quartus II的,是通过JTAG用于分析的实际信号,ModuleSim则是独立于Quartus II,是用于进行功能仿真的一个软件。 一般来说,用ModuleSim功能模拟必须是第一步。功能验证正确后,将代码烧到板上查看操作结果。此时,我们需要使用它SignalTap这个工具。这个工具位于Tools->SignalTap II Logic Analyzer里面。

操作过程简单如下:

1.完成项目单次编译;

2、打开signaltap图形界面,添加信号并设置相关设置;然后保存.stp将文件添加到工程中。

3.重新编译并下载到FPGA;

4.打开之前的stp文件,连接jtag可触发并观察信号。

打开SignalTap这个软件大致可以分为以下几部分。

这部分是JTAG Chain,用于显示JTAG连接情况,FPGA芯片的名称和sof下载文件。

本部分用于显示当前状态、资源消耗等信息。

该部分用于显示配置信息。Sample depth是收集数据的数量,收集的数量越多,就需要RAM数量越多,RAM type则是使用的RAM因为SignalTap需要占用资源,因此设置不当可能导致板上布线不下。

----------------------------------------------------------------------------------------------------------------

clock:采样时钟,选择设计中的时钟或从外部输入。采样并存储数据的每一个上升沿RAM频率越高,一点附近采样的数据越多,信号越真实;Sample depth:采样深度是分配采样数据的存储空间的大小。这两个参数决定了一个问题,Sample depth固定时,采样频率越高,触发点附近采样的时间跨度很小,只能在短时间内采样触发点的信号变化。所以在选择这两个参数时要考虑。

segmented:这个设置允许我们分段缓存,也就是说可以同时查看多个触发点,比如128kb采样深度分为64k x 两个缓冲区,在同一显示区间,可查看两个连续触发点的触发结果。

storage qualifier:该设置项帮助在调试过程中指定存储在存储器中的数据类型(the type of data stored in memory),默认模式下,signalTap II该选项为continuously”,即连续捕获并存储每一个时钟沿的数据,另外在此模式下,设计中的一些信号可以指定捕获和存储。其它选项如下:

Input Port:当输入信号为高电时,捕获数据。在这种模式下,将生成一个端口,我们需要给他一个信号

Transitional:当指定数据发生变化时,捕获并存储数据。

Conditional:允许设置存储允许信号作为存储条件,同时作为触发输入信号。

也就是说,当触发条件发生时,这些信号将被存储在ram一般直接选择这些设置来决定continuously

---------------------------------------------------------------------------------------------------------

这里一个非常重要的地方是Trigger,就是设置触发状态。例如,您需要监控某个状态FIFO如果不设置触发器,只能一次看到FIFO一个值输出,而不是一系列值输出。这边的Node触发信号设置在下面Pattern这里的触发条件是触发条件da_ren信号位置高。当然,也可以选择信号上升或下降的边缘来捕捉信号。

------------------------------------------------------------------------------------------------------------------

让我们来看看触发条件的设置:

trigger flow:触发流,即触发顺序控制。可选参数为:sequential 和state-based;

sequential:在触发收集缓冲区之前,按顺序计算所有触发条件,即当触发条件满足时,判断第二个触发条件是否满足,以此类推。 state-based:在这种模式下,触发顺序可以自行定制。当你调试你的设计时,你可以进一步控制触发条件。您可以查看每个状态下的触发条件,并在state-based trigger flow在状态机编辑器中编辑。

triggle position:设置采样位置,可选择以下三个采样位置

Pre-trigger position:保存触发信号发生后的信号状态信息(88%触发后数据,12%触发前数据)。

Center-trigger position:保存触发信号前后50%的数据。

post-trigger position:保存触发信号发生前的信号状态信息(88%触发前数据,12%触发前数据)。

我当时不明白上述设置。我一直认为,当触发信号发生时,采样时钟开始采样触发点后面的数据,直到采样存储RAM直到慢;事实并非如此。采样数据放置在循环采集中buffer(sample depth在设定的大小)中,采样时钟总是在采样中观察到的信号,这个buffer总是用最新的数据代替旧的数据。触发条件发生后,signaltap触发后继续收集数据。触发条件发生后,signaltap继续收集触发条件发生后的数据作为触发后的数据。以上三个设置是在触发后设置触发条件发生前需要收集多少点。理解可参考下图:

trigger conditions:触发级数

多级触发功能提供了更准确的触发条件。SignalTap Ⅱ首先判断一级触发表达式,结果是TRUE在所有触发条件成立之前,判断二级触发表达式,SignalTap Ⅱ开始捕获信号。 -------------------------------------------------------------------------------------------------------------

这是选择信号的地方。你需要在这里添加你想选择的信号。 以下是具体的使用方法。 首先需要编译工程,然后进入界面Signal Configuration的Clock选择基准时钟。

Options默认情况下,此栏是隐藏的,点击图中红框的位置进行显示。Filter我不知道几个选项的区别。默认值是什么SignalTap II:post-fitting,但是在这种情况下,会有一些信号找不到,信号后面有~,具体含义不清楚。如果要查看所有信号,请选择SignalTap II: pre-synthesis,暂时不知道这个选项会对结果产生什么影响,后续了解会在博客上更新。Look in缩小范围。如果是大项目,直接点击List会得到太多的信号,找到想要的信号会更麻烦,Include subentities是否包含子模块,Hierarchy view是否以树形展示。一般我们都会勾选两者。

---------------------------------------------------------------------------------------------------------------------------------

A、对工程的编译有两种方式,一种是全编译(start compilation),另一种只是做编译(start analysis & synthesis),不做映射(mapping),这两种方式,会对应两种网络节点(node),也就是我们的信号名称,signaltap观察点的增加就是以这些node作为用户的交互信息,“全编译”后根据全编译的网表,相应的node信息选择signaltap II:post-fitting;“start analysis & synthesis”编译后,signaltap选择signaltap II:pre-synthesis;那么这两种有什么区别呢?

选择pre-synthesis:以“start analysis & synthesis”综合后的网表中的node信息做为signaltap的信息节点,并且将其添加到工程后,再次编译工程,会重新综合并重新布局布线整个工程的所有逻辑。

选择post-fitting:官方文档中给过这个node的使用场景,大概意思是当我们的工程编译完成后,下载到FPGA中,发现工程项目有问题,此时想加入signaltap来分析问题,但又不想改变之前的布局布线的结果,此时选择这个node来作为观察信息的来源,quartus会自动启动增量编译来编译增加的signaltap逻辑,保留之前的逻辑布线和布局结果。

按我的理解就是,有“预谋”的使用signaltap就使用pre-synthesis,“意外”情况就使用post-fitting。 ------------------------------------------------------------------------------------------------------------------------------------ 在Signal Configuration的Data部分,选择Sample depth和RAM,这个按照默认值就行了,如果剩余的RAM还很多,可以多采样。

这是添加信号的图示,后面的Trigger Conditions意思是当满足某个条件的时候,进行数据采集,否则不采集。把这些设置完了之后,点击QuartusII界面的Save all,然后进行重新编译。  接上板子之后,会看到下面这个图,图中有显示当前的芯片名称。

编译完成之后进行下载,如果你要下载的是.sof文件,那么就在上图的SOF Manager处进行文件下载,如果下载的是.jic文件,那么就在Programmer中进行下载,其实道理都一样。

 点击连续运行按钮,就是上图中红框的位置,就可以看到如上图所示的界面。

可以点击File->Export将数据导出以进一步分析。导出的数据格式有.csv,.bmp等多种。当然通过停止运行的方式也是可以用来分析数据的。

完成设计——编译工程——建立SignalTapII (.stp)文件并加入工程——重新编译——下载设计到FPGA——在Quartus II软件中显示被测信号的波形;在测试完毕后将该逻辑分析仪从项目中删除。

c)   采样时钟决定了显示信号波形的分辨率,此时钟应该大于被测信号的最高频率。

d)   逻辑分析仪的有些信号不可测量,如下:逻辑单元的进位信号(进位链)/PLL的时钟输出/JTAG引脚信号/LVDS信号

FPGA的资源是有限的。设计已经占用了可观的资源(%的LE,%的MB),signaltap还要和设计抢占资源。“抢占”在这里是很贴切的,既包括抢占LE、MB,还包括布局资源和布线资源。我把“抢占”造成的影响叫做“测不准原理”。这一原理是贯穿signaltap调试始终的一条基本原理。一句话来说,就是“对信号的观察会对信号引入影响”。这些影响绝大部分表现不出来,或者是没有刻意去观察;但是表现出来的影响是原有的设计功能发生了变化。有的变化是原有的bug不出现了(这应该看作是坏的变化),有的变化是新的bug出现了。

据我分析,造成这些影响的可能原因有以下几个:

1)signaltap工具本身存在bug。这一点我无法证实,只是猜想。signaltap的原理是在设计的网表中插入触发逻辑和存储逻辑以及用于和PC机通讯的虚拟JTAG链路实现嵌入式逻辑分析仪功能的。这一插入过程是由QUARTUS软件完成的,对用户是不可见的。由于用户无法控制和约束这一过程,加入signaltap后的电路功能与用户设计初衷相违背也是可能的。

2) 被观察的信号扇出变大,造成设计的时序余量发生变化。实现触发逻辑需要在信号路径上加入触发器和组合逻辑,这样一来必然造成被观察信号的扇出变大,信号的输出延时增大。如果被观察信号的时序很紧张的话,加大信号的延时可能使时序关系变好(原有的bug不出现了),也可能恶化其时序(bug出现得频繁了或新的bug出现了)。

3) 由于“抢占”的存在,造成设计的时序余量发生变化。由于触发逻辑和存储逻辑的加入,FPGA的资源要重新分配。原设计在FPGA内的布局位置和布线资源会发生变化,时序也会受到影响。往往加入signaltap后,布局布线后的时序分析结果会比原来差。

   

1) 在每次重新编译之前,对信号的保留做一个评估,如果被观察信号被证明与要查找的问题无关,就删除这个信号。

2)  在每次编译成功之后,要查看编译报告,如果系统的逻辑资源利用比例在95%以上,就要考虑去除一些被观察信号或去除几个触发级别,或者减小采样深度。

3)  如果有必要的话,把仅需要作为触发条件的信号的采样使能关闭也能显著减少逻辑资源的占用。

4)  系统存储资源的占用比例也要考虑在内,不可占用太多。与此相关的选项是采样深度、信号个数、信号的采样使能是否关闭。

5)  编译成功后,要查看时序分析报告。如果系统时序下降很大或者被观察信号的时序不能满足,要考虑采用上面的方法减少对逻辑资源的占用。

1)  尽可能从设计的顶层选择信号作为采样时钟,而不是随便把哪个module的输入时钟作为采样时钟,以利于QUARTUS优化全局时钟资源的利用。

2)  在保证观察精度的前提下,选择较低频率的时钟。   采样时钟本质上是触发条件之一(最基本的触发条件),如果恰当的选取非时钟信号(没有确定频率的信号)作为采样时钟,可以起到事半功倍的效果。

标签: 182jic集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台