文章目录
一、引言
本次调试使用的主要硬件是ZYNQ7035+AD9268。
Vivado硬件调试手段有:ILA(集成逻辑分析器Integrated Logic Analyzer)、VIO(虚拟I/O Virtual Input/Output)、Jtag-to-AXI等,本次调试使用了ILA。ILA的引入方式有两种,一种是添加ILA_IP,一种是标记Debug mark。Debug mark又可以分为在Verilog代码中添加调试端口和在Block Design中添加debug端口。
我使用了ILA抓取ADC输入的16位并行数据,用Debug mark标记自定义IP核的AXIS总线输出数据,同时在这个自定义IP内部使用了
(* MARK_DEBUG="true" *)input[15:0] adc_data
对ADC在DCO时钟下的PL内部采样数据进行了监控。
系统的Block Design如下图 :
二、调试步骤
1.添加调试端口
在block design设计完系统硬件后,点击想要抓取波形的网络,右击选择mark debug,此时网络两端会显示一个Debug标识如下图:
另外一种方法:直接添加ILA ip,设置好抓取波形的个数与每组波形的位宽,连接自己想要观测的总线,在这里我抓取的波形是一组16位的ADC输入。如下图:
设置采样点数:
设置输入位数:
随后在ZYNQ中开启ILA触发控制通道:将Zynq_TRIGGER_IN_0连接到TRIG_OUT,Zynq_TRIGGER_OUT_0连接到TRIG_IN:
选择CPU0:
2.对工程进行综合
对工程进行综合,综合完成后在Set Up Debug中查看综合结果,可以看到下面的debug窗口中有未连接的Debug nets,点击Set up Debug并进行相关配置(主要是时钟域的设定),完成Debug nets的连接。完成后如下图所示:
为端口设定时钟域:
设置mark debug调用的ILA的采样个数:
创建ILA-DEBUG核:
创建完成后的综合逻辑图:
3.生成新的XDC约束
保存刚刚的综合工程,此时系统会重新生成约束文件 ,选择OK:
更新XDC约束文件,打开约束文件进行Reload即可:
更新后的部分XDC文件(更换检测端口时记得先删除这些约束,否则布线可能不通过):
然后生成bitstream并将硬件导入SDK,运行SDK。由于需要使用PS端的时钟来接入ILA,所以要在SDK中将比特流进行下载,而不要在vivado中下载比特流。
4.在SDK中新建自己的调试应用程序
参照自己的应用进行程序的编写~
5.进行SDK与PL的联合调试
将程序写入FPGA后在Vivado中连接目标板(可以在SDK切换到Debug界面,进行单步调试),然后回到VIVADO选择Open Target进入硬件调试界面:
1.ILA的采样设置
window data depth其实就是波形的分辨率,trigger position in window就是数据的触发在波形中显示的起始位置,设置了触发后才会有作用。由于前面设置了最大采样个数为1024,所以这里最多采样1024个数:
2.触发设置窗口,可以设置触发信号,以及触发方式(上升沿、下降沿)等等:
若在SDK中的代码执行过程中FPGA有时序变化,且时序是相关的,比如说我的使用DMA进行读操作,当TVALID有上升沿的时候执行,对读目标地址数据。这时候如果设置了触发信号为TVALID,系统的时序显示就会随着TVALID进行动作,且在触发位置处进行改变。
这个功能服务于总线的时序分析。ILA2中检测了AXI总线,我们就可以看到相关时序图。ILA1只是对一个寄存器进行了监视,只能看到它的值的变化而已。如果没有设置触发条件,AXIS总线的输出的TDATA就会为一个静态的定值。