当前位置:   article > 正文

【RISC-V Debug】学习笔记(三)借助 ILA 在线查看调试信号_info: [labtools 27-1434] device xc7a35t (jtag devi

info: [labtools 27-1434] device xc7a35t (jtag device index = 0) is programme

我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和数字IC设计。

关注公众号【集成电路设计教程】,获取更多学习资料,并拉你进“IC设计交流群”。
QQIC设计&FPGA&DL交流群 群号:866169462

Vivado IDE提供了三种具有不同集成层次的ILA插入方法:

  • HDL 实例化调试探针流程
  • 网表插入调试探针流程
  • 约束文件插入调试探针流程

这里我选择的是【网表插入调试探针流程】,在 Vivado 综合后的网表中,分别标记要进行调试观察的各个信号,然后通过一个简单的“Setup Debug”向导来设置各个探针和 ILA IP 核的工作参数,然后Vivado 会根据用户设置的参数,自动地加入各个 ILA IP 核。废话不多说,开始 debug!

一、网表插入调试探针

1.1 标记信号(源码)

还是以 tinyriscv 为例,打开 jtag_dm.v 文件,可以为想要进行观察的 reg 或 wire 信号添加“Mark Debug”属性,例如:

(* mark_debug = "true" *)reg [25:0] cnt ;
  • 1

其中“(* mark_debug = “true” *)”必须紧挨在变量声明的前面。这样,在综合完之后打开综合后的设计,cnt 信号就自动被标记了“Mark Debug”属性。

对于输入输出端口信号,不能直接在端口名前加此属性,可以额外声明个 wire变量进行查看,如 (* mark_debug = "true" *)wire JTAG_TCK = jtag_TCK; 查看 jtag_TCK 输入信号。

enter description here

1.2 综合和debug窗口布局

然后运行下综合(Synthesis)

enter description here

综合完成后点击【Open Synthesized Design】打开设计,并将视图切换为【Debug】 窗口布局。

enter description here

也可以在 【Netlist】子窗口中标记目标信号,但我试了下由于信号命名改变了,所以挺难找到所需要进行标记的信号,建议还是直接在源码中进行标记。

enter description here

在网表子窗口选中要进行观察的信号,然后右键点击,选择 Mark Debug 即可。

然后可以在 Debug 子窗口查看已标记的信号。

enter description here

1.3 Setup Debug

再点击 Setup Debug

enter description here

enter description here

接下来的页面是选择用于采样待测信号的时钟域, Vivado 会自动识别出各个待测信号所属的时钟域并将其自动设定为其采样时钟。

enter description here

这里 jtag_TCK是外部时钟信号,没有时钟域,右键点击下选择个时钟域即可。设置完采样时钟后,点击 next,接下来的页面用于设置 ILA IP 核的全局设置,如下图所示:

enter description here
注:若采样深度过大,信号又较多,会导致FPGA Bram不够用,报下述错误

其中“Sample of data depth”用于设置采样深度(即一个采样时钟周期内采样多少次),“Input pipe stages”用于设置待测信号和其采样时钟之间的同步级数,这里保持默认即可。点击 next,就进入了最后的概览页面,确认无误后直接点击 finish 即可,如下图所示:

enter description here

在“Debug”子窗口中的“Debug Cores”选项卡中,可以看到 Vivado已经添加了 ILA IP 核,并且“Unassigned Debug Nets”目录下已经没有未被分配的信号了,如下图所示:

enter description here

1.4 保存设置

在“网表插入调试探针流程”中, 用户设置的调试信息会以 Tcl XDC 调试命令的形式保存到 XDC 约束文件中,在实现阶段, Vivado 会读取这些 XDC 调试命令,并在布局布线时加入这些 ILA IP
核。此时,我们所做出的所有的更改和设置,都还只是停留在电脑内存中,我们需要将其保存在硬盘的 XDC约束文件中,点击工具栏中的保存按钮,如下图所示:

enter description here

将生成的约束文件中的代码都复制到自己原来的 约束文件中。

enter description here

然后进行实现和比特流生成即可。

二、在 Hardware Manager中观察调试信号

生成比特流之后,打开 Hardware Manager,连接到开发板,并下载比特流,如下图所示:

enter description here

enter description here

在弹出的窗口中, Vivado 会自动识别比特流文件和具有调试探针信息的.ltx 文件,如上图所示。

这里我下载完后有 warning,也没有弹出波形窗口:

INFO: [Labtools 27-1434] Device xc7a35t (JTAG device index = 0) is programmed with a design that has no supported debug core(s) in it.
WARNING: [Labtools 27-3361] The debug hub core was not detected.
Resolution: 
1. Make sure the clock connected to the debug hub (dbg_hub) core is a free running clock and is active.
2. Make sure the BSCAN_SWITCH_USER_MASK device property in Vivado Hardware Manager reflects the user scan chain setting in the design and refresh the device.  To determine the user scan chain setting in the design, open the implemented design and use 'get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]'.
For more details on setting the scan chain property, consult the Vivado Debug and Programming User Guide (UG908).
WARNING: [Labtools 27-3413] Dropping logic core with cellname:'u_ila_0' at location 'uuid_23E7D65A79BC59F7BC47406C1714DFAE' from probes file, since it cannot be found on the programmed device.
WARNING: [Labtools 27-3413] Dropping logic core with cellname:'u_ila_1' at location 'uuid_3B505A030738513C98471D25F5B1F848' from probes file, since it cannot be found on the programmed device.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

查看了下实现后的网表中是有 u_lia_0、u_lia_1、dbg_hub的,应该是采样时钟的问题。

enter description here

enter description here

仔细查看了下,原来是因为我 dbg_hub的时钟绑定为了 jtag_TCK时钟,而时钟是外部时钟,非 free clock,修改下 1.3 Setup Debug中待观察信号绑定的时钟域即可。
正确的时钟域;

enter description here

这次就没问题了,可以看到 Vivado 已经自动地将待测探针信号添加到了波形窗口中,如下图所示:

enter description here

2.1 设置触发条件

ILA 会将每个采样时钟周期所采集到的探针数据存放在 RAM 中,然后通过 JTAG 和下载器上载到 Vivado。那么触发就是决定 ILA会在什么时候将 RAM 中的探针数据上载到 Vivado,当 ILA 检测到触发条件得到满足时,就会把 RAM 中的探针数据上传到 Vivado,然后 Vivado 将探针数据的波形显示出来。

Trigger Setup

enter description here

enter description here

这里我设置触发条件为 halt 请求有效,即为高电平时为触发条件,加载数据。
点击【自动触发模式】和【开始触发】,开始实时检测触发条件是否满足,一旦满足触发条件就会将数据加载到 Vivado 中:

enter description here

2.2 halt riscv core

调试器连线连接好后,就可以通过 openocd 进行连接(具体操作可看我此专栏之前的博客):

enter description here

通过 telnet 连接,输入 halt 指令进行暂停:

enter description here

回到 Vivado查看所抓取的信号数据;

enter description here

可以看到成功抓取到了 halt 请求有效时的信号值。搞定!又掌握了一种 debug 项目的手段。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/509016
推荐阅读
相关标签
  

闽ICP备14008679号