没有合适的资源?快使用搜索试试~ 我知道了~
首页DMA/Bridge Subsystem for PCI Express v4.1 读书笔记 (中文) XDMA
DMA/Bridge Subsystem for PCI Express v4.1 读书笔记 (中文) XDMA 参考文档:PG195, https://github.com/Xilinx/dma_ip_drivers, https://support.xilinx.com/s/article/65443?language=en_US XDMA IP核的中文学习笔记,包括文档全部内容。
资源详情
资源评论
资源推荐
XDMA DMA/Bridge Subsystem for PCI Express v4.1
DMA/Bridge Subsystem for PCI Express v4.1
一、XDMA概述
1. XDMA构成
2. 描述符
3. 直接访问用户逻辑(非DMA)
4. 使用注意事项
5. MSI-X模式用户中断
二、XDMA subsystem 可配置功能
1. BARs配置
2. AXI4-Lite Master
3. AXI4-Lite Slave接口
三、中断概述
1. Legacy Interrupts
2. MSI和MSI-X中断
四、DMA操作
1. AXI MM接口的初始化setup流程:
2. AXI-MM接口的H2C传输流程
3. AXI-MM接口的C2H传输流程
4. Descriptor详解
5. 位宽和地址对齐
6. Length Granularity
7. 奇偶校验
五、端口定义
1. XDMA全局端口
2. PCIe接口
3. H2C AXI4-ST接口
4. C2H AXI4-ST接口
5. AXI4-MM读地址接口
6. AXI4-MM读数据接口
7. AXI4-MM写地址接口
8. AXI4-MM写数据接口
9. AXI4-MM写响应接口
10. AXI4-MM Master Bypass 接口
11. 配置AXI4-Lite Write Master 接口
12. 配置AXI4-Lite Read Master 接口
13. 配置AXI4-Lite Write Slaver 接口
13. 配置AXI4-Lite Read Slaver 接口
14. 中断接口
15. 通道channel的状态接口
16. 外部配置接口
17. 配置管理接口
18. Descriptor Bypass模式
六、寄存器空间
1. PCIe to DMA Address Format
2. H2C Channel Registers (target == 0x0)
3. C2H Channel Registers (target == 0x1)
4. IRQ Block Registers (target == 0x2)
5. Config Block Registers (0x3)
6. H2C SGDMA Registers (0x4)
7. C2H SGDMA Registers (0x5)
8. SGDMA Common Registers (0x6)
9. MSI-X Vector Table and PBA (0x8)
七、时钟和复位信号设计注意事项
1. 时钟
2. 复位
八、设计指南
1. 配置和生成XDMA
2. 约束设计
3. 仿真
a. AXI-MM模式
b. AXI-ST模式
九、Example设计
1. AXI4-MM默认的Example设计
2. AXI4-ST默认的Example设计
3. VIVADO Example设计流程
4. 自动生成Example设计
十、Test Bench
1. AXI4-MM接口仿真流程
2. AXI4-ST接口仿真流程
3. 仿真Update
1.
2.
1.
2.
4. Test case任务
十一、应用软件开发
1. Linux 设备驱动
2. 下载
3. 中断处理
4. 驱动Example H2C的流程
5. 驱动Example C2H的流程
DMA/Bridge Subsystem for PCI Express v4.1
XDMA IP核即DMA/Bridge Subsystem for PCI Express,其可以配置为高性能的DMA或者PCI Express和AXI memory spaces之间的PCI-Express桥。
作为DMA,IP可配置为AXI接口或者AXI-STREAM接口。其中AXI接口为单一的Master接口,而AXI-ST接口每个channel为单独的接口,AXI-ST
接口可用来直接连接RTL逻辑模块。两种接口都能够通过提供的字符驱动作为PCIe地址空间和AXI地址空间之间的高性能的数据DMA。除了基
本的DMA功能,IP还提供了多达4通道的upstream和downstream channels;此外还提供了bypass DMA engine (Host DMA Bypass)功能和
可选的描述符可从FPGA bypass管理描述符,可以获得最高的性能和最低的延时。
作为PCIe和AXI Memory桥设备(该功能只支持UltraScale+设备),可接受或发送PCIe包,并转换为AXI数据流。该功能提供了理想的AXI外
设与PCIe之间交互的方式。作为PCIE桥,其可既作为EndPint设备又可作为Root设备。对于非UltraScale+设备,有专门的IP核用来实现
PCIE桥。
一、XDMA概述
1. XDMA构成
PCIe RX --> PCIE IP --> RQ/RC (Requester Request/Requester Completion) --> H2C channel --> AXI Write接口(MM或ST接口) --
> User Logic
User Logic --> AXI Read接口(MM或ST接口) --> C2H channel --> RQ/RC --> PCIE IP --> PCIE TX
User Logic --> IRQ Module --> PCIE IP
Cfg Master (AXI4-Lite Master and Slaver) <--> Bridge <--> CQ/CC (Completer Request/Completer Completion) <--> PCIE IP
Host DMA Bypass (AXI MM Master) --> User Logic
2. 描述符
XDMA通过操作描述符来实现主机内存和XDMA之间的数据搬运。
其包括如下的信息:
源
目标
传输的数据量
描述符完成和错误时都会产生中断。
3. 直接访问用户逻辑(非DMA)
主机可以都过如下的两种方式直接访问用户逻辑,而并不需通过DMA数据搬运的方式。
Cfg Master端口,该端口为AXI4-Lite Master配置端口,为固定的32bit的端口,适用于对访问速率没有较高要求的用户的配置和状态寄存
器的访问。
AXI MM Master CQ Bypass端口,该端口的数据位宽与DMA channel的数据位宽,适用于高带宽的用户memory的访问,如peer-to-peer传
输。
4. 使用注意事项
所有配置不支持Example Design
只支持INCR burst类型(地址递增),其他的类型将导致Slave Illegal Burst中断。
5. MSI-X模式用户中断
用户需要在IRQ Block User Vector Number 寄存器中为每一个用户中断编程不同的矢量中断号来为所有的用户中断产生acks。所有的中断矢量号公
用一个acks信号,有且只有1个acks信号。
二、XDMA subsystem 可配置功能
XDMA内部可被配置为执行高达8路的独立的物理DMA引擎(4路H2C、4路C2H)。这些DMA引擎可以映射到独立的AXI4-ST接口,或者共享AXI4-MM接口。
1.
2.
3.
4.
5.
6.
7.
8.
9.
XDMA还支持主机到用户逻辑的访问,通过写请求到‘PCIe to DMA bypass Base Address Register (BAR)’,可以直接通过M_AXI_BYPASS接口将写
请求数据直接传递到用户逻辑。
此外对于速率要求不高的用户配置和状态寄存器的访问可以通过,XDMA提供了32bit固定位宽的AXI4-Lite接口访问功能。
1. BARs配置
对于32bits的BARs
默认: BAR0-DMA
使能了PCIe to AXI Lite Master:BAR0-PCIe to AXI4-Lite Master; BAR1-DMA;BAR2-PCIe to DMA Bypass
PCIe to DMA Bypass enabled:BAR0-DMA;BAR1-PCIe to DMA Bypass
对于64bits的BARs
默认: BAR0-DMA
使能了PCIe to AXI Lite Master:BAR0-PCIe to AXI4-Lite Master; BAR2-DMA;BAR4-PCIe to DMA Bypass
PCIe to DMA Bypass enabled:BAR0-DMA;BAR2-PCIe to DMA Bypass
2. AXI4-Lite Master
主机使用这个接口来实现对用户逻辑的读写请求。
3. AXI4-Lite Slave接口
用户逻辑使用这个接口来实现对DMA内部寄存器的读写。
三、中断概述
IRQ模块可配置接受用户逻辑的中断线;每路DMA通道对应一路中断。支持MSI-X、MSI和普通中断。
1. Legacy Interrupts
如果使能legacy interrupt,则Asserting 一个或多个Bits的usr_irq_req信号,将产生legacy interrupt。
usr_irq_req一旦Asserted必须保持到usr_irq_ack Asserted,它表示产生了一个中断到PCIE Block,此时要求主机处理中断服务,并清中断。
通常用户逻辑需要知道主机什么时候运行了中断处理程序,一般通过用户逻辑中的一个可被主机读写清零的寄存器来实现。
usr_irq_req在deasserted后不能立刻重新reasserted,而必须等待到usr_irq_ack第二次Asserted后,才能够重新Asserted。这是因为主机存在一
定的中断响应时间,第二次usr_irq_ack Asserted表示主机从中断处理中退出,可以再次接受新的中断。
2. MSI和MSI-X中断
如果使能了MSI或MSI-X中断功能,则usr_irq_req信号的Asserted将产生MSI/MSI-X中断。
不同于legacy interrupt,usr_irq_req在deasserted后不须等待usr_irq_ack第二次Asserted后,可Reasserted。
四、DMA操作
1. AXI MM接口的初始化setup流程:
Load driver
设置H2C channel中断使能mask寄存器 0x0090用来产生对应bits上的中断。
设置C2H channel中断使能mask寄存器 0x1090用来产生对应bits上的中断。
设置‘IRQ Block Channel Interrupt Enable Mask’ register 0x2010 使能所有的H2C和C2H channle来产生中断。
2. AXI-MM接口的H2C传输流程
应用程序:初始化H2C传输(传输的长度,buffer location)。
驱动:创建descriptor。
驱动:写first descriptor base address到地址0x4080和0x4084;如果是多次传输的话,则写接下来的descriptor的数量到0x4088。
驱动:写H2C引擎控制寄存器地址0x0004,启动H2C传输。
FPGA:DMA初始化Descriptor fetch请求。
FPGA:DMA接受一个Descriptor。
FPGA:DMA发送读请求到Descriptor指定的源地址。
FPGA:DMA从主机接受数据。
9.
10.
11.
12.
13.
14.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
FPGA:通过AXI-MM Master接口传输数据。
FPGA:发送中断到主机。
驱动:中断处理(读‘IRQ Block channel Interrupt Request’ 0x2044,用来判断哪个channel产生的中断,将对应channel中断的Mask
写入0x2018)。
驱动:读‘Status register’ 0x0044,该行为会导致清除status register;读通道对应的 ‘Completed descriptor count’ 0x0048
并与descriptor的数量比较。
驱动:写通道对应的控制寄存器-0x0004,停止DMA运行;写‘Block channel interrupt Enable Mask’ 0x2014,为下一次传输使能中
断。返回传输数据的大小size到应用程序。
应用程序:退出程序
3. AXI-MM接口的C2H传输流程
应用程序:初始化C2H传输(传输的长度,buffer location)。
驱动:创建descriptor。
驱动:写first descriptor base address到地址0x5080和0x5084;如果是多次传输的话,则写接下来的descriptor的数量到0x5088。
驱动:写C2H引擎控制寄存器地址0x1004,启动H2C传输。
FPGA:DMA初始化Descriptor fetch请求。
FPGA:DMA接受一个Descriptor。
FPGA:DMA从Descriptor指定的源地址(FPGA板卡源地址)读取数据。
FPGA:通过PCIE接口传输数据到主机目标地址。
FPGA:发送中断到主机。
驱动:中断处理(读‘IRQ Block channel Interrupt Request’ 0x2044,用来判断哪个channel产生的中断,将对应channel中断的Mask
写入0x2018)。
驱动:读‘Status register’ 0x1044,该行为会导致清除status register;读通道对应的 ‘Completed descriptor count’ 0x1048
并与descriptor的数量比较。
驱动:写通道对应的控制寄存器-0x1004,停止DMA运行;写‘Block channel interrupt Enable Mask’ 0x2014,为下一次传输使能中
断。返回传输数据的大小size到应用程序。
应用程序:退出程序
4. Descriptor详解
XDMA使用descriptor的链接列表来指定DMA传输的源、目标和DMA数据长度。
descriptor的链接列表在主机驱动中创建并保存在主机内存中。
驱动会通过初始化非常有限的几个DMA channel的控制寄存器,启动获取Descriptor列表。
Descriptor格式如下:
0x0: {Magic[15:0],Rsv[1:0],Nxt_adj[5:0],control[7:0]}
0x04: {4'h0, Len[27:0]}
0x08: {Src_adr[31:0]}
0x0c: {Src_adr[63:32]}
0x10: {Dst_adr[31:0]}
0x14: {Dst_adr[63:32]}
0x18: {Nxt_adr[31:0]}
0x1c: {Nxt_adr[63:32]}
Magic[15:0] == 16'had4b, 用来验证驱动是否生成了可用的descriptor。
control[7:0]中bit0为Stop位,用来停驶获取descriptor,bit1为该descriptor完成中断标识位。bit4为EOP (End of packet)标识。
DMA具有Bit_width * 512深度的FIFO用来保存所有的discriptor。以AXI bit width为256bits为例,FIFO深度为256bit *512 = 16KB。
Descriptor Bypass
每个通道都提供了独立的Descriptor Bypass功能,在使能Descriptor Bypass功能后,Descriptor不再通过driver驱动提供,而是通过
c2h_dsc_byp 或 c2h_dsc_byp总线提供Descriptor中需要的信息数据,如源地址、目标地址和传输数据长度等。
Poll 模式
每个DMA引擎提供了将已完成的descriptor数量写回到主机内存的功能,因此主机驱动可以通过轮询DMA完成情况来替代中断的作用。
descriptor完成的数量是指至DMA初始化后完成的descriptor。
需要set ie_descriptor_completed and Pollmode_wb_enable。
通过Pollmode_hi_wb_addr and
Pollmode_lo_wb_addr两个寄存器对回写地址进行指定。
DMA H2C流数据
如果XDMA配置为AXI-ST接口时,数据由指定的源地址读取,descriptor中的目标地址不被使用(因为目标地址为FPGA板卡中的一个FIFO)。一个数
据包可以跨越多个descriptor,用EOP来表示一个数据包的完成。
剩余15页未读,继续阅读
weixin_43354598
- 粉丝: 174
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0