基于PCI Core的链式DMA控制器设计

摘 要:介绍一种基于pci总线的高效链式dma控制器的设计与实现,用于高速宽带的计算机外设接口。利用altera公司的pci核——pci_mt32搭建基于此控制器的数据采集平台,并成功应用在dvb数据接收卡中。
1991年pcisig(外围部件互连专业组)成立,提出了pci的概念altera公司提供的软件包:pcicompiler可以参数化地生成用于pci接口的ip核——megacore。该ip核包含了pci控制电路的所有功能,完成总线协议的转换,并将复杂的、电气和时序要求高的pci转换为易于操作的本地接口逻辑。用户可以基于其生成的ip核模块,设计自己的外部设备接口逻辑。altera的megacore包括四种类型:pci_mt64、pci_mt32、pci_t64和pci_t32。它们都具有灵活的通用接口,遵循pci协议2.2版,严格的工业级验证和多款优化fpga。考虑通常的pc主板都支持32位pci,而且dma控制器必须工作在主模式下,因此选择了pci_mt32,其模块结构如图1所示。
·参数化的配置寄存器:保存pci设备的基本信息,可以通过软件参数设定寄存器。
·地址数据缓存:缓存pci总线上的地址数据。
·主模式接口控制模块控制模块:在主模式下对pci总线的操作。
·从模式接口控制模块:在从模式下对pci总线的操作。
·奇偶校验器:当校验出错时,生成一个报错信号输出到配置寄存器。
·本地主模式控制模块:主模式下,控制本地逻辑的接口。
·本地从模式控制模块:从模式下,控制本地逻辑的接口。
·本地逻辑接口模块:控制本地端接口的地址、数据、控制、字节使能等。
1dma控制器 针对高带宽、低延时和大数据量的多媒体数据,设计了基于pcicore的dma数字卫星电视接收卡。dvb协议中的基本数据单元为192字节,因此把一次dma传输的数据包定为192字节。
1.1dma控制器的结构 dma控制器由dma寄存器、描述符描述符fifo、dma状态机、数据通道ram四个模块构成,如图2所示。
dma寄存器是主机控制dma的窗口,包括控制状态寄存器状态寄存器、地址寄存器、字节寄存器、中断状态寄存器和中断屏蔽寄存器。描述符fifo是一个32×256的fifo,在链式dma模式下可以暂存128组dma的描述符。dma状态机是控制pci总线数据传输的核心,主模式下的dma有主模式写和主模式读两种类型。主模式写是把数据通道ram里的数据包通过pci总线传送到从设备,主模式读则读取从设备的数据包传送到数据通道ram中。
1.2dma寄存器 dma寄存器的地址直接映射到pci的地址空间,其基地址由pcicore中的配置寄存器bar0决定。主机通过访问这些寄存器来控制dma操作。
·控制状态寄存器:主机通过寄存器配置dma状态机,同时也可以获得当前数据传输的状态。
·地址寄存器:保存pci总线地址,即dma传输的目标地址。当地址寄存器完成写操作,dma状态机将被启动。
·字节寄存器:其初始值为一次dma传输数据的大小,pci每传送一个数据,字节寄存器的值就减1,减到0则dma停止传输。
·中断状态寄存器:为主机提供pci设备的中断状态。
·中断屏蔽寄存器:可以屏蔽pci设备的中断请求。
1.3dma状态机 dma的状态机如图3所示。
·空闲状态:状态机无数据传输时默认停留在这一状态。通过写dma寄存器,可启动一次dma传输。
·装载寄存器状态:当链式传输时,进入装载寄存器状态。将描述符fifo中的一组描述符装入字节寄存器和地址寄存器后,进入寄存器有效状态。
·寄存器有效状态:dma传输前,如果外部fifo中的数据已经准备好,则进入等待请求状态。
·等待请求状态:等待一个数据包从外部fifo送入数据通道ram,进入请求状态。
·请求状态:申请pci总线的控制权,进入等待允许状态。
·等待允许状态:当pci设备获得了总线的控制权,进入准备状态。
·准备状态:当数据传输结束或者pci总线终止传输,则进入结束状态;当pci总线插入等待周期,则返回等待请求状态,重新申请总线的控制权;当pci总线的地址期结束将要进入数据期,则进入传输状态。
·传输状态:当数据传输结束或者pci总线终止传输,则进入结束状态;当pci总线插入等待周期,则返回等待请求状态,重新申请总线的控制权;当本次数据传输结束,但是本次链式dma没有结束,则进入装载寄存器状态。
·结束状态:一次dma结束,或者一次链式dma结束,状态机进入结束状态,同时发出中断信号。
·错误状态:当pciabort、pcisystemerror、pciparityerror、fifofull等错误出现时,状态机进入错误状态,同时发出中断信号。
1.4dma操作流程 以非链式dma的主模式写为例,主机首先写控制状态寄存器、中断屏蔽寄存器、字节寄存器、地址寄存器,而后状态机启动;当外部fifo数据准备好,数据先传到数据通道ram,再以dma方式写到目标地址;判断dma是否完成或出错,写中断状态寄存器,发出中断信号;主机收到中断后,读中断状态寄存器确定中断类型,如果发现dma完成,则处理数据,如果发现dma出错,则丢弃数据。
链式dma可以认为是一组dma的串连,其流程如图4所示。其中每一次dma的数据包大小和目标地址可以不同,直到这一组dma结束,发出一个中断信号。以主模式写为例,主机首先把多组字节寄存器和地址寄存器的值写入描
述符fifo,每一组字节寄存器和地址寄存器就是一个描述符;主机再写中断屏蔽寄存器和控制状态寄存器即启动了dma状态机,开始链式的数据传输。
与非链式dma相比,链式dma有更多的优点,以一次写入128个描述符的链式dma为例:
·节省软件的开销。非链式dma每启动一次传输,只能传一个数据包,而链式dma一次写入128组描述符,就可以传128个数据包。非链式dma一个数据包传输结束主机就响应一次中断,而链式dma每128个数据包传输结束主机响应一次中断。链式dma启动和响应频率降为原来的1/128,从而提高了传输速度。
·节省硬件资源。如果希望用非链式dma可靠地传输一个大数据包,需要ram的容量至少等于这个数据包的大小。例如非链式dma一次传128×192字节的数据,则需要192k位的存储容量。而链式dma可以把此数据包分成128次传输,仅使用1.5k位的存储容量,节省ram资源。
·灵活的地址管理。链式dma可以对每个数据包任意分配目标地址,那么一次操作可以读写一个从设备的多个地址空间,甚至多个从设备的多个地址空间。
2设计结果 用vhdl编写逻辑代码,用modelsim仿真,图5是部分仿真波形:pci的关键信号、dma状态机、dma寄存器。这是链式dma启动写操作时的信号变化,数据包的大小是192字节,目标基地址是0x40000104。
使用altera公司的quartusii对设计综合,选用器件cycloneep1c6q240c8,综合结果如表1所示。
最高时钟频率可以达到86.57mhz。综合生成网表文件下载到fpga,经过实际测试,系统运行正常。用逻辑分析仪测试pci的关键信号,非链式dma和链式dma传输128个数据包的统计信息如表2所示。
链式dma的平均数据率达到44.4mbps,几乎是非链式dma的2倍,这主要得益于软件响应时间的缩短。因此,对于非链式dma,数据包越大数据率就越快;对于链式dma,在数据包大小固定的前提下,数据包个数越多,相对响应时间会越少,数据率越快。

移动医疗五大疑惑
安森美半导体新的256抽头数字电位计CAT5270和CAT5
玩转SQLite1:SQLite简介与安装
什么是EUV***?
汽车安全技术不嫌多 都有哪些安全技术
基于PCI Core的链式DMA控制器设计
美国智能音箱Q3报告:Echo第一、Google Home第二
小米6、一加5和iphone7这几部手机你觉得哪款最适合入手?
LED测速仪DIY图解
SF581场扫描电路的应用电路图
深度解析3D视觉成像几种典型方案
双向防堵转机电球阀和燃气表的原理及设计
dfrobotWin10 开发板 2GB/32GB介绍
【新专利介绍】基于复合物联网的燃气表故障提示方法及物联网系统
小米11 Ultra影像先锋的独特魅力
锂离子电池硅基负极材料研究
光谱共焦位移传感器在手机玻璃测量中的应用
乐视汽车生态基地破土动工 代表的是行业未来发展方向
SandBox将AI工具应用到IC制造方法
维库小知识:教你认识继电器的类型