在FPGA上实现轻量级的AXI-4接口的DDR3控制器开源代码-FPGA开源项目社区-FPGA CPLD-ChipDebug

在FPGA上实现轻量级的AXI-4接口的DDR3控制器开源代码

该帖子部分内容已隐藏
付费阅读
已售 4
30积分
此内容为付费阅读,请付费后查看

该 IP 是 Verilog 中的紧凑型 DDR3 内存控制器,针对 FPGA 项目,其中内存所需的带宽低于 DDR3 DRAM 可以提供的带宽,并且简单性和 LUT 使用比最大化 DDR 性能更重要。
它目前支持 Xilinx 7 系列(Artix、Kintex)和 Lattice ECP5 FPGA,但以后可能会添加其他 FPGA 特定的 DFI 兼容 PHY。

该项目的想法是在比 DDR 部分支持的最大时钟频率低得多的时钟频率下运行 DDR3,通过为总线接口提供更多余量和容差来降低 DDR3 控制器所需的复杂性。
这对于一些 FPGA 项目是有意义的,在这些项目中,结构速度是设计中的限制因素,而不是外部 DDR 存储器接口速度,并且通常可以使用 SDR DRAM 但没有使用(出于可用性、容量、每比特成本)。

DDR3 具有非常高的信号传输速率,为了使其可靠工作,它增加了复杂性,例如:

  • 读/写均衡
  • ZQ校准

在正常运行模式(DLL-on 模式)下,DDR3 具有最低时钟频率(300MHz+)。但是,可以关闭 DDR3 DLL(在大多数 DRAM 部件中)并以 <= 125MHz 的频率运行。

DLL-off 模式(此内存控制器使用)被列为 DDR3 部件实现的可选功能,但似乎流行的 DDR3 部件确实实现了它(并且测试证明它运行良好)!

设计目标
  • 以降低的 DDR 时钟速度 (< 125MHz) 运行,以降低 DDR3 PHY 的复杂性,简化时序收敛,减少设计 LUT 的使用。
  • 支持多个 FPGA 供应商/工具链。
  • 实现高性能(时钟速度)顺序读/写性能。
  • 支持具有突发功能的 AXI-4 目标端口。
  • 比商业 DDR3 内核(例如 Xilinx MIG)小得多(使用更少的 FPGA LUT)。
  • 开源,免费使用,免费修改。
特征
  • 支持 INCR 突发的 32 位 AXI-4 目标端口。
  • 最多支持 8 个打开的行,允许在打开的行内进行背靠背读/写突发。
  • 内存控制器内核和 PHY 之间的标准化 DFI 接口。
  • 物理层:Xilinx 7 系列,莱迪思 ECP5
性能/面积

顺序突发访问的性能很好,因为相同类型的突发 – 读取或写入,将被流水线化到已经打开的行。
目前,没有读/写重新排序/合并的功能,因此随机读/写性能不会是最佳的(这可能会在未来的版本中得到解决)。

在以 100MHz(最大 400MBytes/s 可用带宽)运行的 Digilent Arty A7 上,执行顺序读/写;c740a08a49212036

至于面积,在 Xilinx Artix 7 (XC7A35T) 上,核心使用的面积(加上一个小型 UART 转 AXI-4 桥接器);
6f5ddd6d79212049

应该注意的是,使用 Xilinx MIG DDR3 控制器的同一项目占用了 33% 的 FPGA LUT(而使用此内核则为 9%)。

测试

在仿真下验证,然后在以下 FPGA 板上进行练习;

  • Digilent Arty A7 (Xilinx Artix + MT41K128M16JT-125)
  • LambaConcept ECPIX-5 (莱迪思 ECP5 + MT41K256M16RE-125)

性能和错误检查是使用这个RAM Tester完成的。
这些主板还可以使用此 DDR 内核可靠地启动 Linux,同时由于对 DDR 的视频帧缓冲区访问而受到压力。

未来的工作

弱点/改进领域;

  • ECP5 PHY 是次优的 – 依赖于将读取数据捕获与内部时钟对齐,而不是在 DQS 输入上捕获。这在测试的板/时钟速度上可靠地工作,但确实可以修复!
  • 支持 AXI-4 WRAP 突发 – 这些通常与执行关键字优先提取的缓存控制器一起使用。
  • 在核心前端添加可选的 DDR 调度程序逻辑,以提高读/写抖动性能(重新排序和合并)。
  • PHY 模块具有可调延迟,如果在启动时自动调整这些延迟以简化集成工作(尽管这会增加 LUT 的使用),那将是一件好事。

下载地址:

请登录后发表评论