目录
2.更新.dat文件无效,readmemb仿真正常,上板总为旧值
2.重新设置后生成MIG IP报错:the nested sub-design....
1.vivado BD 报错 FREQ_HZ does not match
1.badly-structured..... cannot be decrypted
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一下就出来了)