如何设计自定义ip(axi兼容)读写DDR(在Xilinx Vivado中)

How to design a custom ip (axi compatible) to read and write from DDR (in Xilinx Vivado)

我有一个使用 Microblaze 和 MIG 的设计,它通过 xsct 测试从 2GB DDR3 RAM 读取和写入。

我想设计一个自定义 IP,它将通过 xsct 接收命令(用于从内存中读取和写入块)并根据命令写入 RAM。

示例:命令会要求自定义 ip 从特定地址进行块读取(比如从 128 个位置)。

我曾尝试阅读 Xilinx 论坛中用于与 DRAM 交互的自定义​​ IP。 (但无法找到此特定任务的解决方案)

疑惑

  1. 是否需要 Microblaze 或任何处理器来实现此 objective?
  2. 我如何设计我的自定义 IP(因为我不明白 Microblaze 如何与 MIG 通信)。我在哪里可以读到它?还是为了这个目的甚至有必要?

谢谢:)

如果您对电子学、时序、设置约束、延迟线、自动时序校准和异步设计了解很多,您可以设计自己的 DDR 接口。如果不是:不要尝试!

我在那里工作的 DRR 界面总是交给拥有 15 年以上设计经验的最资深设计师,幸运的是我从来没有设计过一个界面(也许是因为管理层认为我无法胜任如此复杂的工作:-)

当我读到你想要的内容时:

A command would ask the custom ip to do a block read (say from 128 locations) from a particular address.

您可以使用带 AXI 接口的标准 DDR3 IP 块。 AXI 总线有点面向命令,最新版本支持块读取或写入 1 到 256 个位置之间的任何内容。总线通常为 32 位甚至 64 位宽,因此每个读取命令返回 1K 或 2K 字节的块。

不,您不需要处理器。您可以制作一个 AXI DMA 引擎来发出读取或写入。不过,您需要阅读有关 AXI 的内容。该规范是免费提供的,但要注意该协议是恶魔般的。它 看起来 容易,但事实并非如此!问题在于独立工作的地址和数据总线的细节。

至于复杂性:
我查找了我设计的 AXI ping-pong read DMA FSM。它大约有 130 行代码。 (包括应有的大量评论!)