[Xilinx] Vivado使用mig IP核时报错误[Opt31-67]解决过程

1nnocent   2026-1-14 10:47 楼主

    起因是项目的板子还没有回来需要使用一块开发板来验证功能,其中有使用到DDR,项目只使用了一片16bit位宽的DDR,手上现有的开发板为两片DDR芯片组成位宽为32bit。使用官方例程将32bit位宽改成16bit,编译时出现Implement failed错误。

image.png  

    错误信息如下:[Opt 31-67] Problem: A LUT5 cell in the design is missing a connection on input pin I2, which is used by the LUT equation. This pin has either been left unconnected in the design or the connection was removed due to the trimming of unused logic. The LUT cell name is: u_mig_7series_0/u_mig_7series_0_mig/u_memc_ui_top_std/mem_intfc0/mc0/rank_mach0/rank_common0/refresh_generation.refresh_bank_r[0]_i_1.
错误中提到有一个LUT5的pin脚I2没有输入。

    网上找到的方法是在synthesis下的schematic中使用select_opjects Tcl命令找到没有连接的信号来排查问题,这里也尝试了下该方法:

1、打开原理图

image.png  

2、输入Tcl命令

image.png  

3、在Cell Properties窗口找到Cell Pins,点击出现问题的I2输入pin脚后原理图中相应的信号就会高亮,但是操作下来发现并没有高亮信号出现。网上找的的这个方法是用户写的逻辑模块,我这个问题是官方的IP核相关,可能是因为这个原因没有高亮。

image.png

4、虽然上述方法没有解决问题,但是至少确定是因为某个信号没有输入 引起的。所以在top文件中找到例化mig IP核的地方检查是否有信号没有输入。最终找到确实有三个信号没有输入,分别为app_sr_req、app_ref_req、app_zq_req,其中app_ref_req信号是DDR自动刷新的信号,报错的信息中refresh_bank_r也有提到。于是将这三个信号全部输入固定值1‘b’0。

image.png  

5、上述三个信号赋值后编译通过,例程的功能也能正常运行,可以继续验证项目的后续内容。

image.png  

image.png  

    开发板的例程按理说都是验证过的,虽然自己有将32bit的DDR改成16bit,但是并没有改动这里的三个信号,开发板例程的bitstream烧录到开发板验证是正常的,说明三个信号不输入应该没没有什么问题,唯一的区别就是使用的Vivado版本不一样,我使用的是2023.2版本。后续有时间再验证下是否为版本差别引起的问题。

本帖最后由 1nnocent 于 2026-1-15 17:29 编辑

回复评论 (1)

谢谢分享解决经验

点赞  2026-1-17 13:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复