MIG MCB意外的写行为

时间:2018-09-17 16:45:26

标签: verilog fpga xilinx spartan

因此,我最近安装了一个项目,该项目在设计中实现了生成的MCB。我之前从未调试过IP内核,因此您必须原谅我的解决方案很明显。我一直在解决这一问题一两天,但似乎无法解决。

首先,我已经阅读了几次UG388,UG406,UG416文档,并做了一些没有运气的研究。

据我了解的参数,我从配置1中获得了MCB设置:

    localparam C3_PORT_ENABLE             = 6'b111111;
    localparam C3_PORT_CONFIG             =  "B32_B32_R32_R32_R32_R32";
    localparam C3_P0_PORT_MODE             =  "BI_MODE";
    localparam C3_P1_PORT_MODE             =  "BI_MODE";
    localparam C3_P2_PORT_MODE             =  "RD_MODE";
    localparam C3_P3_PORT_MODE             =  "RD_MODE";
    localparam C3_P4_PORT_MODE             =  "RD_MODE";
    localparam C3_P5_PORT_MODE             =  "RD_MODE";

并设置为与DDR2内存接口。我不确定其他什么信息对这个问题很重要,但是如果您需要,我可以发布更多信息。 以下是一些我认为会有所帮助的附加参数:

localparam C3_NUM_DQ_PINS          = 16;
localparam C3_MEM_ADDR_WIDTH       = 13;
localparam C3_MEM_BANKADDR_WIDTH   = 3;
localparam C3_MEM_ADDR_ORDER       = "ROW_BANK_COLUMN";
localparam C3_P0_MASK_SIZE          = 4;
localparam C3_P0_DATA_PORT_SIZE     = 32;

此外,我应该提到设计仅使用单个端口(p0)。 在行为上,生成的MCB带有一个包含TB的Example_design,并且我成功运行了,没有任何错误。

现在,我正在尝试设置自己的tb来执行简单的读写操作。 我可以写入32位,也可以读取32位,但是问题是存储单元每次都按4-16位值的顺序读取。这意味着它写入的数据的一半是“ XXXX”,无法弄清楚如何用有意义的数据填充该空间。这是我的输出(最后几行显示了该问题,第一部分只是初始化的内容,可能会有所帮助):

ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 438401.0 ps WARNING: 200 us is required before CKE goes active.
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 460801.0 ps INFO: Precharge All
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 486401.0 ps INFO: Load Mode 2
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 486401.0 ps INFO: Load Mode 2 High Temperature Self Refresh rate = 1X (0C-85C)
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 499201.0 ps INFO: Load Mode 3
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 DLL Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 Output Drive Strength = Full
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 ODT Rtt = 50 Ohm
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 Additive Latency =           0
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 OCD Program = OCD Exit
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 DQS_N Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 RDQS Enable = Disabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 512001.0 ps INFO: Load Mode 1 Output Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 Burst Length =  4
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 Burst Order = Sequential
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 CAS Latency =           5
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 Test Mode = Normal
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 DLL Reset = Reset DLL
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 Write Recovery =           5
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 524801.0 ps INFO: Load Mode 0 Power Down Mode = Fast Exit
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 537601.0 ps INFO: Precharge All
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 563201.0 ps INFO: Refresh  
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 691201.0 ps INFO: Refresh  
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 Burst Length =  4
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 Burst Order = Sequential
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 CAS Latency =           5
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 Test Mode = Normal
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 DLL Reset = Normal
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 Write Recovery =           5
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 819201.0 ps INFO: Load Mode 0 Power Down Mode = Fast Exit
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 DLL Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 Output Drive Strength = Full
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 ODT Rtt = 50 Ohm
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 Additive Latency =           0
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 OCD Program = OCD Default
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 DQS_N Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 RDQS Enable = Disabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 832001.0 ps INFO: Load Mode 1 Output Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 DLL Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 Output Drive Strength = Full
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 ODT Rtt = 50 Ohm
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 Additive Latency =           0
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 OCD Program = OCD Exit
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 DQS_N Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 RDQS Enable = Disabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Load Mode 1 Output Enable = Enabled
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 844801.0 ps INFO: Initialization Sequence is complete
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 864001.0 ps INFO: Precharge All
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 1382401.0 ps INFO: Activate  bank 0 row 0000
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .cmd_task: at time 1395201.0 ps INFO: Write     bank 0 col 080, auto precharge 0
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .main: at time 1401601.0 ps INFO: Sync On Die Termination = 1
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .data_task: at time 1409601.0 ps INFO: WRITE @ DQS= bank = 0 row = 0000 col = 00000080 data = 5678
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .data_task: at time 1411201.0 ps INFO: WRITE @ DQS= bank = 0 row = 0000 col = 00000081 data = 1234
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .data_task: at time 1412801.0 ps INFO: WRITE @ DQS= bank = 0 row = 0000 col = 00000082 data = xxxx
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .data_task: at time 1414401.0 ps INFO: WRITE @ DQS= bank = 0 row = 0000 col = 00000083 data = xxxx
ReadWrite_MIG_tb.\MEM_INST3.u_mem_c3 .main: at time 1422401.0 ps INFO: Sync On Die Termination = 0

在将p0_cmd放入cmd FIFO时,p0_wr_count为3(以防万一,我在其中填充了一些额外的字符)。 example_design tb还会执行4次连续写入,但是它们不是“ XXXX”。

我一直在将波形与tb和UG388进行比较,似乎确实在正确地复制了波形,但是不确定是什么原因引起的。如何用数据填充“ XXXX”或阻止其写入多余的值?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

似乎在几天后重新启动计算机后,问题似乎已经解决。我不记得进行了任何重大更改,现在无法复制我先前描述的行为。

目前,我可以认为此问题已解决,但是如果发现任何新问题,我会进行更新。我以为这是微不足道的,但这是无法解释的。