




同学,坐。老师看到你直接打开了 Vivado 里 AXI DMA 的配置界面,并且对照着手册在啃,心里特别高兴。这就是从"看热闹"到"看门道"的关键一步。
这个配置界面看起来参数很多,但其实作为工程师,你只需要盯住其中 5 个核心参数。咱们今天就用"物流公司"的比喻,结合你截图里的内容,把这些参数一个个拆开,告诉你"为什么要这么配"。
🎯 1. 核心开关:Enable Scatter Gather Engine(S/G 模式)
-
你截图里的状态 :未勾选(灰色)。
-
大白话:这就是"老板要不要用全自动流水线"。
-
工程师怎么选 :初学者、做简单回环测试、或者数据块很规整的项目,绝对不要勾选! 保持简单模式(Direct Register Mode)。勾选后,DMA 内部会多出一个复杂的"清单管理部",多消耗 FPGA 资源,而且需要你写 C 代码去内存里构建复杂的链表(BD),非常容易出错。
-
为什么 :不勾选,你只需要在 C 代码里调用
XAxiDma_SimpleTransfer,告诉它"源地址、长度",它就去搬。简单、粗暴、有效。
🎯 2. 最关键的限制:Width of Buffer Length Register(缓冲长度寄存器位宽)
-
你截图里的值 :
14bits。 -
大白话:这就是"老板一次最多允许搬运工拉多少货"。
-
数学换算 :长度位宽是 14,意味着最大传输字节数是 2 的 14 次方 = 16384 字节(16KB)。
-
工程师怎么配:
-
如果你只是做个简单的回环测试,传几百个字节,
14完全够用,默认值就行。 -
但如果你要传一张图片 或者一帧视频 (动辄几十上百 KB),
14就不够了!你必须把这个值改大,比如20(代表 1MB)或23(代表 8MB)。
-
-
为什么 :如果你在 C 代码里调
SimpleTransfer时,传的字节数超过了这个限制,DMA 会直接报错或者数据被截断。这是新手最容易踩的坑之一。
🎯 3. 数据位宽:Memory Map Data Width 与 Stream Data Width
-
你截图里的值 :都是
32bits。 -
大白话:这是"大卡车的车道宽度"和"传送带的宽度"。
-
工程师怎么配:
-
Memory Map Data Width :这是 DMA 去 DDR 内存拉货的宽度。通常选
32或64。选64带宽更大,但你的 DDR 和总线必须支持。 -
Stream Data Width:这是 DMA 把数据送给 PL 端外设的宽度。
-
关键规则 :Stream 位宽必须小于或等于 Memory Map 位宽。你截图里都是 32,这是最标准、最不容易出错的配置。
-
-
为什么:如果你的 PL 端自定义 IP 核是 8 位数据流(比如某些慢速 ADC),而 DMA 的 Stream 位宽设成了 32 位,虽然能连上,但 PL 端处理起来会很别扭。需要根据你的外设来定。
🎯 4. 传输效率:Max Burst Size(最大突发长度)
-
你截图里的值 :
16。 -
大白话:搬运工一次"深呼吸"能搬多少块砖。
-
工程师怎么配 :保持默认
16通常没问题。但如果你的系统要求极致带宽(比如千兆网、高速图像采集),可以尝试改成32、64甚至256(取决于你的总线支持)。 -
为什么 :Burst 越大,DMA 占用总线的效率越高,但可能会让别的外设"抢不到总线"。
16是一个平衡点,既保证了速度,又不会太霸道。
🎯 5. 必看警告:Allow Unaligned Transfers(允许非对齐传输)
-
你截图里的状态 :未勾选(两个通道都没勾)。
-
大白话:这就是"卡车能不能斜着停"。
-
工程师怎么配 :初学者坚决不要勾选! 保持不勾选。
-
为什么 :如果不勾选,你的 C 代码里传给 DMA 的内存地址,必须是 4 的倍数 (因为你是 32 位数据)。比如
0x1000可以,但0x1001就会导致 DMA 卡死或报错。勾选这个选项会开启 DRE(数据重对齐引擎),允许任意地址,但会消耗额外的 FPGA 资源。新手先保证地址对齐,把流程跑通再说。
💡 老师的终极配置建议(直接抄作业)
如果你现在只是想跑通一个简单的回环测试(就像咱们之前聊的),请按下图配置:
-
Enable Scatter Gather Engine :不勾。
-
Width of Buffer Length Register :14(先跑通,以后传大图再改)。
-
Memory Map Data Width :32。
-
Stream Data Width :32。
-
Max Burst Size :16。
-
Enable Read Channel / Write Channel :都勾上(因为你要做环路,既发又收)。
-
Allow Unaligned Transfers :都不勾(强迫自己地址对齐)。
记住这张"体检表",以后不管你换什么项目,先看这 5 个参数,就能避开 90% 的 DMA 配置坑。你去按这个配置点一下 OK,把 Block Design 连好,咱们下一步就跑代码!