CN102521184A - 一种在pci总线上实现数据高速传输的方法 - Google Patents
一种在pci总线上实现数据高速传输的方法 Download PDFInfo
- Publication number
- CN102521184A CN102521184A CN2011104332163A CN201110433216A CN102521184A CN 102521184 A CN102521184 A CN 102521184A CN 2011104332163 A CN2011104332163 A CN 2011104332163A CN 201110433216 A CN201110433216 A CN 201110433216A CN 102521184 A CN102521184 A CN 102521184A
- Authority
- CN
- China
- Prior art keywords
- data
- transmission
- bus
- internal memory
- pci
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Bus Control (AREA)
Abstract
一种在PCI总线上实现数据高速传输的方法,采用FPGA作为板卡的接口控制芯片,集成PCI Core作为总线控制接口,在FPGA中优化传输控制方法,使得数据从FPGA到总线能高速平稳传输,同时在主机驱动程序采用链式内存使用方式,在驱动程序内部以及驱动程序和应用程序之间最大限度的提高了内存拷贝的效率,使得整个传输链路的效率得到了极大的提升。在64位PCI总线66MHz速率下,数据传输可以达到400MBps,在64位PCI-X总线100MHz的速率下,数据传输可以达到600MBps,能够满足目前大多数的高速传输需求,可为需要使用PCI&PCI-X总线做高速数据传输的用户提供一个可行的选择。
Description
技术领域
本发明涉及一种总线数据高速传输方法。
背景技术
在航天测控领域,高速的总线传输已经成为一种必需的技术。
在地面测控设备中,普遍采用PCI&PCI-X的总线结构,在设备板上用外购的接口芯片完成总线交互,由于商用芯片多是为中低速率传输设计的,灵活性较差,难以满足高速的数据传输需要,因此,需要有一种好的方法在PCI&PCI-X总线平台上实现高速传输。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种在PCI总线上实现数据高速传输的方法。
本发明的技术解决方案是:一种在PCI总线上实现数据高速传输的方法,包括总线设备端与PCI总线之间的数据传输方法以及PCI总线上所挂接主机的驱动程序内存使用方法,其中总线设备端与PCI总线之间进行数据传输时采用状态机进行控制,方法如下:
(1)在收到直接内存传输开始的命令后,状态机首先发起本地数据发送,然后将接收到的本地数据保存到FIFO中;
(2)当FIFO中的可读数据大于可读预设值后,以该可读预设值作为直接内存传输的数据量进行传输;
(3)在直接内存传输过程中,状态机始终监视FIFO中存储的数据量,如果FIFO中的可读数据量小于可读预设值,则停止直接内存传输,同时本地数据继续存入FIFO中;
(4)当FIFO中的可写数据量小于可写预设值时,状态机停止本地数据传送;当FIFO中的可写数据量大于可写预设值时,状态机重新开始本地数据传送;
通过上述状态机的不同状态切换完成总线设备端与PCI总线之间的数据传输;
PCI总线上所挂接主机的驱动程序内存使用方法如下:
(1)为主机的驱动程序预设一个长度为A的非分页内存单元,由主机的应用程序在初始化时通过驱动接口进行申请,A的大小大于每次直接内存传输的数据量;所述的非分页内存单元为主机操作系统管理的连续物理内存;
(2)驱动程序在收到应用程序的请求后,循环向操作系统申请以A为大小的非分页内存单元,直到申请到的非分页内存单元大小满足应用程序的要求;
(3)驱动程序将申请到的各内存单元的起始地址存入内存块地址列表;
(4)设定内存块地址列表中第一块内存的起始地址作为第一次直接内存传输的写指针;
(5)当有直接内存传输请求时,首先读取需要传输的数据量,然后根据直接内存传输的写指针位置判断该直接内存传输的数据量是否超出该非分页内存单元的边界,如果没有越出则直接返回写指针所在内存地址进行直接内存传输;如果越出则顺序查询后面的非分页内存单元,并将满足数据量传输要求的非分页内存单元的初始地址作为写指针进行直接内存传输。
所述的可读预设值或者可写预设值为48。所述的A的大小为8*1024*1024。
本发明与现有技术相比的优点在于:
(1)本发明采用FPGA作为板卡的总线控制器,并在商用PCI Core的基础上开发传输控制流程,极大的提高了总线传输的效率,并在驱动程序一端使用了链式内存管理策略,在驱动程序和应用程序之间共享内存,极大地提高了主机的效率,使得将数据从设备板通过PCI&PCIX总线传输给应用程序成为可能。经过测试,采用本发明,在PCI和PCI-X总线上都能达到很高的传输速度,可以为需要在PCI&PCI-X工控设备开发高速应用的用户提供一个可行的选择;
(2)采用本发明方法,与目前普遍采用的商用桥接芯片的方式相比,采用FPGA和商用IP Core作为底层的桥接芯片,可根据需要进行流量控制,更能满足高速数据传输的需要;
(3)本发明采用FPGA作为板卡的总线控制器,相对目前商用芯片的接口形式来说,外部数据接口方式更灵活,比采用商用的桥接芯片工程适用性更强;
(4)本发明的驱动程序接口采用了链式内存池管理技术,在驱动程序和应用程序之间最大程度的减少了数据交互次数,很大程度的提高了数据采集的效率,减少了对于主机性能的依赖;
(5)本发明方法在66MHz/64位宽的情况下数据传输能到400MBps,在PCI-X/100MHz/64bit的情况下数据传输能到600MBps,远大于现有常规设计的传输能力。
附图说明
图1本发明的原理示意图;
图2为本发明方法的传输控制流程示意图;
图3为本发明主机驱动程序链式内存池结构示意图;
图4为本发明主机驱动程序链式内存管理流程示意图。
具体实施方式
首先对本发明方法中涉及到的专有名词进行解释:
PCI:外部设备互联总线(Peripheral Component Interconnector)
CPCI:Compact PCI(欧式加固PCI总线结构)
PCI-X:PCI总线的升级版,速度更快
FPGA:可编程门阵列(Field Programmable Gate Array)
IP Core:知识产权核(Intelligence Property Core)
DMA:直接内存传输(Direct Memory Access)
FIFO:一种能够先入先出(First In First Out)的存储结构
非分页内存:操作系统管理的连续物理内存
本发明是一种在PCI&PCI-X总线上实现高速数据传输的方法,采用的主机设备为CPCI工业控制计算机或者带有PCI-X总线的服务器,设备端以Altera的EPCS1S25型FPGA为总线接口芯片,本发明的主要内容为对FPGA内部传输控制算法和主机驱动程序进行优化,在FPGA内部开发高效的数据传输控制接口,控制流量和稳定性,实现FPGA到主机总线的最优传输效率,同时在主机端设计高效的驱动程序接口,采用链式内存池等优化技术将高速数据高效的传输到应用程序,使得总线速率达到最优。
在FPGA内部采用商用的PCI&PCI-X IP Core(以下简称PCI Core)作总线接口控制,本发明在PCI Core与本地逻辑之间设计传输控制方法,控制流量和传输稳定性,达到高速的数据吞吐能力;为了把高速总线数据传输给用户程序,本发明在主机端优化了内存传输机制,在主机驱动程序使用链式内存池技术,将申请的内存分块进行管理,并在驱动程序和应用程序之间共享内存,保证了驱动程序和应用程序之间高效率的数据交互,使得总线传输到应用程序的消耗最小,如图1所示。
图2说明了传输控制优化后的流程(这里只说明从设备板到主机的传输),图中S0表示空闲,S1表示启动本地传输,接收数据,准备DMA传输,S2表示传输中本地传输开启,DMA传输量设为预设值,S3表示等待,根据可读和可写数据量控制本地传输和DMA传输量。整个传输流程由一个状态机实现,在收到DMA开始的命令后,状态机首先发起FPGA本地传输并接收数据保存到FIFO中,在FIFO中可读数据大于预设值后,设定DMA传输量为预设值,此时发起DMA传输;在传输过程中,状态机一直监视FIFO的数据量,如果可读数据量小于预设值,表示FPGA本地传输的速度跟不上总线传输的速度,就将DMA传输量更改为0,同时FPGA本地传输继续往FIFO中存入数据,这样,PCI Core在传完预设值长度的数据后,就停止等待,直到FIFO中有超过预设值的数据量再更改DMA传输量为预设值。如果可写数据量小于预设值,表示总线速度跟不上FPGA本地传输的速度,此时就停止FPGA本地传输操作,状态机进入等待状态,直到FIFO中可写数据量重新大于预设值。具体过程如下:
(2.1)在收到DMA开始的命令后,状态机首先发起FPGA本地数据发送,然后接收数据保存到FIFO中;
(2.2)在FIFO中可读数据大于预设值后,设定PCI Core的DMA传输量为预设值,开始DMA传输;
(2.3)在传输过程中,状态机一直监视FIFO的数据量,如果可读数据量小于预设值,就将PCI Core的DMA传输量更改为0,同时FPGA本地数据发送继续往FIFO中存入数据;
(2.4)在传输过程中如果可写数据量小于预设值,状态机停止FPGA本地数据传送,进入步骤(2.5);
(2.5)在FIFO中可读数据量超过预设值时,进入步骤(2.2)。
其中预设值可以根据实际情况进行确定,例如可以为48。
图3说明了主机里驱动程序对内存使用的优化,在高速传输的驱动程序里,内存拷贝是很耗费时间的,优化的目的是使数据在DMA传输和应用程序拷贝都使用同一块缓冲区,这样能最大限度的减少时间消耗,提高传输效率。考虑到驱动程序的DMA传输需要使用连续的非分页内存,而应用程序不能从操作系统申请到这样的内存,所以,只能从驱动程序里申请到内存然后再把内存指针共享给应用程序使用,因为操作系统的内存管理机制,在驱动程序里非分页内存是很宝贵的,大块的连续非分页内存很难申请到,为了克服这些困难,本发明采用了多块小内存组成链式内存池的内存管理模式,由链式内存管理模块统一管理,在DMA传输和应用程序请求时为它们分配缓存空间。
图4说明了驱动程序里链式内存使用的流程,管理程序负责申请,分配和释放内存,在应用程序启动的时候,需要通过驱动接口向管理程序申请内存,并设置分块大小,管理程序根据申请的块大小逐块进行内存申请,如果申请失败,则只使用申请成功的部分,并把结果通知应用程序,在内存申请完成后,管理程序实时判断是否有DMA内存请求或者应用程序内存请求,如果有DMA内存请求,就根据读写指针从内存池里分配出一块连续内存返回给DMA;如果有应用程序内存请求,就把有效的地址列表返回给应用程序,由应用程序控制相关的读写指针;链式内存采用循环使用的方式,在最后一块内存用完后,再操作第一块内存,这样能最大限度的保证数据传输速度。具体过程如下:
(3.1)为驱动程序预设一个非分页内存单元长度为A,由应用程序在初始化时通过驱动接口进行申请,A的大小应该大于每次DMA传输的长度;
(3.2)驱动程序根据在收到请求后,循环向操作系统申请以A为大小的非分页内存块,直到申请到应用程序要求的大小;
(3.3)将申请到的各个内存块的起始地址放入列表里,如果没有申请到足够的内存,则保存已申请到的内存块地址列表;
(3.4)设定第一块内存的起始地址作为第一次做DMA传输的写指针;
(3.5)如果有DMA传输请求内存,首先读取需要传输的长度,然后根据DMA写指针察看是否会越过内存块的边界,如果没有越过,则直接返回写指针,如果会越过边界,则把下一块内存的初识地址作为写指针并返回给DMA传输;
(3.6)如果有应用程序申请内存,首先查看是否已经为它申请了内存,如果已经完成,则直接返回内存地址列表,由应用程序控制读写操作,如果还未完成,重复3.1-3.3,然后返回内存地址列表;
其中A的大小可以根据实际情况进行确定,例如可以为8*1024*1024。
表1给出了采用本发明方法后总线传输性能的提升值:
表1 PCI&PCI-X性能测试结果
应用模式 | 主机 | 总线频率 | 位宽 | 传输速度 |
PCI总线 | CPCI工控机 | 66MHz | 64bit | 400MBps |
PCI-X总线 | 服务器 | 100MHz | 64bit | 600MBps |
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (3)
1.一种在PCI总线上实现数据高速传输的方法,其特征在于包括:总线设备端与PCI总线之间的数据传输方法以及PCI总线上所挂接主机的驱动程序内存使用方法,其中总线设备端与PCI总线之间进行数据传输时采用状态机进行控制,方法如下:
(1)在收到直接内存传输开始的命令后,状态机首先发起本地数据发送,然后将接收到的本地数据保存到FIFO中;
(2)当FIFO中的可读数据大于可读预设值后,以该可读预设值作为直接内存传输的数据量进行传输;
(3)在直接内存传输过程中,状态机始终监视FIFO中存储的数据量,如果FIFO中的可读数据量小于可读预设值,则停止直接内存传输,同时本地数据继续存入FIFO中;
(4)当FIFO中的可写数据量小于可写预设值时,状态机停止本地数据传送;当FIFO中的可写数据量大于可写预设值时,状态机重新开始本地数据传送;
通过上述状态机的不同状态切换完成总线设备端与PCI总线之间的数据传输;
PCI总线上所挂接主机的驱动程序内存使用方法如下:
(1)为主机的驱动程序预设一个长度为A的非分页内存单元,由主机的应用程序在初始化时通过驱动接口进行申请,A的大小大于每次直接内存传输的数据量;所述的非分页内存单元为主机操作系统管理的连续物理内存;
(2)驱动程序在收到应用程序的请求后,循环向操作系统申请以A为大小的非分页内存单元,直到申请到的非分页内存单元大小满足应用程序的要求;
(3)驱动程序将申请到的各内存单元的起始地址存入内存块地址列表;
(4)设定内存块地址列表中第一块内存的起始地址作为第一次直接内存传输的写指针;
(5)当有直接内存传输请求时,首先读取需要传输的数据量,然后根据直接内存传输的写指针位置判断该直接内存传输的数据量是否超出该非分页内存单元的边界,如果没有越出则直接返回写指针所在内存地址进行直接内存传输;如果越出则顺序查询后面的非分页内存单元,并将满足数据量传输要求的非分页内存单元的初始地址作为写指针进行直接内存传输。
2.根据权利要求1所述的一种在PCI总线上实现数据高速传输的方法,其特征在于:所述的可读预设值或者可写预设值为48。
3.根据权利要求1所述的一种在PCI总线上实现数据高速传输的方法,其特征在于:所述的A的大小为8*1024*1024。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104332163A CN102521184A (zh) | 2011-12-20 | 2011-12-20 | 一种在pci总线上实现数据高速传输的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104332163A CN102521184A (zh) | 2011-12-20 | 2011-12-20 | 一种在pci总线上实现数据高速传输的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102521184A true CN102521184A (zh) | 2012-06-27 |
Family
ID=46292113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104332163A Pending CN102521184A (zh) | 2011-12-20 | 2011-12-20 | 一种在pci总线上实现数据高速传输的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521184A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324559A (zh) * | 2013-06-27 | 2013-09-25 | 成都林海电子有限责任公司 | 基于FPGA的PCI Express主机到设备的数据传输速度测试方法 |
CN105677491A (zh) * | 2015-12-31 | 2016-06-15 | 杭州华为数字技术有限公司 | 一种数据传输方法及装置 |
WO2016134634A1 (zh) * | 2015-02-27 | 2016-09-01 | 中兴通讯股份有限公司 | 报文接收方法、装置、设备、计算机存储介质及中央处理器 |
CN107301140A (zh) * | 2017-06-27 | 2017-10-27 | 山东超越数控电子有限公司 | 一种利用fpga接口板采用dma进行数据传输的方法 |
CN107315691A (zh) * | 2016-04-26 | 2017-11-03 | 旺宏电子股份有限公司 | 执行存取操作的方法及裝置 |
WO2019072094A1 (zh) * | 2017-10-11 | 2019-04-18 | 晶晨半导体(上海)股份有限公司 | 一种内存分配方法以及多核并发的内存分配方法 |
CN110377426A (zh) * | 2019-07-19 | 2019-10-25 | 苏州浪潮智能科技有限公司 | 一种数据传输方法、系统及相关组件 |
WO2021093249A1 (zh) * | 2019-11-13 | 2021-05-20 | 国微集团(深圳)有限公司 | 外部设备访问计算机内存的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080168191A1 (en) * | 2007-01-10 | 2008-07-10 | Giora Biran | Barrier and Interrupt Mechanism for High Latency and Out of Order DMA Device |
CN101645749A (zh) * | 2009-09-04 | 2010-02-10 | 中兴通讯股份有限公司 | 光传送数据单元解映射装置及方法 |
-
2011
- 2011-12-20 CN CN2011104332163A patent/CN102521184A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080168191A1 (en) * | 2007-01-10 | 2008-07-10 | Giora Biran | Barrier and Interrupt Mechanism for High Latency and Out of Order DMA Device |
CN101645749A (zh) * | 2009-09-04 | 2010-02-10 | 中兴通讯股份有限公司 | 光传送数据单元解映射装置及方法 |
Non-Patent Citations (4)
Title |
---|
季昂,薛斌: "《PCI接口卡中的DMA传输模块软硬件设计》", 《中国传媒大学学报自然科学版》 * |
李正平,徐超,陈丽娟,谭守标: "《高速数据采集卡WDM驱动程序的开发》", 《计算机技术与发展》 * |
李江华,陈淑婷,李云浩: "《基于WDM模型的分散/集聚DMA驱动程序设计》", 《江西理工大学学报》 * |
黄文南: "《PCI总线高速DMA数据传输驱动程序设计》", 《2005年航空试验测试技术学术交流会论文集》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324559A (zh) * | 2013-06-27 | 2013-09-25 | 成都林海电子有限责任公司 | 基于FPGA的PCI Express主机到设备的数据传输速度测试方法 |
CN105991475B (zh) * | 2015-02-27 | 2020-01-07 | 中兴通讯股份有限公司 | 报文接收方法、装置及中央处理器 |
WO2016134634A1 (zh) * | 2015-02-27 | 2016-09-01 | 中兴通讯股份有限公司 | 报文接收方法、装置、设备、计算机存储介质及中央处理器 |
CN105991475A (zh) * | 2015-02-27 | 2016-10-05 | 中兴通讯股份有限公司 | 报文接收方法、装置及中央处理器 |
CN105677491B (zh) * | 2015-12-31 | 2019-07-23 | 杭州华为数字技术有限公司 | 一种数据传输方法及装置 |
CN105677491A (zh) * | 2015-12-31 | 2016-06-15 | 杭州华为数字技术有限公司 | 一种数据传输方法及装置 |
CN107315691A (zh) * | 2016-04-26 | 2017-11-03 | 旺宏电子股份有限公司 | 执行存取操作的方法及裝置 |
CN107301140A (zh) * | 2017-06-27 | 2017-10-27 | 山东超越数控电子有限公司 | 一种利用fpga接口板采用dma进行数据传输的方法 |
WO2019072094A1 (zh) * | 2017-10-11 | 2019-04-18 | 晶晨半导体(上海)股份有限公司 | 一种内存分配方法以及多核并发的内存分配方法 |
US11294720B2 (en) | 2017-10-11 | 2022-04-05 | Amlogic (Shanghai) Co., Ltd. | CMA memory allocation method based on screening marks |
CN110377426A (zh) * | 2019-07-19 | 2019-10-25 | 苏州浪潮智能科技有限公司 | 一种数据传输方法、系统及相关组件 |
CN110377426B (zh) * | 2019-07-19 | 2021-09-17 | 苏州浪潮智能科技有限公司 | 一种数据传输方法、系统及相关组件 |
WO2021093249A1 (zh) * | 2019-11-13 | 2021-05-20 | 国微集团(深圳)有限公司 | 外部设备访问计算机内存的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521184A (zh) | 一种在pci总线上实现数据高速传输的方法 | |
WO2017041567A1 (zh) | 基于软核处理器的fpga多镜像升级加载方法及装置 | |
CN107992436A (zh) | 一种NVMe数据读写方法及NVMe设备 | |
CN101996147B (zh) | 一种双口ram互斥访问的实现方法 | |
CN105183680B (zh) | 实现PCIe接口转CF卡接口的FPGA芯片及方法 | |
CN102135950B (zh) | 基于星型互联架构的片上异构多核系统及其通信方法 | |
CN110119248A (zh) | 数据读写命令的控制方法、存储设备和系统 | |
CN104021109B (zh) | 用于在计算机系统中传递中断的技术 | |
CN105068951B (zh) | 一种具有非等时传输结构的片上系统总线 | |
CN103002046B (zh) | 多系统数据拷贝的rdma装置 | |
EP2717533A1 (en) | Method, network card and hard disk card for accessing to shut-down hard disk | |
CN109471824A (zh) | 基于axi总线的数据传输系统及方法 | |
CN106168934B (zh) | 一种数据传输方法及装置 | |
CN102387184B (zh) | 切换装置和可在切换装置中操作的方法 | |
CN105009100A (zh) | 计算机系统及计算机系统的控制方法 | |
CN105892359A (zh) | 一种多dsp并行处理系统及其处理方法 | |
CN104615386A (zh) | 一种核外高速缓存装置 | |
CN102023947B (zh) | Ieee1394总线与高速智能统一总线的直接接口方法 | |
CN101944075B (zh) | 总线系统、对低速总线设备进行读写操作的方法及装置 | |
CN108256643A (zh) | 一种基于hmc的神经网络运算装置和方法 | |
CN105515673B (zh) | 一种光纤通道节点卡 | |
CN103222286B (zh) | 路由交换装置、网络交换系统和路由交换方法 | |
CN105718396B (zh) | 一种大数据主设备传输的i2c总线装置及其通讯方法 | |
US8909862B2 (en) | Processing out of order transactions for mirrored subsystems using a cache to track write operations | |
CN108390807A (zh) | 一种基于单片机的多机通讯方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120627 |