news 2026/8/14 2:56:43

FPGA(十一)DataMover 自编辑IP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA(十一)DataMover 自编辑IP

DataMover 自编辑IP说明

根据之前我所上传的博客FPGA(十)DataMover IP核,发现用这个的挺多。我自己在做项目的过程中,用ZYNQ提供的IP核,会出现奇奇怪怪的bug,自己还没办法调。于是写了代码去替代IP。考虑到不同的使用场景,输入数据可以是8bit,也可以是32bit,都是用的异步FIFO转为64位,然后存入。目前只提供这两个版本,需要的同学也可以自己修改。

目前这两组代码我自己都用过,目前没发现问题,可以正常使用。

代码请在GitHub上下载:DataMover-Code

1. 工程概述

本工程包含 4 个 Verilog 模块,用于在 AXI Stream 与 AXI Memory Mapped 之间进行数据搬运,覆盖 MM2S(读内存到流)与 S2MM(写流到内存)两个方向,并提供两套输入流宽度适配版本:8bit 到 64bit、32bit 到 64bit。

整体上,模块内部通过异步 FIFO 完成 I_sys_clk 与 I_ps_clk 两个时钟域之间的数据与指令跨域。

2. 文件与功能对应

文件名模块名方向主要功能
datamover_mm2s_8to64.vdatamover_mm2sMM2S接收 72bit 命令,发起 AXI 读突发,64bit 读数据拆分为 8bit 流输出
datamover_s2mm_8to64.vdatamover_s2mmS2MM接收 72bit 命令与 8bit 流数据,组包为 64bit,发起 AXI 写突发
datamover_mm2s_32to64.vdatamover_mm2sMM2S接收地址+长度命令,AXI 读后输出 I/Q 两路 16bit(合计 32bit 流语义)
datamover_s2mm_32to64.vdatamover_s2mmS2MM接收 I/Q 两路 16bit 流数据与地址+长度命令,组包写入 AXI

说明:

  • 8to64 与 32to64 两组文件内模块名分别相同(都叫 datamover_mm2s 或 datamover_s2mm),综合或仿真时应避免同名模块同时加入同一编译单元。

3. 接口与命令格式

3.1 8to64 版本命令格式(72bit)

CMD[71:0] 字段定义:

  • [71:68] RSVD
  • [67:64] TAG
  • [63:32] SADDR
  • [31] DRR
  • [30] EOF
  • [29:24] DSA
  • [23] TYPE
  • [22:0] BTT

3.2 32to64 版本命令接口

32to64 版本使用分离命令输入:

  • cmd_addr(地址)
  • cmd_len(长度)

4. 时钟域与数据路径

  • I_sys_clk:PL 侧命令与流接口主要工作时钟。
  • I_ps_clk:AXI MM 读写事务主要工作时钟。
  • 跨域机制:通过 xpm_fifo_async 实现命令与数据在两个时钟域之间安全传递。

5. 当前实现约束与注意事项

5.1 通用约束

  • 设计按 一条指令 对应 一组数据 的时序模型工作。
  • 当前指令未完成前,不应下发下一条同方向指令。

5.2 MM2S 32to64 版本

  • 注释中明确:默认下游 tready 常为高。
  • 若存在明显反压,异步 FIFO 读出传递可能出现重复或遗漏风险。
  • cmd_len 需为偶数。

5.3 S2MM 32to64 版本

  • cmd_len 需为偶数且不为 0。
  • 应按 指令在前、数据在后 的顺序输入。

5.4 S2MM 8to64 版本

  • 注释中指出:若无有效指令仅输入数据,数据将被丢弃。

6. 状态与错误指示

  • MM2S 与 S2MM 均提供状态流接口:
    • sts_tdata = 0x80:长度匹配或事务正常
    • sts_tdata = 0x10:长度不匹配或错误
  • 同时提供错误输出信号(O_mm2s_err / O_s2mm_err)用于上层监测。

7. 集成建议

  1. 先选择单一版本(8to64 或 32to64)进行系统集成,避免同名模块冲突。
  2. 保证命令与数据严格配对,避免乱序注入。
  3. 结合系统吞吐评估 tready 反压场景,必要时增加缓冲或修正读出握手机制。
  4. 若面向 AXI4 Full,建议复核 awlen/arlen 位宽、突发长度与目标互联配置是否一致。

8. 后续可完善方向

  • 增加统一顶层封装,参数化选择 8to64 或 32to64 模式。
  • 增加 testbench,覆盖跨域、反压、尾包字节对齐、异常响应等场景。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:53:03

2026年密度板行业TOP5源头大揭秘:谁将引领未来?

大家好,今天咱们来聊聊密度板行业的那些事儿。说到密度板,可能有些朋友不太熟悉,但其实它在我们的日常生活中无处不在,比如家具、装修材料等。今天我们就来扒一扒2026年密度板行业的TOP5源头企业,看看谁能笑到最后。1.…

作者头像 李华
网站建设 2026/7/14 15:53:07

深夜实验室的灯光下,屏幕里跳动的雷达回波图泛着诡异的绿色。老张猛灌一口咖啡,指尖在机械键盘上敲出清脆声响:“这杂波再不解决,下周项目评审得被甲方喷成筛子

使用卷积去除雷达图像中杂波 该模型也可用于图像的杂波去除 内容: 1.一份雷达图像数据集 2.去除杂波的雷达图像 3.神经网络模型代码 4.模拟数据集和测试数据集 5.进行泛化验证的数据集 6.测试和泛化验证结果 基于python语言 网络结构新颖,有非常好的图像…

作者头像 李华
网站建设 2026/7/14 15:53:08

COMSOL生成三维多孔介质

COMSOL生成三维多孔介质。 在仿真模拟领域,多孔介质建模总能让人又爱又恨。今天咱们用COMSOL搞点实在的——手搓三维多孔结构,整个过程就像搭乐高积木,只不过这次积木块会随机消失。下面这段代码先建个20mm的立方体当基质: mode…

作者头像 李华