现在的位置: 首页 > FPGA开发 > 正文

quatus ii——调试利器 SignalTap II

2020年02月07日 FPGA开发 ⁄ 共 5943字 ⁄ 字号 quatus ii——调试利器 SignalTap II已关闭评论 ⁄ 阅读 2,256 次

1.为什么要用SignalTap:

在上板运行前都需要进行仿真,Modelsim 的使用可以使 FPGA 设计的许多错误扼杀在上板运行前,但这并不代表有了 Modelsim,我们的设计就天衣无缝了。实际上,在真正的上板运行时,我们还有可能遇到这样那样的问题,原因有多种: Modelsim仿真所用 Testbench 的激励输入有时不能囊括一切可能发生的情况,或者输入的信号是无法提前获取进行仿真的实时信号,或者我们在 FPGA 实时运行中需要查看某些信号等等。总之,在上板运行时,我们仍会发现各种设计问题,需要一个实时的信号分析工具获取 FPGA 内部的实时信号进行调试分析——SignalTap II 就是应这种需求而生的。

一想到数字电路设计的信号分析,可能大家第一印象就是逻辑分析仪。逻辑分析仪固然是进行信号分析的好工具,但是其本身也存在两个问题:

 价格昂贵
即使是最便宜的性能很差的逻辑分析仪,价格也要几百上千。而稍微好点的如 Agilent 等品牌的逻辑分析仪,更要上万甚至十几万,对于一个 FPGA 开发者,这简直就是天价。
 信号引出不方便
如果要使用逻辑分析仪进行信号分析,我们需要将待分析的信号通过外部引脚引出,这个过程比较不方便,如果需要引出的信号数量较多,比如说引出一个 32bit 总线,那更是很麻烦的一项工作——而且你的板子上还不一定存在那么多外部引脚。

对于 FPGA 开发者而言,

SignalTap II 的出现解决了 FPGA 设计中信号分析的难题,SignalTap II 全称为 SignalTap II Logic Analyzer,从名称上可以看出它本质上就是一个逻辑分析仪,不同的是它是免费的:硬件部分用 FPGA 内部资源实现,软件集成在了 Quartus II中。它可以对 FPGA 的输入输出管脚及任意内部信号进行逻辑分析,能迅速分析电路某些信号的运行状态和锁定设计问题,方便 FPGA 开发者对设计进行调试。SignalTap II 占用的是 FPGA 的内部资源(以 RAM 资源为主),其工作原理为:将采样的经过修改的综合门电路信号存储到内部 RAM 中,通过 JTAG 传到 PC 机上,在软件上显示供开发者观察分析。其采样深度会受 FPGA 内部 RAM 资源容量的限制,但对采样深度要求不是很高的信号来说,已经足够使用。总之, SignalTap II 这个免费的逻辑分析仪在 FPGA 开发过程中应用非常广泛,很多情况下能替代逻辑分析仪进行信号分析。下面就正式介绍 SignalTap II 的使用方法。

2.signalTap 的使用

有了已经编译完成的综合门电路工程,我们就可以正式介绍 SignalTap II 的使用了。一般来讲, SignalTap II 的使用流程分为四个步骤:

创建 SignalTap II 文件、

设置 SignalTap II文件、

捕获信号、

分析信号

下面详细介绍以上四个步骤:

2.1 创建 SignalTap II 文件

要使用 SignalTap II 分析信号,首先要在 Quartus II 中创建一个 SignalTap II 文件,并将其添加到对应工程中。需要注意的是,每个 Quartus II 工程中可能有多个 SignalTap II 文件,但只能使能( enable)其中的一个,使能后的 SignalTap II 文件才能被编译进工程和正常使用。

打开创建并编译完成的 Quartus II 工程 ,首先创建 SignalTap II 文件。在 Quartus II主界面选择菜单栏的 Tools->SignalTap II Logic Analyzer,打开 SigalTap II 软件,如下图红框所示。

点击后就进入了 SignalTap II 软件的工作界面,如下图所示。 VITO 把 SignalTap II 软件的主界面分为四个区域,分别是:状态区(显示 SignalTap II 运行状态)、 JTAG 区(检测 JTAG连接情况及下载固件)、设置区(对 SignalTap 各项参数进行设置)和数据区(显示捕获到的信号数据)。

其中数据区与设置区是重叠的两个栏,上图中显示的是设置区,点击下边栏的 Data,我们把显示切换为数据区,数据区还没有任何数据

在 SignalTap II 主界面下选择 File->Save(或直接 Ctrl+S)保存文件,点击后得到下图,名称就用其默认名称 stp1,点击保存,完成 SignalTap 文件的保存。注意观察对话框的下部有一个选择 Add file to current project,即是否把文件添加到当前工程中,默认是勾选的,我们自然要把 stp1 添加进工程,所以无需改变设置。

提示:

因为创建的 Quartus II 工程中没有 SignalTap II 文件,所以打开 SignalTap II 软件后它会自动为我们创建一个(未保存的) 。如果工程中已有文件的话,打开软件则会显示已有的 SignalTap II 文件,这时想要新建 SigalTap II 文件的方法为: 在 SignalTap II 主界面下选择 File->New File,即可新建一个 SignalTap II 文件。此外,再强调一下本节开始提到的一点:一个 Quartus II 工程中可以有多个 SignalTap II文件,但只能使能一个。我们在完成 SignalTap II 的创建与设置后,要重新编译工程,也只有被使能的 SignalTap II 文件会被编译进工程中,占用 FPGA 的资源。编译后,也只有被使能的 SignalTap II 文件能够使用,如果想使用工程中其它文件,需要重新使能其它文件和编译。

2.2 设置 SignalTap II文件

下面进行关键的一步,设置 SignalTap II 文件。一般来讲,一个 SignalTap II 文件在使用前需要进行的设置有: 添加采样时钟、 添加信号、设置采样方式、设置触发方式、设置触发条件

首先添加采样时钟

我的板子上采用的是 50MHz 的晶振,在引脚分配时已经将它作为输入的时钟信号 clk,我们把它作为采样时钟。方法是在 SignalTap II 软件的主界面,点击设置区下图红框所示的位置,就会弹出 Node Finder 对话框,我们要记住这个对话框,因为一会添加信号时还会遇到它。

下图红框的选项用于筛选信号,一般用得较多的是 Named、 Filter 和 Look in,下面分别介绍这三个选项。

Named 是通过信号名称筛选信号,默认为“*”,表示跳过名称筛选。比如我们已经知道输入时钟的名称为 clk,在选项框中输入 clk,点击 List,则 Node Found 列表中就列出了名称为 clk 的信号,如下图所示。

Filter 是根据信号类型来筛选信号,常用的有 pre_synthesis 和 post-fitting,如下图红框所示,其中 pre-synthesis 代表综合前设计中的信号,与 Verilog 设计中存在的信号最为贴近;而 post-fitting 则添加了综合优化、布局布线之后的一些信号,与设计电路的物理结构最为贴近。一般来讲,我们使用 pre_synthesis 已经足够。

Look in 可以将信号筛选锁定在某个层次和模块进行。比如一个复杂的工程包含多个不同
层次的模块,我们在寻找信号前需要锁定信号所在的层次和模块再去寻找,方法是点击下图红
框位置按钮,弹出 Select Hierarchy Level 对话框。因为 本工程只有一个模块,无需修改。

介绍完筛选信号后,下面正式把 clk 添加为采样时钟信号。我们用 Filter 筛选信号,选择
pre_synthesis 类型,点击 List,列出了所有信号。
首先介绍下 Nodes Found 和 Selected Nodes 两个列表框(分别以左框和右框代替),左框中列出了所有筛选合格的信号,右框中列出了所有将被添加的信号。我们的工作就是挑选左框中的信号,将想要添加到 SignalTap II 中的信号移到右框。在左框或右框中,单击某个信号代表选中信号,双击对于左框会把信号添加到右框中,对于右框则会移除信号。此外,还有在
两框之间的四个按键可进行信号添加删除工作,它们的功能如下图所示。

上图已经将 clk 信号添加完毕,点击 OK 就完了了采样时钟的添加,此时再观察设置区的

Clock 一栏,可以看到 clk 信号已经被添加,如下图所示。

接下来添加信号。在设置区的左边空白部分右键单击,选择 Add Nodes,如下图框 1 所示。当然也可以直接双击空白部分,正如框 2 提示的那样。

然后弹出我们并不陌生的 Node Finder 对话框,采用 Filter 的 pre_synthesis 方式筛选出信号,并将除 clk 和 rst_n 之外的信号添加到 Selected Nodes 中,如下图所示,点击 OK 完成。

这时观察设置区左边的空白部分,可以看到已经添加进来的信号。

2.3 捕获信号 设置采样方式

接下来设置采样方式。第一步是设置采样深度。采样深度的设置位于设置区右边的 Sampledepth 选项处,深度从 0 到 128k 可选,单位为样点数。比如设置为 128,代表采样深度为 128,即可以采 128 个样点的信号,因为工程较简单,我们把深度设为 128 就足够了。

第二步是设置采样模式。采样模式分为分段采样和非分段采样(也叫循环采样),如果没有
勾选上下图红框所示的 segment( 分段),就是非分段采样,在信号触发后就连续采样至采样
深度,即填满整个 SignalTap II 的存储。我们还要选择 Type(类型),一般设置为 Continuous 即可。

如果勾选上了 segment,就是分段采样,将采样深度分为 N 段,信号每触发一次就采样

一段长度的数据,需要连续触发 N 次来填满整个存储。我们需要选择采样的段数及每段长度,如图中所示, 8 16sample segments 代表分成 8 段,每段 16 个采样点。

以上就是采样方式的介绍。我们设置采样深度为 128,模式为连续采样, Type 选择Continuous,完成后如下图所示。

 设置触发方式

接下来是设置触发方式。触发方式的设置分为触发流程控制( Trigger flow control)、触发位置( Trigger position)和触发条件( Trigger conditions),如下图所示,下面分别介绍这三个选项。

触发流程控制分别为 Sequential(顺序的)和 State-based(基于状态的)两种, State-based 用于较复杂的触发控制,对于一般的信号分析选择 Sequential 即可。

触发位置分为前端触发( Pre)、中间触发( Center)和后端触发( Post),它决定了信号触发点在整个采样数据中的位置,这里我们选择前端触发

触发条件选项可以选择触发条件的级别,最多可以设置 10 个级别的触发条件。以Sequential 控制触发为例,对于多个级别的触发条件,其工作原理如下图:对于非分段采样,先等待判断 1 级触发条件是否满足,若满足则跳到触发条件 2 等待判断,否则继续等待,直到最后一级的触发条件判断满足后,正式开始捕获信号;对于分段采样,最后一级触发条件满足后开始捕获第一段信号,后面只需满足最后一级触发条件条件就再次捕获一段(这里我们可以理解为前面级别的触发条件满足一次即可)。对于简单的信号分析,1 个触发条件级别已经够用,我们选择 1

以上就是触发方式的介绍。我们设置触发流程控制为 Sequential,触发位置为前端触发,触发条件为 1 个,如下图所示。

设置触发条件

设置 SignalTap 文件的最后一步就是触发条件的设置了。触发条件的类型分为 Basic 和Advanced,如下图红框所示,一般选择 Basic 即可。

触发条件的设置对象是添加的信号,方法是选中某个信号,右键单击,得到下图红框所示的触发条件: Don’ t Care 代表任意条件都触发, Low 表示信号低电平时触发, Falling Edge表示信号下降沿时触发, Rising Edge 表示信号上升沿时触发, High 表示信号高电平时触发,Either Edge 表示任意沿触发。需要注意的是,同一列中的 Trigger Conditons 属于同一级别,
可以给该列中多个信号同时设置触发条件( 注意这里与上面设置触发条件级别的区别!),比如给 in1、 in2 都设为 Low,那么当 in1、 in2 信号都为低电平时,才会触发采样我们设置的触发条件为 in1:Low,即 in1 为低电平时触发。这样触发条件的设置也完成了。至此,整个 SignalTap II 文件的设置也就结束了。下面是设置区的截图,大家可以对比下设置。别忘了设置完成后保存文件!最好是边设置边保存!

捕获信号

SignalTap 设置完成后,要想用其捕获信号,还要编译下 Quartus II 工程。因为此时 stp1文件已经是 Quartus II 工程的有效 SignalTap II 文件,我们无需其它设置,直接编译工程即可。

编译完成后,打开 SignalTap II 软件,在运行 SignalTap II 之前,需要打开 TIGER BOARD,用 USB Blaster 连接开发板与 PC。 我们需要将 SOF 文件通过 JTAG 区下载到开发板中。此时JTAG 区如下图所示,标红内容显示没有发现器件。

这时我们在 Hardware 中选择对应的 USB Blaster,得到下图,可以看到刚才标红的内容变成了 JTAG Ready,表示 JTAG 已经就绪。 Device 一栏的内容也显示出来了(如果仍然没有发现 Device,可以点击右边的 Scan Chain 搜索器件)。

然后添加 SOF 文件,点击下图红框位置,找到工程的 sof 文件,点击 Open 完成添加。
添加 SOF 文件完成后就可以下载 SOF 了,点击下图红框所示按键下载 SOF 文件到板子中。

SOF 文件下载完成后, SignalTap II 运行的一切准备工作就 OK 了,我们再将目光锁定在控制区,如下图所示: 1 键是运行键,点击一次捕获一次信号; 2 键是连续运行键,点击一次捕获连续进行; 3 键是停止键,可以中止当前的信号捕获。 Status 栏显示着捕获状态,分为Not running(未运行)、 Waiting for trigger(等待触发)和 offloading acquired data(导出捕获到的数据), 此时显示 Not running,表示捕获未运行。

点击运行键,开始捕获信号,捕获完成后,设置区会自动切换到数据区,得到下图所示的数据 :

至此捕获信号就完成了。

最后,功能测试正常之后,是要从工程中移除signaltap的, 因为使用Signaltap,所以会额外消耗更多的资源 :

下面这张图是包含 signaltap 的资源使用情况:

面这张图是不包含 signaltap 的资源使用情况:

下面介绍从工程中移除 signaltap 的方法:

1、 Assignments->Settings设置一下,如下图所示。

只要去掉Enable SignalTap II Logic Analyzer前面的勾就可以了,这样,综合出来的电路就不带Signaltap了(资源会减少)。

×