集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1191|回复: 2

FPGA的调试-内嵌逻辑分析仪(SignalTap)

[复制链接]
fpga_feixiang 发表于 2019-4-24 14:20:01 | 显示全部楼层 |阅读模式
对于FPGA调试,主要以Intel FPGA为例,在win10 Quartus ii 17.0环境下进行仿真和调试,开发板类型EP4CE15F17。主要包括一下几个部分:

- FPGA的调试-虚拟JTAG(Virtual JTAG)
- FPGA的调试-在线存储器内容编辑工具(In-system Memory Content Editor)
- FPGA的调试-内嵌逻辑分析仪(SignalTap)
- FPGA的调试-LogicLock
- FPGA的调试-调试设计的指导原则
上述内容主要参考《通信IC设计》,有兴趣的可以自己购买书籍进行研读。

1、简单实例
1.1 新建工程
  首先新建一个工程,然后添加文件,文件内容如下:

module test ( input CLOCK, RESET, output [7:0]oData );

reg [7:0]C1;

    always @ ( posedge CLOCK or negedge RESET )
    if( !RESET )
    C1 <= 8'd0;
    else if( C1 == 32 -1 )
    C1 <= 8'd0;
    else
    C1 <= C1 + 1'b1;

    assign oData = C1;

endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  逻辑非常简单,其中,CLOCK是时钟引脚,RESET是复位引脚,这只模块的功能就是不断重复计数,然后将计数
内容经由 Data 输出。接下来综合,分配引脚后就可以设置SigalTAP了。

1.2 配置SignalTapII Logic Analyzer
如图所示,点击 Tool 菜单,然后选择 SignalTapII Logic Analyzer 便可启动该工具。

  下图是 Signal Tap 的窗口,其中 4 处高亮的地方是比较重要的界面。
(一)JTAG Chain Configuration,JTAG 界面,主要是设置 USB Blaster。
(二)Instance Manager,调试界面,主要是启动,连续,结束等调试的活动。
(三)Signal Configuration,信号界面,主要是储存,触发等设置。
(四)Data,显示界面,主要是显示采集结果,时序活动。
(五)Setup,设置界面,主要是添加节点,设置触发事件/条件等。


① JTAG 界面 - 配置 JTAG 以及下载对象
  如图所以,设备一旦上电,并且 USB Blaster 链接成功,那么 JTAG 界面就会进入绪状态。


  如图 所示,SOF Manager 是小型下载管理器,读者也可以经由一般的下载管理器完成下载工作,不过一切下载活动必须在配置结束以后才执行(综合成功并且下载)。



② 信号界面 - 配置采集时钟,储存,触发:
  一旦 JTAG 就绪以后,我们就可以开始执行信号相关的配置。如图 3.6 所示,默认下的信号界面都是这个样子,其中:

&#61548; Clock 是采集时钟
&#61548; Sample depth 是储存/采集深度
&#61548; RAM Type 是储存资源
&#61548; Storage Qualifier - type 是储存方式
  首先,让我们设置采集时钟,所以请点击 Clock 选项右边的 < … >,完后会弹出节点界面。

  图中 是节点界面,这点它和 Time Quest 非常相似:
① 请读者保持 Named:* 不变的情况下,
② Filter 选择为 ,
③ 注意 Look in 指向顶层模块 ,
④ 然后点击右上角的 < List >。

  如下图 所示,这是添加节点(采集时钟)的步骤:
① 点击 列出所有 demo 模块相关的端口。
② 诸多端口之中,节点 CLOCK 将成为采集时钟,然后点击它。
③ 点击 > 将该节点添加到右边。
④ 点击 < OK > 生效设置。

  如下图所示,采集时钟设置完毕以后,Clock 右边的文本框就会出现 CLOCK 的字眼。

  如下图 所示,一般上储存相关的配置都会这样设定:
① Sample depth 储存深度按照感觉设置,这里是 256。
② RAM type 储存资源,有 Auto 就设置,非常省事,不然就是 M4K/M9K,还是 Logic。
③ Storage qualifier - type 储存方式选择 Continuous 连续性即可。
  读者可能无法相信,高达 8 成的调试工作都是按照这样的设定与配置。

  如图 3.11 所示,一般上触发相关的配置都是这样设定:

① Trigger flow control,触发条件流程,这里选择 Sequential 顺序性即可。
② Trigger position,触发位置,这里选择 Pre trigger position 即可。
③ Trigger conditions,触发条件数,这里选择一个即可。
同样,读者可能也无法相信,高达 8 成的调式工作也是按照这样的触发配置。到目前为
止,信号界面的配置工作总算告一段落。

③ 配置界面 - 添加采集对象:
  如图 3.12 所示,配置界面就是添加节点(采集对象)的地方,默认下它是空空如也,我们必须自行添加对象才行。
① < 右键 > 调出菜单,
② 点击 < Add Nodes … > 添加节点。


完成上面两个步骤以后,它就会跳出节点界面。

如上图所示,同样的节点界面再次出现:
① 请保持 Named:* 不变,
② Filter 设为 < Pins: all >,
③ Look in 设为 顶层模块,
④ 点击 列出,demo 模块所有相关的端口。

如上图 所示,假设 oData 是采集对象:
① 点击 列出顶层模块 demo 的所有端口,
② 选择 oData,
③ 点击 > 将节点添加到右边去,
④ 点击 生效配置。
如下图所示,如果一切无误的话,那么节点(采集对象)oData 就会出现在配置界面之中。完后,我们可以开始配置触发事件。


④ 触发事件:

  如上图所示,笔者曾在前面说过触发事件可以是单一或者复数,其中 Basic AND 与Basic OR 就是用来表达复数触发事件的关系。我们以同样的例子作为解释 …

  如上图所示,假设信号 A 的下降沿是事件 1,信号 B 的低电平是事件 2,那么 Baisc AND的逻辑关系造成两者在成立的情况下才执行采集。反之,Basic OR 的逻辑关系造成,任一事件成立都会执行采集。在此,笔者选择 Basic AND 就好了 …

  言归正题。笔者也说过,Signal Tap 有预设触发事件以及高级触发事件,后者必须将触发事件设为 Advance 才行,反之预设触发事件可以:
① 触发事件表框之处 <右键>,
② 选择

⑤ 采集界面:

  如图 3.22 所示,程序下载以后,如果环境创建失败的话,那么它会呈现红色(左图)。反之,如果环境创建成功,那么它会打印 Ready to acquire 的字眼。一般上,调试环境创建失败有几个原因:

JTAG 未就绪
程序下载失败
综合结果过期
设备未上电
以上 4 个原因排除以后,调试工作就处于就绪状态。

如图 3.23 所示,采集界面主要有 4 个选项控制整个采集过程。
① Run Analysis 手动执行,触发事件诱发采集,达到采集次数自动停止。
② Auto Analysis 自动执行,无视触发事件,采集次数,采集一切。
③ Stop,停止执行,停止采集。
④ Read Data,读取数据,读取缓冲空间的内容。
  一般上,如果触发事件配置无误的话,我们只要按下手动执行,那么触发事件会诱发采集,当采集达到某个次数以后(根据储存深度),采集过程就会结束。读者没有看错,采集界面只有 4 个选项而已,其中手动执行最为有用,因为其它选项只有在采集失败的情况下(触发事件未达成)才会派上用场,真是讽刺。例如,停止执行要么强制停止失控的采集现场,要么配合自动执行一起使用。换之,读取数据也是在采集失控的情况下,强制从设备中(缓冲空间)读取数据。好了,我们稍微点击一下手动执行,然后悄悄采集结果。

根据 demo 模块,我们知道它重复计数 0~31。如图 3.24 所示,T0 表示触发事件的达成之际也是采集工作的开始,其中未来值 5 就是触发事件的达成条件 … 简单的调试工作也到此结束。
2 (补充)Signal Tap 标准调试流程
如图 3.25 所示,虽说这是是官方指定的标准流程,不过笔者还是建议看看就好,千万不要太认真,迷信“标准”这种东西很容易害死人。图 3.25 有一处值得说明的地方是,触发事件发生失败的时候,如果跟着流程游荡,它会要求手动停止分析,如果 Signal Tap显示结果就进行分析,反之就是从设备哪里强制读取结果。

最后,好事的笔者也为实验三的配置过程绘出一副流程图,结果如图 3.26 所示,读者自己看着办。


3 (补充)添加节点
  笔者相信许多第一次接触的同学都会畏惧节点的过滤选项。如图 3.27 所示,不甘寂寞的官方为我们准备那么多选项,多少有些弄巧成拙的感觉,有关过滤选项基本上可以分为两大类以致缩小范围。其一是 Pin 端口类,其二就是 Reg 寄存器类,笔者喜欢的选项却只有 Pins:all 以及 Register : pre-synthesis 两个而已。

  顾名思义 Pins:all 就是所有端口的意思,如果 Look in 指向模块 A,那么模块 A 的端口就会显示出来(不管有没有赋值驱动)。反之,Register:pre-synthesis 就是综合以后的寄存器,如果 Look in 指向模块 B,那么模块 B 的所有寄存器都会暴露出来。除此之外,发狂的笔者偶尔不顾其它直接选择 Design Entry,即不管什么鬼东西统统都给老子举例出来 …
---------------------
zhangyukun 发表于 2019-4-25 09:15:45 | 显示全部楼层
FPGA的调试-内嵌逻辑分析仪(SignalTap)
大鹏 发表于 2019-8-18 13:41:42 | 显示全部楼层
FPGA的调试-内嵌逻辑分析仪(SignalTap)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-26 19:01 , Processed in 0.078737 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表