vivado_debug

debug状态下无法抓取数据

d2d7a5a8d7ea4b39878b1ba7dbb2f79f

dbg_hub >= ila时钟 > jtag时钟

image-20250408135954229

dbg_hub时钟

1
2
3
4
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 clk_axi]

ila时钟

​ 一个单独的时钟域clock domain对应着一个ILA实例化模块,当有多个时钟域的时候每个时钟域都会对应着一个单独的ILA实例化模块

​ 若 ILA 的采样时钟频率不足(如低于数据速率),无法满足奈奎斯特采样定理,导致采样失败。

jtag时钟

img

img

设置信号抓取标记

将需要测试的端口前标记上(mark_debug = “1”)或者(mark_debug = “true”)

注意:这里最好将需要测试的端口信号打一拍再进行测试,因为输入输出端口的驱动单元类型往往是不一样的,比如两个红框之间的rgmii_txd信号它的驱动单元类型就是ODDR,这将影响布线到此处的逻辑分析仪ila的探针的连接,具体的我也不清楚应该是驱动能力不匹配之类的,反正最好实现的时候会报错。如果不打拍则在后续设置setup debug的时候就要注意去除不符合驱动类型的信号。

Idelay到IDDR走的是IOB里的专用走线,不能用ILA查看的。

我们现在实例化一个叫 inout spi_io[0]的双向口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IBUF_LOW_PWR(“TRUE”), // Low Power - “TRUE”, High Performance = “FALSE”
.IOSTANDARD(“DEFAULT”), // Specify the I/O standard
.SLEW(“SLOW”) // Specify the output slew rate
) IOBUF_inst_io0 (
.O(s_din[0]), // IO_pad输入。管脚经过IBUF缓冲输出到内部信号
.IO(spi_io[0]), // pad接口/管脚
.I(s_dout[0]), // 输出到IO_pad。内部信号经过OBUF缓冲到管脚
.T(x_writ_read) // 当IO_pad需要输入的时候,使能OBUF使其输出高组态。
);

IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IBUF_LOW_PWR("TRUE"), // Low Power - "TRUE", High Performance = "FALSE"
.IOSTANDARD("DEFAULT"), // Specify the I/O standard
.SLEW("SLOW") // Specify the output slew rate
) IOBUF_inst (
.O(sda_i), // Buffer output(user input)
.IO(iic_sda), // Buffer inout port (connect directly to top-level port)
.I(sda_o), // Buffer input(user output)
.T(sda_o) // 3-state enable input, high=input, low=output
);


注:sda_o拉高就是设置为输入,总线空闲的意思

All Xilinx I/O pins are bidirectional input/outputs. If you use an
IOBUF (bidirectional output buffer), you can take the output of the
ODDR to put it on the output portion of the buffer and use the input
portion of the buffer to read it back into the FPGA fabric. I’m not
sure any synthesis tools will take a seperately instantiated IBUF and
turn it into an IOBUF, but I have no inclination to try.

That said, again, Symon is right. You most likely don’t want to or
need to do this.


vivado_debug
http://witbit.cn/FPGA/vivado_debug.html
作者
朝彻
发布于
2025年2月13日
许可协议