发现问题的版本 MIG 7 系列 1.8
解决问题的版本: 敬请参见 (Xilinx 答复 45195)
用户设计顶层有一个已知的问题,即在 ECC 逻辑启用时,发出的 read-modify-write 操作指令会让控制器冻结。这个问题的故障特征是能正确执行初始读取操作,但随后的写入操作却无法进行。相反,控制器通过对 app_rd_data_valid 进行断言,意外地在 UI 接口上返回读取数据。此后不久,控制器挂起,会观察到 app_rdy signal 永久无效。
其原因在于两个 ECC 参数(MC_ERR_ADDR_WIDTH 和 ECC_WIDTH)在用户设计顶层中定义不正确。这两个参数在顶层用户设计中为静态设置,而对某些配置而言设置不正确,这就会导致上述行为。这两个参数应为动态设置,类似于以下做法:example_design.v/.vhd.要解决这个问题,请用以下方程替换顶层用户设计中的 MC_ERR_ADDR_WIDTH 和 ECC_WIDTH 参数定义:
localparam C0_MC_ERR_ADDR_WIDTH = ((C0_CS_WIDTH == 1) ?0 : C0_RANK_WIDTH)
+ C0_BANK_WIDTH + C0_ROW_WIDTH + C0_COL_WIDTH
+ C0_DATA_BUF_OFFSET_WIDTH;
localparam C0_ECC_WIDTH = (C0_ECC == "OFF")?
0 : (C0_DATA_WIDTH <= 4)?
4 : (C0_DATA_WIDTH <= 10)?
5 : (C0_DATA_WIDTH <= 26)?
6 : (C0_DATA_WIDTH <= 57)?
7 : (C0_DATA_WIDTH <= 120)?
8 : (C0_DATA_WIDTH <= 247)?
9 : 10;
注意:在多控制器设计中,C0 需要对应于存储器控制器的数字(即 C0、C1、C2等)。
修订历史记录
03/05/2013——初始版本