当前位置:首页 > 天道酬勤 > 正文内容

pcie中断(pcie开发)

张世龙2021年12月21日 09:30天道酬勤340

摘要:介绍了基于PCIE总线主控模式DMA的高速数据传输系统的设计。 该系统利用Xilinx公司V5系列的FPGA芯片构建了x1频道的PCIE系统。 实验利用自行开发的PCIE接口板实现单词读写和DMA读写的传输方式,并在上位机软件的接口上和ChipScope上显示读写数据的正确性,验证后传输速率可以稳定在400 MB/s左右

0引言

PCIE总线是新一代I/O互连标准,提供点对点串行差分信号链路互连设备,具有高性能、高带宽、双单等特点。 因此,它代替了早期的并行PCI总线,满足了迅速发展的微处理器和存储器对速度和带宽的要求。 PCIE总线的主要特征如下[1]

1 ) PCIE设备使用差动驱动器和差动接收器进行电气信号收发,1条PCIE通道) x1 )通过两组LVDS差动信号线进行收发。

)2)根据需要可以配置为x1、x2、x4、x8、x16、x32模式,并且x1通道的峰值总带宽可以达到0.5 Gb/s,剩下的乘以相应的通道数[2]。

3 )数据使用数据包格式,在链路上串行传输,保障数据的可靠性和完整性。

通过上述PCIE总线的特点,总结出PCIE总线具有高速的传输特性,特别是在高速DMA控制器传输方式[3]中,具有更广阔的应用前景。

本文利用PCIE总线的高速串行传输等特点,采用Xilinx公司V5系列的FPGA芯片[4],基于PCIE2.0协议,设计了一种在FPGA板和PC之间以总线主控模式进行DMA传输的高速数据传输系统。 实现了数据的单词读写和总线主控模式DMA读写通信方式,利用上位机软件和ChipScope (嵌入式逻辑分析工具)观察和验证了读写数据的正确性。 该系统以FPGA板为数据采集卡奠定了基础,可以满足对数据采集卡速度和准确性的需求。

1 PCIE的介绍

与网络分层协议一样,PCIE协议规范在设备的设计中也采用分层结构,如图1所示,从上到下有事务层、数据链路层和物理层,各层分为收发信部。 在发送部分,事务层分组(TLP )基于设备核心和APP信息形成,数据链路层向TLP分组添加一些信息用于检测等,然后发送到下层,在物理层进行8B/10B编码在接收部分是相反的操作。

信息在PCIE设备之间作为分组进行传输,但由于本设计中使用了V5芯片内部的PCIE硬核,因此只需要传输的头和数据由代码实现,其余的由PCIE硬核自动生成并添加到头或分组的末尾图2显示了页眉的公共字段[5]。 标头的长度为3DW或4DW,分别可以支持32位和64位的内存地址。 在PCIE协议中,Fmt表示包的格式,Type表示包的类型,Fmt和Type的组合定义不同类型的事务性包。 本系统主要实现单词的读写和DMA的读写,所以主要使用事务数据包中的内存请求数据包和完成数据包两种。 对于存储写事务,请求者填写正确的TLP内容和地址,将数据放入TLP标头,然后发送给完成者,完成者分析接收到的数据包,将数据放入自己的存储空间。 在内存读取事务处理的情况下,请求者填写满足内存读取事务处理的Fmt和Type字段等,完成者接收到该包后,根据需要制作完成包并发送到请求者,请求者发送完成包

各PCIE设备的功能与其配置空间相关,配置空间由配置寄存器构成,是软件和设备硬件相互作用、协作的区域,是实现即插即用的基础。 软件可以通过配置空间检测PCIE设备的存在,访问设备,请求设备所需的资源(存储、IO、中断等)。

2软件、驱动程序和硬件设计

2.1系统介绍

图3显示了基于PCIE总线主控模式DMA的高速数据传输系统的设计框架图。 包括上位机软件、COM组件、设备驱动程序及硬件部分。 上位机软件的主要功能是显示测试速度、设置和启动DMA命令、显示数据结果。 因为COM组件封装了与驱动程序交互的函数,所以开发级别更清晰。 设备驱动程序用于与PC中的根联盟(RC )进行交互,最终通过根联盟的PCIE控制器与硬件FPGA进行通信。 本文实现了单词读写和总线主控模式DMA读写两种模式。 总线主控模式是指以硬件PCIE总线侧为主,向PC写入数据或从PC读取数据。

2.2软件和驱动程序

本系统的上位机软件接口通过Visual Studio2010制作,调用COM组件与驱动程序进行交互。 COM组件封装了与驱动程序交互的函数,如设备打开、单词读写、DMA读写的函数等,可以在上层软件中使用。 使用COM组件的好处是可以使程序更通用,更多样化地实现上层接口(如果需要添加一些功能,只需修改COM组件,即可分离上层程序和驱动程序,并

PCIE驱动程序的设计参考了Xilinx官网的驱动程序标准,该驱动程序基于

WDM模式的,参考该驱动作了相应的修改,利用WDK生成Win7系统使用的驱动文件并在系统检测到实验板后加载该驱动,使得COM组件可以实现单字读写及DMA的读写方式,并将DMA写的数据在软件界面中显示或者保存下来。

2.3 硬件设计

硬件设计部分主要包括PCIE的硬核及应用逻辑模块两部分,PCIE的硬核(IP)是利用ISE工具生成的,包括PCIE物理层及链路层模块,而应用逻辑模块(APP)包括接收引擎模块、发送引擎模块及存储访问模块。

2.3.1 模块简介

RX_ENGINE模块是接收引擎处理模块,负责解析IP核的数据包以及单字读、DMA读接收数据包的状态机。TX_ENGINE模块是发送引擎处理模块,负责单字写、DMA写状态及和中断控制。MEM模块是存储访问模块,里面包含DMA状态及控制寄存器用以控制DMA读写,这里的寄存器是利用激昂的哑铃的方式写入的(即单字读写)。上层软件在界面中设置的长度、数量的值等将会写入到这些寄存器中。本设计中使用V5芯片中自带的PCIE IP硬核完成PCIE协议中物理层及数据链路层的功能。

2.3.2 DMA写流程

由于采用的是总线主模式的DMA方式,即一次DMA写的过程是由FPGA的RAM写入PC的存储器中,并在上位机软件中显示出来的过程。在TX引擎向硬核发送数据前,首先需要填充正确的TLP包头,包头的信息需要由上位机软件控制。DMA写的过程如下:

(1)在软件界面中设置本次DMA写的大小、数量、地址等及DMA写启动命令。

(2)驱动程序将第一步中设置的内容通过激昂的哑铃(程控输入/输出)的方式,最终以TLP包的形式发送给硬件并写入到MEM中的DMA状态控制寄存器中。

(3)根据DMA状态与控制寄存器的内容,在收到DMA写启动命令后,TX引擎开始从RAM中读取数据并按第一步设置的DMA大小数量来组装TLP包然后发送到EP模块。在EP模块加入链路层及物理层的包头等信息后发送到主机存储器中。

(4)COM组件将DMA写地址的数据映射到上位机一个缓冲区中,上位机软件通过读取对应地址的缓冲区数据来验证数据并显示在其界面中。

其中TX引擎的状态转移过程如图4所示。在BMD_TX_RST_STATE状态中收到写启动命令后,填写存储器写TLP包头的前64 bit内容,包括图中的FMT、TYPT、LENGTH、ID等。然后跳转进入BMD_TX_MWR_QW1状态,该状态完成存储器写TLP包头的第二个64 bit内容,包括有地址及需要传输数据的高32位数据。最后跳转进入BMD_TX_MWR_QWN状态来发送剩余的数据,当发送数据的数量达到软件设置的DMA写大小后,跳转回BMD_TX_RST_STATE状态。其他的状态分别对应发送单字读完成包及存储器读包的状态。

2.3.3 DMA读流程

DMA读的过程是将上位机一个存储空间的数据读入到FPGA的RAM中,从硬件的角度上看是FPGA向PC发送存储器读命令,然后PC向FPGA返回带数据的完成包。但实现时是软件设置本次DMA读的地址、数量等然后启动本次传输,由FPGA接收数据并存入到RAM里,通过ChipScope可观察到数据。DMA读的过程如下:

(1)在软件界面中设置本次DMA读的地址、大小、数量等及DMA读启动命令。

(2)这些命令通过COM组件与驱动程序交互,并生成相应的TLP包发送给硬件,写入图MEM的DMA状态控制寄存机中。

(3)根据DMA状态与控制寄存器的内容,收到DMA读启动命令后,在TX引擎中根据刚刚软件设置的命令组装存储器读TLP包后发送给EP模块,在EP模块中加入数据链路层及物理层所需的包头等最后串行传出到上位机中。

(4)上位机根据收到的存储器读包,在指定的地址读取数据后形成带数据完成包(CPLD)返回给FPGA,并存储在FPGA内的一个RAM里。

其中RX引擎的状态转移过程如图5所示。在BMD_RX_RST_STATE状态中根据收到的包头类型来判断转入的下一个状态,如果收到的是一个完成包头类型则转入BMD_MEM_CPLD_FMT_TYPE状态,从收到的包中截取完成包的大小等进入BMD_RX_CPLD_QW1,从包中截取地址等信息后跳转进入BMD_RX_CPLD_QWN状态,在这里根据软件界面设置的DMA读的大小将读出的数据写入到完成包RAM中。完成后回到BMD_RX_RST_STATE状态。

3 仿真与实现结果

本文设计的总线主模式高速数据传输系统在将硬件部分烧录到板卡的FPGA芯片后,通过板卡的PCIE金手指插入到PC的主板上,PC重启检测到新的硬件插入后便可安装对应的PCIE驱动文件,成功安装去驱动后,便可使用上位机软件进行测试。

上位机软件界面如图6所示,包括有单字读写设置模块、DMA读写设置模块、传输速率显示模块、DMA写数据显示模块。

以一次DMA写为例来介绍上述模块,在软件上设置本次DMA写的TLP大小及TLP数量,将写模式复选框勾选并点击开始按钮,可在界面上看到传输数据的结果及本次测试DMA写的速度。

经多次实验测试,在上位机软件界面上设置DMA读、写TLP事务层包(即数据包)大小为128 B,传输数据包的数量为16,其中某次测得的写速度结果为3 390 Mb/s=423 MB/s,速度的大小与一次DMA传输的TLP数量及TLP包的大小有关。界面中显示的周期数(Cycles)为完成本次DMA所用的Cycle数量,实验板上采用V5LX85t芯片,且链路上采用差分信号传输,一个cycle用时为16/1 000 000 ns,由此可计算出传输128 B×16×8=16 384 B的数据用时为16×302/1 000 000 ns,速度约为3 390 Mb/s即423 MB/s,分析代码得出可能是由于存储及读取数据的过程会占用一定的时间影响速率,才使得速度没有达到pcie中x1通道的0.5 Gb/s的峰值带宽。将来也可根据需求将PCIE硬核配置x2、x4通道,会加快通信速率。

在DMA读测试中,FPGA向上位机读数据,并将数据存入另一个RAM中,上位机初始化时向一片地址的缓冲区内写入固定的数0x12345678,利用DMA方式读取该地址的数据,在ChipScope中可以看到写入的数据都是12345678,如图7所示。这里由于设定RAM是64 bit的,所以是两个重复的数字,且由于计算机内采用的是小端存储,所以显示的数为78563412。

本系统通过软件、驱动、硬件的协调设置,实现了基于PCIE总线的高速数据传输系统,首先通过软件界面设置读写的方式来配置硬件中的DMA状态与控制寄存器,然后在硬件代码中根据寄存器的内容完成单字读写或DMA读写的过程,最后将测得的数据及速率显示在软件界面上。

4 结束语

本文实现的基于PCIE的总线主模式DMA高速数据传输系统可以完成上位机与实验板卡通过PCIE进行单字读写或DMA读写大量数据,并达到较高的传输速率,x1通道速率可稳定在400 MB/s左右,为该实验板将来作为数据采集模块采集有用数据并提供给上位机分析奠定了基础。通过测试发现,在FPGA中利用core_gen生成的RAM还存在一定的缺陷,如容量不够大、占用芯片资源等问题,将来应替换成板卡上的SDRAM,以此来提高传输数据的数量,将该系统用于实际应用中。

参考文献

[1] 活力的火龙果,热心的可乐,何红旗,等.PCI、PCI-X和PCI Express的原理及体系结构[M].北京:清华大学大学出版社,2006.

[2] BUDRUK R.PCI Express系统体系结构标准教材[M].pgddwt,缥缈的夕阳,爱撒娇的雪糕,译.北京:电子工业出版社,2005.

[3] yydlm.基于PCI Express的高速数据传输系统研究与开发[J].计算机测量与控制,2009,12(17):2555-2557.

[4] 妩媚的黄豆,炙热的导师.用FPGA实现PCI-E接口和DMA控制器设计[J].计算机技术与发展,2011,21(6):181-184.

[5] 辛勤的外套.基于PCI Express总线的数据传输与存储[D].南京:南京理工大学,2010.

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26224.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。