玩转Zynq连载33——基于Vivado的在线逻辑分析仪板级调试
0赞更多资料共享
腾讯微云链接:https://share.weiyun.com/5s6bA0s
百度网盘链接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取码:ld9c
1概述
基于Vivado的板级调试介绍,可以参考文档《玩转Zynq-基础篇:基于Vivado的在线板级调试概述.pdf》。这里我们以zstar_ex54工程为例,对FPGA的在线逻辑分析仪使用进行介绍和实战操练。
2标记探测信号
在axi_gp_top.v模块中,可以看到AXI GP总线的很多信号前面都有(*mark_debug = "true"*)这个语句,它的作用就是将代码中需要引出进行在线逻辑分析仪观察的信号,就如同一个个探棒一样将信号标记起来。
3工程编译与Debug信号设置
工程的代码设计完成,并且标记好需要探测的信号后,点击Synthesis --> Run Synthesis对当前工程执行综合编译。
完成编译后,打开Synthesized Design --> Set Up Debug.
如图所示,点击Next。
Nets to Debug界面可以添加或删除设置代码中标记了mark_debug的信号,并对其采样和触发属性做设置。
● 名称(Name)列中显示了在代码中标记了“(*mark_debug = "true"*)”的所有信号。若需要在这里删除或添加信号,可以使用左侧的“+”或“-”符号进行操作。
● 时钟域(Clock Domain)将作为信号采样的同步时钟,默认为信号在逻辑代码中的同步时钟。若需要修改时钟域,可以点击右侧的方波形状符号操作。
● 驱动单元(Drive Cell)显示信号的驱动类型。
● 探针类型(Probe Type)显示信号的采样类型,可以是数据信号(Data)、触发信号(Trigger)或同时作为数据和触发信号(Data and Trigger)。一般我们都设置为Data and Trigger,在调试过程中,所有信号都可以随意的设置被采样信号和触发信号。
选中这些带调试信号,点击时钟图标(图示的Select Clock Domain)。
如图所示,Select Clock Domain页面中选中时钟FCLK_CLK0,点击OK。这就是信号的采样时钟。
ILA Core Options页面中,可以设定探测信号的采样深度、缓存寄存器等级和信号采集触发相关控制选项。完成设置后,点击Next进入下一页面。
● 采样深度(Sample of data depth),用于设置信号的连续采样点数量。当然,这个值越大,采样的数据越多,越利于调试探测,但是这需要更多的FPGA片内RAM的资源消耗,所以这个值的大小取决于实际系统可用的RAM。这里设定32768个点,至少保证能够采样到一帧9600bps的UART接收数据。
● 探测信号经过的寄存器等级(Input pipe states)设定,此选项主要用于确保设计中的关键信号不会因为ILA探测信号的加入而受到影响。对于设计本身时序余量充足的情况,这个值可以设置为0。
触发和存储设置(Trigger and Storage Settings)中可以使能采集控制(Capture control)和高级触发(Advanced trigger)。使能采集控制,ILA支持的基本采集控制模式可用。使能高级触发,ILA支持的一些高级触发模式可用。
完成设定后,点击Next。
最后是Set up Debug Summary页面,点击Finish完成设定。
点击Program and Debug à Generate Bitstream重新编译工程,产生下载配置的bit文件。
3板级调试观察
在已经下载bit文件,并且elf文件已经在Zstar板子上运行起来以后。回到Vivado中,如图所示,展开Program and Debug --> Open Hardware Manager,点击Open Target,弹出菜单中选择Auto Connect。
随后弹出如图所示的Hardware Manager界面。
● 1:Hardware窗口,这里将会出现FPGA中所有可以通过JTAG进行调试的选项,例如XADC以及本实例专门增加的在线逻辑分析仪ILA(hw_ila_1)。双击hw_ila_1,将弹出相应的调试界面。
● 2:Setting窗口,这里可以对信号的采样和触发控制进行设置。
● 3:Status窗口,这里显示当前数据采样或触发的状态。
● 4:Trigger Setup窗口,这里可以添加触发信号并编辑触发条件。
● 5:Waveform窗口,这里显示信号触发后的采样波形。
图 Hardware Manager界面
本实例的Setting窗口设置如图所示。
● 触发模式(Trigger mode)反应的是Set Up Debug里的设定,我们是BASIC_ONLY设置。
● 采样模式(Capture mode)的选项有BASIC和ALWAYS,我们设定ALWAYS。
● 窗口数量(Number of windows)的值可以设定同样的触发条件下,连续多次的触发显示在不同的窗口中。当然了,窗口数量的增加,势必会使得单个窗口的采样深度变小。换句话说,所有窗口采样深度的总和不能大于总的采样深度。
● 单个窗口的数据采样深度(Window data depth),最大值等于我们的Set Up Debug里的设定。
● 触发信号在窗口中的位置(Trigger position in window),这里的值表示当信号触发后,触发信号在显示波形中的位置。
● 刷新率(Refresh rate),刷新率主要是针对连续触发的。
图 Settings窗口
Trigger Setup窗口用于添加触发信号并设定触发条件。如图所示,在界面左侧点击“+”号后,所有可用的触发信号出现在弹出的列表中。选择uut_axi_gp_top/AXI_GP0_awvalid信号作为触发条件,Compare Value中选择 == [B] R,表示触发条件是触发信号为上升沿(Rise)。
图 正在添加信号的Trigger Setup窗口
如图所示,点击Compare Value列的下拉三角符号,会弹出触发条件设定的对话框。
● 运算符(Operator)中可以选择符号“==”或者“!=”。
● 进制(Radix)中可以设定后面值(Value)的进制,可选项有二进制([B] Binary)、八进制([O] Octal)、十六进制([H] Hexadecimal)、有符号十进制([U] Unsigned Decimal)和无符号十进制([S] Signed Decimal)。
● 值(Value),即运算符后面的取值。可选项有0(逻辑0)、1(逻辑1)、X(任何值)、R(上升沿)、F(下降沿)、B(上升或下降沿)、N(没有变化)。
图 触发条件设置
如图所示,Waveform窗口显示弹出信号在触发条件满足后的波形。窗口左侧的小图标可以控制探测信号的添加、删减,波形采样的单次运行、连续运行、停止,波形的放大、缩小以及光标线的移动等。点击图示的Run trigger for this ILA core按钮则启动一次触发。
图 Waveform窗口
如图所示,此时Status一直处于Waiting for Trigger状态,等待触发条件的发生。
图 等待触发状态
触发条件发生时,如图所示,Status会依次经过Post-Trigger和Full状态并回到Idle状态。
图 触发完成返回Idle状态
如图所示,Waveform窗口中出现了一连串的AXI GP总线读写的波形。大家可以更具波形对照AXI协议进行分析。
图 触发波形
腾讯微云链接:https://share.weiyun.com/5s6bA0s
百度网盘链接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取码:ld9c