列出一个据我看不太常见的问题,只发生在我自己身上。

在vivado2023.1版本正常使用pcie Xdma ip,参数和引脚都配置正常,经petalinux做出来的系统开机卡在如图所示位置不动了。

排除了各种可能的故障原因:比如PCIe Block Location设置,GTH口选择,引脚也反复检查,都没有改善,还会让问题的现象有所变化,如下图所示,卡在nvme驱动尝试将盘挂载在系统这一步。

后续nvme驱动会触发自己的timeout,disable controller,使系统能开机,但nvme也不再能够使用,否则会报内核错误。

综上两个现象其实是一回事——pcie没有正常工作。其实vivado上pcie的ip已经很成熟,配置参数上的不同不会产生太大影响,那么只能是引脚和时钟的问题,引脚已经反复看过,时钟在ip配置里也没问题,后来是网上查找资料发现,综合里面的constraints wizard会提示一些警告。这里我就不具体展示了。

运行constraints wizard之后会给出时钟约束添加在xdc文件里,再进行制作系统那一套流程,pcie故障问题就解决了。

# ##############################加更#########################

后续在另一个板子上出现了同样开不开机的现象,并且constraints wizard并没有提示任何缺少时钟约束。但我是两个pcie ip核,综合时候会报一个xdma 0和xdma 1的GTH LOC冲突的critical warning。

[Vivado 12-2285] Cannot set LOC property of instance 'design_1_i/xdma_1/inst/pcie4_ip_i/inst/design_1_xdma_1_0_pcie4_ip_gt_top_i/diablo_gt.diablo_gt_phy_wrapper/gt_wizard.gtwizard_top_i/design_1_xdma_1_0_pcie4_ip_gt_i/inst/gen_gtwizard_gtye4_top.design_1_xdma_1_0_pcie4_ip_gt_gtwizard_gtye4_inst/gen_gtwizard_gtye4.gen_channel_container[4].gen_enabled_channel.gtye4_channel_wrapper_inst/channel_inst/gtye4_channel_gen.gen_gtye4_channel_inst[0].GTYE4_CHANNEL_PRIM_INST'... design_1_i/xdma_1/inst/pcie4_ip_i/inst/design_1_xdma_1_0_pcie4_ip_gt_top_i/diablo_gt.diablo_gt_phy_wrapper/gt_wizard.gtwizard_top_i/design_1_xdma_1_0_pcie4_ip_gt_i/inst/gen_gtwizard_gtye4_top.design_1_xdma_1_0_pcie4_ip_gt_gtwizard_gtye4_inst/gen_gtwizard_gtye4.gen_channel_container[4].gen_enabled_channel.gtye4_channel_wrapper_inst/channel_inst/gtye4_channel_gen.gen_gtye4_channel_inst[0].GTYE4_CHANNEL_PRIM_INST Instance design_1_i/xdma_1/inst/pcie4_ip_i/inst/design_1_xdma_1_0_pcie4_ip_gt_top_i/diablo_gt.diablo_gt_phy_wrapper/gt_wizard.gtwizard_top_i/design_1_xdma_1_0_pcie4_ip_gt_i/inst/gen_gtwizard_gtye4_top.design_1_xdma_1_0_pcie4_ip_gt_gtwizard_gtye4_inst/gen_gtwizard_gtye4.gen_channel_container[4].gen_enabled_channel.gtye4_channel_wrapper_inst/channel_inst/gtye4_channel_gen.gen_gtye4_channel_inst[0].GTYE4_CHANNEL_PRIM_INST can not be placed in GTYE4_CHANNEL of site GTYE4_CHANNEL_X0Y16 because the bel is occupied by design_1_i/xdma_0/inst/pcie4_ip_i/inst/design_1_xdma_0_0_pcie4_ip_gt_top_i/diablo_gt.diablo_gt_phy_wrapper/gt_wizard.gtwizard_top_i/design_1_xdma_0_0_pcie4_ip_gt_i/inst/gen_gtwizard_gtye4_top.design_1_xdma_0_0_pcie4_ip_gt_gtwizard_gtye4_inst/gen_gtwizard_gtye4.gen_channel_container[4].gen_enabled_channel.gtye4_channel_wrapper_inst/channel_inst/gtye4_channel_gen.gen_gtye4_channel_inst[0].GTYE4_CHANNEL_PRIM_INST. This could be caused by bel constraint conflict 

后面发现pcie ip核配置里面GT settings栏,有一个Disable GT channel LOC constraint选项(vivado 2023.1),用途是自动分配GT通道位置,因为我用到了两个相邻的GT通道,所以自动分配可能产生LOC冲突,需要把 Disable GT channel LOC constraint设置为true。综合后没有了critical warning,再上板测试开机正常。

############################加更#################################

如果上述方法都试过也没有改变,也可能是制作的linux内核出了问题。本人用petalinux重新对xsa文件生成image,就不会在开机卡住了。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐