GPU-IO板调试记录

目录

2024.1.30

使用data gen发送的数据目前可以写入ddr

2024.1.31

1.遇到一次下载找不到ILA:

2.更新.dat文件无效,readmemb仿真正常,上板总为旧值

2024.2.1

1.place报错Sub-optimal.....

2.重新设置后生成MIG IP报错:the nested sub-design....

3.GTH和GTX文件差别

4.PLL报错

2024.2.5

1.vivado BD 报错 FREQ_HZ does not match

2.疑似AGX过来的V7 PCIE时钟没有

2024.2.6

1.linux和windows vivado编译速度比较

2.ubuntu下vivado安装驱动后认不出JTAG

3.PCIE不识别:调试

4.添加多个MIG后报地址32位不匹配错误

5.DDR16G:调试

2024.2.7

1.unroutable placement error

2024.2.22

1.badly-structured..... cannot be decrypted

2.烧写V7报错


2024.1.30

使用data gen发送的数据目前可以写入ddr

2024.1.31

1.遇到一次下载找不到ILA:

重新下载依旧,重新上电IO板后正常。

2.更新.dat文件无效,readmemb仿真正常,上板总为旧值

怀疑是因为.dat文件名没变,没有重新综合这块,更改文件名再试 ->

仍然不行

无奈换成coe实现,使用分布式rom,正常:

2024.2.1

1.place报错Sub-optimal.....

按照提示,可以:

2.重新设置后生成MIG IP报错:the nested sub-design....

reset 整个BD的output之后,可以生成IP不报错。删掉了入口的PLL,使MIG直接与外部晶振连接。之后重启电脑(电脑的问题)后正常生产bit文件。

3.GTH和GTX文件差别

移植时除了重新新建wizard IP核以外,还要换example design的support文件夹下的common文件。

4.PLL报错

报错内容:[DRC REQP-1712] Input clock driver: Unsupported PLLE2_ADV connectivity. The signal U_gpu_power/u_clk/inst/clk_in1 on the U_gpu_power/u_clk/inst/plle2_adv_inst/CLKIN1 pin of U_gpu_power/u_clk/inst/plle2_adv_inst with COMPENSATION mode ZHOLD must be driven by a clock capable IO.

原因:PLL中输入时钟为差分转单端,PLL clkin需要选为Global buffer。

2024.2.5

1.vivado BD 报错 FREQ_HZ does not match

这里报的是port的频率不匹配,所以把clk的port属性中的频率改为一致(原来是100M改为125M)就好了。

2.疑似AGX过来的V7 PCIE时钟没有

用该时钟的ILA触发时显示:

2024.2.6

1.linux和windows vivado编译速度比较

windows:

linux:

同样的工程,linux比windows快了大约一倍。

2.ubuntu下vivado安装驱动后认不出JTAG

关闭vivado拔出JTAG再安装就好了

3.PCIE不识别:调试

去掉了tx的约束,从IO plainning中看到其实会自动分配,只要约束时钟就行了。仍然不识别

观察pcie_rst信号,有,当GPUrebind时会复位。

观察clkreq,为低,正常。

考虑之前pcie ref clk为100M的时候,看的一直是AGX1(实际上应该看AGX2)。等到知道看AGX2时时钟改为了125MHz。尝试将125改回100。

改回100MHz就好了。

4.添加多个MIG后报地址32位不匹配错误

添加多个MIG后AXI地址自动变为64位,并且可以在address editor里设置超过4G的MIG地址。

相应的也需要设置其它访问MIG的地址:

将uiFDMA的地址设置成和下面一样之后,错误消失。

5.DDR16G:调试

访问第一组DDR4G:

读也正常:

读时burst长度为32,每次64Byte,一次正常2048Byte。

访问第二组DDR4G:

读数也正确:

2024.2.7

1.unroutable placement error

当我把IO板的DDR从2个增加为4个时,报错:

这篇提到了这个问题,但没有解决:AMD Customer Community

( 另外这个帖子提到了他在txoutclk后面加了BUFG,这显然也是一个解决方法,但是怎么在IP核内部的信号上加BUFG呢?:AMD Customer Community

其中提到了一个看clock region的方法:

get_property CLOCK_REGION [get_sites GTXE2_CHANNEL_X0Y4 ]

于是我查看错误信息里的两个模块,确实不在同一个时钟区域:

可以看到X1Y2是我PCIE的clk pin所在的时钟区域:

而这个区域的两个MMCM(白色高亮)都被DDR占用了(DDR有C0C1C2C3四组,其中C2也在这个区域):

尝试使X1Y2的一个MMCM unplace,然后把XDMA的MMCM拖过来:

*MMCM的路径是通过报错里的路径知道的:isnt_BD_Top/xdma_0/inst/pcie3_ip_i/inst/gt_top_i/pipe_wrapper_i/pipe_clock_int.pipe_clock_i/mmcm_i (MMCME2_ADV.CLKIN1),按照这个路径可以在综合后的netlist找到这个模块。

保存之后自动在xdc添加了约束:

这样之后在place的阶段确实不再报错了。但是DDR离远了没关系吗?

之后在write_bitstream阶段报错如下这条约束,说并没有走backbone:

于是屏蔽这条约束重新编译。

又报了之前的错:unroutable placement error,仍然说XDMA的GT和MMCM的问题。

打开综合可以看到warning:

最后暂时用报错建议的方法,走次优路线,先规避错误。编译成功。

测试,第1/3/4片DDR访问正常:

第二片DDR访问会卡死,看ILA AW一直不ready。

查ucf发现第二片的odt写错了,改正后重新编译。

测试,第二片好了,第一片又不行了,三四片仍然好。

看时序报告,MIG的第一片DDR部分有时序违例:

大概是DDR资源用多了之后,200MHz的时钟太快了,需求5ns但是只能到7.5ns,由此看如果是100MHz的10ns肯定可以满足。

于是将MIG的4个DDR频率改为400MHz,仍然4:1,用户时钟则变为100MHz。

布线后的时序报告可以看到只剩ILA的违例了:

上板测试,4个DDR都可以正常访问:

写DDR

读DDR

2024.2.22

1.badly-structured..... cannot be decrypted

在增加了一些ILA后,之前一个用的好好的ILA报错badly-structured....,reset ILA或者将其它的也改成global都无济于事,暂时删除,编译通过。很奇怪。

2.烧写V7报错

重启电脑之后不报这个错了,但仍然不加载ILA,说XDMA的ILA没认出来,可能是GPU那边没给时钟,先去掉这个ILA。

之后又报MIG的ILA:

实际上删ILA没用,会一直报,只要把AURORA的ILA删了就不报了,怀疑是128位太宽了。最终精简成:

可以跑起ILA。(但第一次烧录时还是报错了,refresh一下就出来了)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值