参考文档:pg022
一、DMA简介
DMA(直接存储访问)是用硬件实现存储器与存储器之间或存储器与IO设备之间直接进行高速数据传输。
使用 DMA时, CPU向DMA 控制器发出一个存储传输请求,这样当 DMA 控制器在传输的时候,CPU 执行其它操作,传输操作完成时DMA以中断的方式通知 CPU。
为了发起传输事务,DMA必须控制器必须得到:源地址、目的地址、传输长度。
DMA的传输过程:
- 为了配置用DMA传输数据到存储器,处理器发出一条DMA命令;
- DMA控制器把数据从外设传输到存储器或从存储器到存储器,而让CPU腾出手来做其它操作;
- 数据传输完成后,向CPU发出一个中断来告诉它DM传输可以关闭了;
二、AXI DataMover IP核的配置
参考:P41~P44
2.1 Basic
Enable MM2S:启用PS向PL传输数据的功能
Enable S2MM:启用PL向PS传输数据的功能
Channel Type:
- Full:允许将通道配置为所有可能的组合和高级功能
- Basic:限制了一些特性并让通道仅用于32位或64位宽的数据
Width of BTT field:命令接口中BTT字段的宽度
Enable xCache and xUser:需要更改缓存和用户信号时使能
Enable S2MM Control Signals:使能后将显示S2MM接口的所有控制和状态信号
Address Width:配置命令接口中SADDR字段的宽度
2.2 Advanced
Enable Asynchronous Clocks:使能命令、状态流接口和存储映射接口异步时钟
Allow Unaligned Transfers :使能DRE,允许内存映射数据通道上的数据重新排列到字节(8位)级别。如果启用了DRE,则数据写入/读出可以从任何Buffer Address偏移量开始,并且读取的数据是对齐的,以便读取的第一个字节是AXI4-Stream上输出的第一个有效字节。
Enable Indeterminate BTT Mode :当传输命令发送到DataMover S2MM命令输入时、输入S2MM流通道上接收的字节数未知时需使能,使能后存储和转发选项不可用。
Enable Store and Forward:使能后可确保在存储和转发FIFO中存在请求传输所需的所有数据之前,不会将传输发送到AXI4写地址通道。
三、接口
参考:P14~P18
AXIS数据宽度必须小于等于各自通道的AXI4数据宽度。
接口 | 意义 |
---|---|
S_AXIS_S2MM | 输入的数据流接口 |
S_AXIS_S2MM_CMD | 输入的S2MM命令接口 |
M_AXIS_S2MM_STS | 输出的S2MM状态接口 |
M_AXI_S2MM | 输出的存储器映射接口数据 |
m_axis_s2mm_cmdsts_awclk | S2MM的命令和状态时钟 |
s2mm_err | S2MM错误输出 |
3.1 命令接口
📄使用IP核时,要先写命令再写数据,并且写完命令后要等待足够长时间,再开始写数据。
📄命令接口是一个AXI4-Stream接口,因此总位数应该是8的整数倍。例如,如果地址空间配置为33位,则命令中的地址部分应该填充为40位。这是为了确保符合axis4 - stream协议,AXI Datamover将在内部忽略填充位。
📄命令格式允许指定从1字节到8,388,607字节(7FFFFF十六进制字节)的单次数据传输。DataMover自动将大型传输分解为符合AXI4协议要求的中间突发(子传输)。下表介绍了部分字段的含义,更多细节可参考P18~P20。
字段 | 意义 |
---|---|
xCACHE | 出现在MM2S或S2MM的AXI_stream额外标识信号 |
xUSER | 出现在MM2S或S2MM的AXI_stream额外标识信号 |
TAG | 传输标识,该字段是用户分配给命令接口的任意值 |
SADDR | 传输的起始地址,应设置为8的整数倍,根据具体配置 |
DRR | 一般不使用,可设置为全0 |
EOF | 帧结束标识,使能后在最后一次数据传输时会拉高tlast信号 |
DSA | 一般不使用,可设置为全0 |
Type | 设置AXI4访问类型,置1表示INCR模式,地址自增,置0表示固定地址模式,访问同一个地址的数据 |
BTT | 要传输的总字节数,可以从1到8388607字节,超出该范围会导致INTERR |
3.2 状态接口
📄该接口将传输状态转发给用户逻辑。除了在不确定模式下启用S2MM外,状态字的宽度固定为8位。
📄状态接口数据的各位表示成功或失败的原因,当状态信号的值为80(十六进制)时,代表datamover数据搬运成功;如果实际传输的数据量和指令中描述的数据量大小不匹配,状态信号的值为10,表明数据量不对;如果指令中给出的地址和后续存储器地址不匹配,状态信号的值为20,表明找不到相应地址而出错。各字段具体含义,可参考P21~P23。
字段 | 意义 |
---|---|
TAG | 传输标识 |
INTERR | 内部错误,BTT设置错误或传输数据量与配置的BTT不符时会出现 |
DECERR | 传输地址错误 |
SLVERR | 从设备错误 |
OKAY | 传输完成,只有该位为1,其它位都为0时才表明此次传输正确 |