Vivado ILA观察信号和调试过程

先简单介绍一下ILA(Integrated Logic Analyzer)生成方法。这里有两种办法完成Debug Core的配置和实现。

方法一、mark_debug综合选项+Set Up Debug设定ILA参数。

1、在信号(reg或者wire)声明处加mark_debug选项,方法如下:

// spi_mosi信号标记为需要ILA观测的信号
(* MARK_DEBUG = “TRUE” *) wire spi_mosi;

mark_debug用法的详细说明请看Xilinx文档UG901_Synthesis

2、综合,进行Run Synthesis

3、Open Synthesized Design,打开Set Up Debug,如图:

4、为ILA Debug Core添加需要观测的信号,结果如图:

每一个信号都要指定一个采样时钟域(Clock Domain)。

关于添加方法,还可以在Netlist窗口拖动信号到这个列表内。

注意到Netlist中有些信号名称前面有了绿色的小蜘蛛(小星星) ,正是Verilog程序中进行mark_debug的信号:

5、在Set Up Debug中设定信号采样收集的深度(Sample of data depth),输入流水级别数(Input pipe stages),Capture control和Advanced trigger选项。

6、完成ILA配置,保存Debug Setup,Run Implementation

说明:

完成了Debug Setup以后重新进行Implementation,XDC文件中被附加上了配置debug Core的XDC语句,例如:

# 下面这句创建一个新的调试核,名称u_ila_0
create_debug_core u_ila_0 ila
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_0]
set_property C_ADV_TRIGGER true [get_debug_cores u_ila_0]
set_property C_DATA_DEPTH 8192 [get_debug_cores u_ila_0]
set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_0]
set_property C_INPUT_PIPE_STAGES 3 [get_debug_cores u_ila_0]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
# 下面这句为u_ila_0调试核设定端口clk的宽度为1
set_property port_width 1 [get_debug_ports u_ila_0/clk]
# 下面这句为u_ila_0调试核设定采样时钟信号(clk)为sys_sam_clk
connect_debug_port u_ila_0/clk [get_nets [list sys_pll_01/inst/sys_sam_clk]]
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
set_property port_width 21 [get_debug_ports u_ila_0/probe0]
# 下面这句为u_ila_0调试核连接待观测信号corr_i_quant
connect_debug_port u_ila_0/probe0 [get_nets [list {corr_i_quant[0]} {corr_i_quant[1]} {corr_i_quant[2]} {corr_i_quant[3]} {corr_i_quant[4]} {corr_i_quant[5]} {corr_i_quant[6]} {corr_i_quant[7]} {corr_i_quant[8]} {corr_i_quant[9]} {corr_i_quant[10]} {corr_i_quant[11]} {corr_i_quant[12]} {corr_i_quant[13]} {corr_i_quant[14]} {corr_i_quant[15]} {corr_i_quant[16]} {corr_i_quant[17]} {corr_i_quant[18]} {corr_i_quant[19]} {corr_i_quant[20]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
set_property port_width 12 [get_debug_ports u_ila_0/probe1]
connect_debug_port u_ila_0/probe1 [get_nets [list {rdq[0]} {rdq[1]} {rdq[2]} {rdq[3]} {rdq[4]} {rdq[5]} {rdq[6]} {rdq[7]} {rdq[8]} {rdq[9]} {rdq[10]} {rdq[11]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
set_property port_width 12 [get_debug_ports u_ila_0/probe2]
connect_debug_port u_ila_0/probe2 [get_nets [list {rdi[0]} {rdi[1]} {rdi[2]} {rdi[3]} {rdi[4]} {rdi[5]} {rdi[6]} {rdi[7]} {rdi[8]} {rdi[9]} {rdi[10]} {rdi[11]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
set_property port_width 12 [get_debug_ports u_ila_0/probe3]
connect_debug_port u_ila_0/probe3 [get_nets [list {tdi[0]} {tdi[1]} {tdi[2]} {tdi[3]} {tdi[4]} {tdi[5]} {tdi[6]} {tdi[7]} {tdi[8]} {tdi[9]} {tdi[10]} {tdi[11]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
set_property port_width 12 [get_debug_ports u_ila_0/probe4]
connect_debug_port u_ila_0/probe4 [get_nets [list {tdq[0]} {tdq[1]} {tdq[2]} {tdq[3]} {tdq[4]} {tdq[5]} {tdq[6]} {tdq[7]} {tdq[8]} {tdq[9]} {tdq[10]} {tdq[11]}]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
set_property port_width 1 [get_debug_ports u_ila_0/probe5]
connect_debug_port u_ila_0/probe5 [get_nets [list bb_sam_clk_5]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
set_property port_width 1 [get_debug_ports u_ila_0/probe6]
connect_debug_port u_ila_0/probe6 [get_nets [list AD_SPI_MOSI_OBUF]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
set_property port_width 1 [get_debug_ports u_ila_0/probe7]
connect_debug_port u_ila_0/probe7 [get_nets [list AD_SPI_CLK_OBUF]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
set_property port_width 1 [get_debug_ports u_ila_0/probe8]
connect_debug_port u_ila_0/probe8 [get_nets [list AD_SPI_EN_B_OBUF]]
create_debug_port u_ila_0 probe
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
set_property port_width 1 [get_debug_ports u_ila_0/probe9]
connect_debug_port u_ila_0/probe9 [get_nets [list AD_SPI_MISO_IBUF]]
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
connect_debug_port dbg_hub/clk [get_nets sys_ref_clk_BUFG]

方法二、HDL文件中例化ILA IP Core。

在IP Catalog中添加ILA核,基本的参数有:需要观测的信号个数(Number of Probes),采集深度(Sample data depth)和各个信号探头(Probe)的位宽。

调试时需要在Debug Probes 里面增加信号到波形窗口中!

原文地址:https://www.cnblogs.com/YangGuangPu/p/11549249.html

时间: 2024-08-02 01:39:44

Vivado ILA观察信号和调试过程的相关文章

Android APP 调试过程中遇到的问题。

调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Android APP 调试过程中遇到的问题. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007192169/AndroidAPP调试过程中遇到的问题.html

MTK6572横屏调试过程

剧情设定:系统为MTK默认的系统源码,Phone模式,底部有三个虚拟按键.需求为,设置成默认横屏,设定一个合理的虚拟按键方案. ---------------------------------------------------------------------------------------------------- 1.      横屏 修改转屏的角度为0,所以从效果看,旋转270是逆时针的.需要后续解决的问题:Uboot.Kernel.开关机动画需要替换成横屏的资源. 2.    

调试过程出现的错误汇总

程序调试过程中的错误意义: a.obj : error LNK2001: unresolved external symbol _print//未解决的外部符号_print即,printf少了个f啊.类似错误提示要看得懂.

追求卓越 - 整合调试过程

当前开发人员.测试人员.工程人员,在开发过程.部署过程.维护过程中需要花费大量时间调试,可能是项目一半以上的时间,调试过程就是运行程序.发现问题.定位问题.反馈问题.修改问题.提交更新的循环,运行程序和发现问题可以通过提高自动化测试的程度提高效率,反馈问题和提交更新可以通过打通网络并选择高效的项目管理中的缺陷管理模块提高效率,在这里主要讨论定位问题,在现在的通信系统中,通常一个业务的执行涉及多个硬件设备,一个硬件设备又可能涉及多个软件,一个软件又涉及多个逻辑模块,很多时候要准确定位一个问题需要从

关于VC++调试过程中的leak internal to Visual Leak Detector问题

此前,我记录一下小文,见http://blog.itpub.net/14466241/viewspace-749710/. 文章中简单记录了使用Visual Leak Detector软件侦探VC++开发中的内存漏洞问题. 但是,现在调试过程中经常出现如下提示: 网络搜索发现,这应该是Visual Leak Detector软件当前版本存在的一个BUG.现在的我编写的程序是不存在内漏的. 参考文章: http://vld.codeplex.com/discussions/280893

Android Studio 调试过程中快捷查看断点处变量值(Ctrl+Shift+I无效)?

当你在做Keymap到Eclipse后,在debug过程中,在Eclipse中我们很喜欢用Ctrl+Shift+I去查看一个运算或者调用的结果,这样用起来很方便.但是keymap到Eclipse后,你会发现这个快捷键不能使了.啥原因呢,原因我们一个个排除: 1.是否快捷键映射失败, 2.映射成功了,你看了快捷键也发现是正常的,那就再查看是否快捷键冲突. 3.如何是快捷键冲突,那解决快捷键冲突,正常来说解决了冲突后,快捷键是能正常使用的,但是你会发现即使你解决了冲突,Ctrl+Shift+I还是不

关于cefglue调试过程中打不开网页的问题

问题描述 cefglue在直接点击vs中的直接运行不调试的时候可以打开网页,但是调试过程中无法打开网页. 解决方法: 去掉工程属性中的启用visual studio承载进程 前面的勾就可以了打开网页

0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。

arm调试过程,如果抛一个SIGSEGV,地址在 0xe7f001f0 附近,原因居然是因为我在调试.当我使用n指令跳到下一行代码时,往往变成了continue指令一样地执行.还不确定地抛出SIGSEGV(addr:0xe7f00XXX),使用程序直接崩溃不能继续调试下去.查看寄存器发现的确有某个rN的寄存器被诡异地修改了.多次归纳后发现,都在调用虚函数时抛出SIGSEGV(addr:0xe7f00XXX),不论何处何种逻辑下,这个被神修改的寄存器的值都是0xe7f00XXX,在反编译逻辑中是要

关于在adb调试过程中常用的用法及adb命令

本篇主要讲解一下几种关于我们在调试过程中常用的几个adb命令及用法,adb连接的具体过程这里就不再多讲 关于怎么通过adb命令连接手机进行调试请参考 如何通过PC端连接Android设备进行adb调试 首先必须确保你正确配置了AndroidSDK(不然这里是直接打不开的,需要进入到SDK-platform-tools路径下进行adb命令),话不多说,看图 1) adb devices ( 用于查看当前adb连接的设备有哪些,这里目前是无) 2) adb connect IP地址 (用于连接And