【发布时间】:2018-09-17 16:45:25
【问题描述】:
所以我最近继承了一个在设计中实现了生成的 MCB 的项目。我以前从未调试过 IP 内核,所以您必须原谅我,我的问题的解决方案是显而易见的。我已经解决这个问题一两天了,但似乎无法弄清楚。
首先,我已经阅读了几遍文档 UG388、UG406、UG416,并做了一些研究,但没有运气。
据我了解,MCB 是在配置 1 中设置的:
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”或阻止它写入额外的值?
任何帮助将不胜感激!
【问题讨论】:
标签: verilog fpga xilinx spartan