下一篇文章很长,但是由于我已经有一个多月无法使SP605板与DDR3正确交互,因此希望这对在我遇到相同情况的其他人也很有用。我可以肯定的是一个简单的配置或概念性错误,但我很乐意尽快解决此问题。
===场景===
我创建了一个USB-UART接口来与FPGA通信并控制DDR3。使用ISE中的IP生成器,我生成了MIG包装器,然后设计了内存接口控制器。但是,我参考了手册ug388和ug416,但是我无法使DDR3发挥预期的作用。
===问题陈述===
通过读写命令的突发长度,我能够从DDR3取回数据,但是寻址方案似乎不正确,因为数据在地址0和1、2和3、4和5中重复等等。另外,例如,每当我写入地址0时,都不会改变。然后,当我写入地址1时,地址0和1都用我刚刚发送的数据值更新。由于这种耦合效应,我似乎正在“丢失”一半的存储空间。
=== DDR3 IP配置===
下面列出了使用IP生成器的DDR3的设置-考虑到SP605板的情况。总之,我激活了DDR3 Bank 3并将Port0配置为32位双向。
内存选择:
启用AXI界面:未选中
使用扩展的MCB性能范围:未选中
存储区3的内存类型:DDR3 SDRAM
bank 1的内存类型:无
C3的选项– DDR3 SDRAM
频率:400 MHz
内存部分:MTJ41J64M16XX-187E
C3 – DDR3 SDRAM的内存选项
输出驱动器阻抗控制:RZQ / 6
RTT(标称)– ODT:RZQ / 4
自动自我刷新:已启用
C3的端口配置– DDR3 SDRAM
两个32位双向和四个32位单向端口
端口0:选中
端口1:未选中
Port2:未选中
端口3:未选中
Port4:未选中
端口5:未选中
内存地址映射选择:行库列
C3的FPGA选项– DDR3 SDRAM
内存接口引脚端接:校准的输入端接
选择RZQ引脚位置:R7
选择ZIO引脚位置:W4
内存控制器的调试信号:禁用
系统时钟:差分
===数据结构===
我从Matlab发送了一个64位命令,该命令应根据此命令中提供的地址和数据写入或读取DDR3。
wire [00:00] cmd_instruction = usb_data[63:63]; // ‘0’ = write; ‘1’ = read
wire [27:00] cmd_address = usb_data[62:37]; // 26-bit address
wire [31:00] cmd_data …
Run Code Online (Sandbox Code Playgroud)