新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Xilinx Virtex-6的高速DMA读写设计

基于Xilinx Virtex-6的高速DMA读写设计

作者:时间:2014-05-05来源:网络收藏

摘要 本设计在基于 FPGA内嵌PCI Express Core的基础上,实现了由PCI Express板卡主动发起的DMA读写,可完成PC和PCI Express板卡之间数据的高速传输。该设计已经在评估板ML605上完成调试验证,DMA写内存速度稳定可达1 520 MB/s,满足了高速存储系统的要求。

本文引用地址:http://www.eepw.com.cn/article/246382.htm

随着相控阵雷达、超宽带雷达、数字阵列雷达相继地出现,雷达的回波数据量在不断地增加,因此对高速采集和大容量数据传输提出了越来越高的要求。早期基于PCI总线的高速数据采集系统在带宽、流量控制和数据传送质量上存在一定缺陷,在某种程度上并不能完全适应高速大容量数据存储的要求。相比较而言,PCI Expres总线具有鲜明的技术优势,不仅完全兼容PCI总线,而且全面解决了PCI总线所面临的带宽、流量控制和数据传送质量方面问题,由于使用高速差分总线,时钟频率可以达到较高水平,其总线带宽较PCI总线也有大幅度提升,目前X16的PCI Express峰值带宽可以达到80 GT/s。PCI Express技术的逐步成熟,为高速数据数据传输提供了较好的解决方案。

1 DMA控制逻辑设计

DMA控制逻辑设计如图1所示,主要有PCIExpress Core、接收引擎、发送引擎、DMA控制状态寄存器和中断控制等关键模块。

 

 

1.1 PCI Express Core

主要特点如下:(1)符合PCI Express Base Specification 2.0规范。(2)支持X1、X2、X4或X8模式。(3)片上GTP/GTX收发器实现PHY。(4)具有访问PCI Express配置空间和内部配置的管理接口。(5)支持最大的有效载荷(128~4 096 Byte)。(6)可针对存储器或I/O进行配置的基地址寄存器(BAR)。

1.2 接收引擎

在PCI Express系统逻辑结构中,接收引擎主要是在接口时钟的控制下,按照基本TLP接收时序,解析存储器读写请求并从TLP中提取所需信息并将其传送到存储器访问控制器,存储器访问控制器处理存储器写TLP中写入存储器的数据,并使用存储器中的数据读来响应存储器读TLP;此外接受引擎主要还负责处理存储器读完成TLP,响应板卡发起的DMA读操作。

1.3 发送引擎

在PCI Express系统逻辑结构中,发送引擎主要是在接口时钟的控制下,按照基本TLP发送时序,为接收到的存储器读TLP生成完成包,生成该完成包所需的信息会由存储控制器传送到发送引擎;此外发送引擎还负责发起存储器读写请求TLP,实现与PC之间数据的DMA读写。

1.4 DMA状态控制寄存器

在PCI Express系统逻辑结构中,DMA状态控制寄存器主要是实现PCI Express Core与Root Complex之间数据的传递。Windows GUI软件配置DMA控制状态寄存器控制DMA操作。DMA控制状态寄存器映射于PCI Express Memory BAR0空间,Windows GUI软件通过Memory Write和Read周期访问寄存器。Windows GUI软件初始化DMA控制寄存器发起DMA传输,而通过状态寄存器,以中断方式通知Root Complex DMA传输完成。

1.5 中断控制

当DMA传输结束时,为及时通知PC响应并处理中断,中断控制部分使用核的配置层接口信号产生中断。PCI Express支持两种中断:消息信号中断(MSI)和传统中断(Legacy INT)。在PCI Express设备枚举过程中,跟联合体会根据自身对中断支持的能力设置配置空间中的命令寄存器和消息信号中断能力寄存器,来决定使用何种中断。

2 PCI Express Masfer DMA读写设计验证

2.1 DMA写设计验证

数据流向:上行FIFO数据→PCI Express Master DMA Write→PC内存→PC硬盘。

整个DMA写过程如下:(1)复位FPGA逻辑,延时1 ms;去除FPGA逻辑,延时1 ms。(2)检测硬件链路初始化。(3)开启DMA写完成中断。(4)设置DMA写目的地址寄存器,设置DMA写传输长度寄存器。(5)启动DMA写操作,选择记录路径。(6)等待DMA写完成中断。(7)清除中断,内存数据转到硬盘。(8)DMA写是否结束,是则转至步骤(9);否则转至步骤(4)。(9)终止DMA写,关闭DMA写完成中断,断开记录路径。

下面给出从PCI Express Core到系统内存的DMA写时序,图2是用ChipScope截取的时序图。

 

 

T0~T1之间核接收事务接口上m_axis_rx_tvalid与m_axis_rx_tlast共同有效了8次,即执行了8次PIO内存读写操作。其中第6次为PIO读操作,相应的发送事务接口上s_axis_tx_tvalid与s_axis_tx_tlast有效,产生Cpld完成包以回应PIO读操作。从图中可以看出,DMA状态控制寄存器配置完成后,dma_wr_start信号有效,即启动DMA写操作。此后PCI Express Core开始在发送事务接口上发送存储器写事物包,事物包的地址、大小已经在DMA状态控制寄存器中配置。

2.2 DMA读设计验证

数据流向:PC硬盘→PC内存→PCI Express Master DMA Read→下行FIFO数据。

整个DMA读过程如下:(1)复位FPGA逻辑,延时1 ms;去除FPGA逻辑,延时1 ms。(2)检测硬件链路初始化。(3)开启DMA读完成中断。(4)设置DMA读目的地址寄存器,设置DMA读传输长度寄存器。(5)PC硬盘数据转到内存。(6)启动DMA读操作,选择回放路径。(7)等待DMA读完成中断。(8)清除中断,硬盘数据转到内存。(9)DMA读是否结束,是则转至步骤(10);否则转至步骤(4)。(10)终止DMA读,关闭DMA读完成中断,断开回放路径。

下面给出从系统内存到PCI Express Core的DMA读时序,图3是用ChipScope截取的时序图。

 

 

T1~T2之间核接收事务接口上m_axis_rx_tvalid与m_axis_rx_tlast共同有效了3次。此处需要说明的是DMA读操作在配置完寄存器后需要先从PC硬盘将数据转到内存开辟的数据缓冲区,此后才能开始DMA读操作,故T1~T2之间核接收事务接口上m_axis_rx_tvalid与m_axis_rx_ tlast有效为配置DMA读地址和启动DMA读操作。当DMA读操作启动后,核的发送事务接口上s_axis_tx_tvalid与s_axis_tx_tlast有效,发送存储器读请求包,当PC收到PCI Express Core发出的存储器读请求包后会根据TLP中的信息回复相应的Cpld完成包。根据PCIExpress总线规范中对PCI Express序的规定,允许接收事务接口在接收Cpld完成包的同时发送事务接口在发送存储器读请求包,见图中T1~T2之间所示。

存储器相关文章:存储器原理



上一页 1 2 下一页

关键词: Xilinx Virtex-6

评论


相关推荐

技术专区

关闭