SGDMA模块介绍
王敏志
概述
ALTERA的PCIe接口开发,厂家建议客户采样Qsys方式,因为这样减少了用户不少难度,传统采用chaining-dma的方式开发起来复杂程度相对较高,而且采用Qsys+mSGDMA方式则只需在Qsys里开发一个SGDMA接口核,该模块核接口符合Avalon-ST或者Avalon-MM标准,所以可以在Qsys里很方便地和PCIE核直接联系,如图1所示。这里的模块化SG-DMA不是Qsys里的IP而是Altera-wiki上有人共享的源代码,用户可以将其导入到Qsys中加以利用,使用这个DMA模块的好处是,由于源代码可见,所以用户可以根据自己的需求对该模块进行裁剪。
图1:mSGDMA在PCIE设计中的应用
mSGDMA核一共主要包括三个独立的模块,每个模块对应于特定的数据传输。由于整个mSGDMA分为多个独立核,所以用户可以修改其中部分核的时候,并不需要修改整个mSGDMA核。这里介绍的DMA例子,是用于将DDR SDRAM某个区域的数据搬到另一区域。用户可以将数据搬运的吞吐量打印到Qsys的控制台,由于模块化SGDMA包含多个缓冲描述符,可以最小化传输多个数据缓冲的的开销。
SGDMA模块的组成
SGDMA模块,即Scatter-Gather DMA。主要包括Reader Master、Write Master和Dispatcher这三个模块,这三个独立的模块又都是可以独立插入Qsys中的IP。由于是模块化设计,所以mSGDMA IP可以实现memory-to-memory,memory-to-streaming,和 streaming-to-memory拓扑结构。这里介绍memory-to-memory拓扑结构,如图2所示,读写master可以连接在一起。由于读写master是通过altera标准的Avalon Streaming端口连接在一起,所以用户可以为它们配置不同的数据宽度,或者在数据流中加入额外的模块等等。
图2:mSGDMA的MM拓扑结构
SGDMA模块特性
SGDMA包含以下特性:
l 根据描述符进行中断使能
l 包传输长度限制
l 视频帧缓冲驻留
l 不对齐存储器访问
l 静态和可编程突发处理
l 数据位宽高达1024-bit
l 独立的收发描述符缓冲
l 支持64-bit地址 (必须使用 Qsys 12.1或之后的版本)
l 4GB缓冲传输
l 可编程跨越(以字为单位)
l 可编程添加描述符
l 用户可定制功能(提高逻辑和存储器利用率)
结论
Altera从Quartus II 7.2开始就在SOPC Builder提供了Scatter-Gather DMA的IP。这里要介绍的不是这个SGDMA,而在Altera-wiki有源码公开的模块化SGDMA。由于是源码公开,所以用户可以根据自己的应用进行修改,而且该参考设计很好利用了模块化设计,将一个DMA控制器分成了三个独立的部分,因此实际上用户需要修改的只是调度核部分,对于读写master基本无需进行修改。后面,为了以后更好滴利用此项参考设计,打算将其尽量翻译成中文后进行发布。
也欢迎到家对该参考模块的使用进行讨论,大家可以到参考1地址下载到本参考设计。
参考
[1] http://www.alterawiki.com/wiki/Modular_SGDMA
[2] PCI-E hard IP User guide
[3]
文章评论(0条评论)
登录后参与讨论