第2l卷第6期 计算机技术与发展 Vo1.21 No.6 2011年6月 COMPUTER TECHN0LOGY AND DEVELOPMENT June 201l 用FPGA实现PCI—E接口和DMA控制器设计 王嘉良,赵曙光 (东华大学,上海201620) 摘要:PCI—Express接口是第三代总线通信接口标准,它采用点对点串行连接方式,具有高速率和高带宽等特点,这是传 统PCI并行结构所不能比拟的。为了实现FPGA与CPU之间高速相互通信,介绍了一种用单片FPGA实现PCI-Expmss接 口和高速DMA控制器的设计方法,并在Xilinx Virtex一6 FPGA系列平台上实现。运用Xilinx提供的PCI—Express端点硬 核,提出并设计了基于PCI—Express总线的DMA数据传输方案。通过仿真及硬件测试表明,该设计方案成本低、高效,可 满足如lOGb以太网数据帧抓取等高速数据采集及分析系统的需要。 关键词:PCI—Express总线;FPGA;直接存储器访问 中图分类号:TtB9 文献标识码:A 文章编号:l673—629X(2011)06—0181—04 PCI-E Interface Implementation and DMA Engine Design with FPGA WANG Jia-liang,ZHAO Shu-guang (Donghua University,Shanghai 201620,China) Abstract:PCI-Express interface is the 3rd generation bus interface standard,which is point to point serial interconnection with hiIgh speed and high bandwidth.whatthetraditional PCIparallel structure cannot be comparedwin1.Propose a design ofhigh—speed con ̄Bn— nicationwihtCPUthroughthePCI—Expressinterfaceand aDMA enginemethod based on a singleFPGA.Itisimplemented ontheXil・ inx Virtex-6 FleA series platform.Wiht the hard PCI-Express endpoint IP core,the transaction of data through DMA based on PCI- Express busis achieved.Theresults of simulationand hardwaretest showthatitis applicableand call be usedtothe10GbEthemet envi- ronment and other data acquisiiton systems. Key words:PCI-Express bus;FPGA;DMA O引 言 O总线技术,用以取代PCI总线和芯片内部连接,并在 随着网络的飞速发展,人们可获取的信息量日益 2002年提出PCI Express 1.0标准…。与PCI并行总 增长,数据的处理及存储速率的要求也越来越高。万 线相比,PCIe采用差分LVDS串行传输方式,一条数据 兆网(10Gb以太网)的普及,高速存储设备的应用(如 链路(称为PCIe x1)由2对LVDS差分信号线来实现 DDR2,传输速率可达800M)对系统带宽带来极大的 发送和接收,信号传输速率为2.5Gbps。与PCI采用 挑战。而传统的总线架构,虽历经多年发展,但其带宽 共享总线方式不同,PCIe采用点对点连接,设备均可 已经成为制约系统性能的主要瓶颈。文中介绍了一种 以通过专用数据链路直接与总线相连,可以组合成 基于高速的I/O串行互联技术,PCI—Express(简称 x1,)【2,x4,x8,x16及最新x32链路模式。这种总线拓 PCIe),提出了在系统设计中基于FPGA的PCIe总线 扑方式使得PCIe具有很好的扩展性和灵活性。串行 接口设计及应用于该总线的高速DMA Engine设计方 数据传输采用工业标准的8b/10b编码实现数据恢复。 案。 PCIe xl可以提供500MB/s带宽,这相当于普通PCI带 宽的3.78倍 。PCIe总线不但提供了更高的性能, 1 PCI-Express总线简介 更大大减少了接口管脚,降低电路板布线难度,并减少 PCIe总线是Intel公司于1997年提出的第3代I/ 了信号线间产生的互相干扰。 收稿日期:2010—10-28;修回日期:2011一o3一o3 2 FPGA系统设计方案 基金项目:国家自然科学基金(60073053。60133010) 2.1传统FPGA设计方案 作者简介:王嘉良(1986一),男,硕士研究生,研究方向为通信系统、 传统FPGA并不具备LVDS信号驱动能力。一般 SoC设计与验证;赵曙光,教授,博士生导师,研究方向为电子设计自 以PEX 8311桥接芯片实现PCIe物理层接口,再配合 动化、进化电子系统等。 CPLD实现用户逻辑设计 。PEX 8311提供2个端 ・182・ 计算机技术与发展 笫21卷 口,一一 个为兼容PCI Express 1.0标准的PCIe接口,另 一Xilinx PCIe硬核支持64 it数据通路,分别用于 发送和接收数据。该硬核提供6个32_hit基地址寄存 器BAR0~BAR5(Bass Address Register,简称BAR),呵 个为Local Bus总线接口,用于与CPI D相连。Local Bus总线工作于66MHz时钟,32一bit总线宽度,可以提 供266MB/s带宽。同时,PEX 8311还提供了2组 DMA通道 。使用PEX 83l1可以方便地从PCI平滑 过渡到PCIe,从而降低开发成本,因此被广泛使用 。 以根据用户设计需求进行配置。在本设计中使用 BARO和BAR1组成一组64 it地址空间,用于存储外 部CPU访问FPGA内部寄存器地址。使用BAR2和 然而,PEX 8311并不能有效发挥出PCIe高带宽优势, 也缺乏可配置性和灵活性,难以提高系统整体性能。 2.2基于PCIe硬核接口设计 Xilinx新推出Viaex一6系列的FPGA,集成了PCIe IP硬核模块。该模块兼容PCI Express 2.0标准分层 协议(为物理层、数据链路层和事物层,又称传输层), 提供了系统接口(SYS)、外部传输接口(PCI EXP)、配 置接口(CFG)、事物接口(TRN)和物理链路接口 (PL) 。其Vi ̄ex一6 GTX可配置高速串行传输器为 PCIe信号可靠传输提供了保障。文中便是针对该硬 核的事物层提出片上系统的PCIe设计方案。 3 PCI—Express接口及应用层设计 一个基本的高速数据采集系统,由微处理器 (CPU)、FPGA和外部存储器等组成 。CPU与FPGA 通过PCIe总线进行数据传输,FPGA通过DMA方式对 外部存储器进行数据读写操作。文中给出基于PCIe x1传输方式的接口设计方案。 3.1 PCIe接口及事物层设计 较之使用PEX 831l桥接芯片的系统设计 ‘,采 用基于Xilinx的IP核的设计方案,用户可以根据自己 的需求灵活设计面向事物层接口电路,并方便加入特 殊功能,如与内部总线连接、实现DMA传输等。该设 计充分利用FPGA集成度高、可配置性强等特点 ,来 发挥PCIe接口性能。FPGA的PCIe接口设计包括 Xilinx PCIe端点硬核和面向事物层的应用逻辑设计2 个部分,这里将详细给出应用层设计,如图1所示。 f『 PCI—Express hardblock I lane endpoint 。 L l ….I—=『一、、 ~ 抑— 一 i¨ l TR RX TRN TX t t BAR2BRAM&FIFO BAR0BRAM&F1F0 + + I l CPU Access Registers DMAEngineCtrl&Buffer 图1 FPGA的PCIe接口及事物层设计 BAR3组成另一组64-l1it地址空间,用于存储DMA Engine控制器和缓存器地址。通过判断trn—rbar—hit—n [6:0]来区分BAR0和BAR2,其主要代码如下: TRN—RX—MEM—RD64一DWI DW2:begin r q—.baIo一0<:~trn—rbar—hit—n—q[0]; req—bar20<=~trn_—rbar—hitn_q[2]; end 以外部CPU读FPGA内部寄存器为例,FPGA将 收到的PCIe总线l卜数据帧经由硬核的事物层,以64一 D w加 bit带宽送出,应用层通过TRN—RX接收状态机来判断 请求访问的地址空问,然后将请求数据缓写入一个舣 端口的req—fifo I。’;用户逻辑通过读取req—fiof,将有效 的寄存器数据写入另一个双端口data—fifo中 ” ,最后 通过TRN—TX发送状态机发送给硬核事物层。 3.2基于PCIe的DMA Engine设计 通过DMA访问外部存储器的最大优势在于CPU 在配置完DMA Engine后可以继续其他指令操作, DMA Engine会通过请求PCIe总线中断的方式,来完 成数据传输。本设计将PCIe BAR0地址空间存储 DMA Engine控制和缓存器地址,其定义如图2所示。 3l 0 fl 『inc…11,m nfo】 1 rw【31】 dword count【23:0】 fpgamem_address[3 1:O】 L cpu~address 1o【3 1:O] cpuaddress_hi【63:32] 图2 DMA控制器和缓存器设计 DWORD 0[0],run,写1开启DMA; DWORD 0[1 l,int,写I开启DMA中断方式; DWORD 1[31]I-W,写1读foga外部存储器; DWORD 1[23:0]dword count,DMA操作数据个 数,以dword为单位; DWORD 2[31:0]fpga_mem—address,fpga外部存 ¨ 第6期 王嘉良等:用FPGA实现PCI—E接口和DMA控制器设计 end ・183・ 储器地址; DWORD 3[31:0]cpu—address lo,cpu低32位地 址; FPGA的DMA Engine状态转移图如图3所示,分 DMA读操作和写操作2部分。DMA Engine处于RST 状态时,通过读取DMA信息标识符来判断当前是否处 于空闲状态,并从FPGA内部RAM中读取DMA控制 DWORD 4[31:O]epu—address_hi,cpu高32位地 址。 修改PCIe数据帧类型(tip—type<=trn—rd[62: 56]),加入DMA数据帧,使其有别于对BAR的读写操 作,部分代码如下: "define TRNRXDMA'rl。P TYPE 7’bl001010;/¥DMA ——信息(读或写),并进入相应状态READ—ST或WRITE— sT。以CPU写FPGA外部存储器为例,CPU通过PCIe 总线写BARO地址数据来配置并开启DMA Engine。 一_FPGA将发出对CPU的DMA读请求,然后等待CPU 发送DMA数据。此时DMA Engine处于WAIT—FOR— 数据类型 /  ̄efine TRNRX——DMADATA1 10’bO100000000;/} ———DATA状态,等待来自PCIe接口的DMA数据包。同 样,CPU读FPGA外部存储器时,FPGA将发出对CPU 的DMA写请求,并当DMA完成读操作后,等待PCIe 接口发送DMA数据包,并由中断标志位判断是否开启 PCte中断。 DMA操作状态}/ case(state) RsT:begin case(tip—type) TRN_RX—DMA 11 1'YPE:begin state<=TRN_RX—DMA~DATA1; end n TRNRXDMADATA1:begi———end endcase 以同样的方式在TRN—TX状态机中加人 DMA请求,其代码如下: 图3 DMA Engine状态机描述 4仿真及测试结果 为了测试该DMA Engine设计,对FPGA外部64一 bit DDR2 DRAM进行32个dwords(128 bytes)读与写 操作,得到的仿真波形如图4和图5所示。图4是对 DMA进行写操作的PCIe事物层接口波形。图5是对 DMA进行读操作的PCIe事物层接口波形。该设计方 案在questasim 6.3f下验证通过。可以估算出一次 PCIe xl写操作为1720Mb/s,读为1684Mb/s 。 同样,在实际的应用环境中测试本文DMA Engine TRNrr:I(DMA—一—REQ:begin if(一tlp_dma—data—eof) / 数据帧结束标志位 / state<="TRNTXDONE; ——else state<=TRNTXDMA———REQ; 图4 CPU通过PCIe对DMA进行写操作 ・184- 计算机技术与发展 参考文献: 第2l卷 [1]Bhatt A,Technology and Research Labs, lnte]Corporatiob.Creating a PCI Expre— Ss lnterconnect f EB/OL],2002.ht— tp://www.pcisig.corn/speciifcations/ pciexpress/resources/PCI ExpressWhite ———Paper.p 图5 CPU通过PCle读FPGA外部DRAM E21 PCI Express Base Speciifcation,1.Oa ed[S].PC!SIG, 20D3. 设计,也获得比较好的结果。图6就是系统以本文 DMA方式进行4096 bytes读外部存储器的结果。 [3]Design Note:Optimizing PEX8311 PCI Express—to-Local Bus DMA Performance[M].[s_1.]:PLX Technology,2007. [4]Data Book:PEX 8311Detailed Technical Speciifcations[M]. [S.1|]:PLX Technology,2009. [5] 马 萍,唐卫华,李绪志.基于PCI Express总线高速数采 卡的设计与实现[J].微计算机信息,2008(25):116—118. [6]LogiCORE IP Virtex一6 FPGA Integrated Block Data Sheet ’!M].[S.1.]:Xilinx,2009. [7j Li B,Peng Y,Liu D T.A High Speed DMA Transaction Method for PCI Express Devices¨J1.Journal of Electronic Sci— ence and Technologyof China,2009,7(4):94~98. ,[8] 强俊,楚宁,周鸣争.基于PCI EXPRESS总线的视青 图6 DMA读操作及结果 频采集卡的设计[J].计算机技术与发展,2007,17(5):85 -88. 5 结束语 FPGA较ASIC的强大之处,在于灵活性和可配置 [9]李攀,田泽,蔡叶芳,等.基于SOPC的PCI通信接口没 计与实现[Jj.计算机技术与发展,2009,19(9):217—220. [10]张维旭,愤占庄.基于FPGA的异步FIFO设计[J].汁算机 技术与发展,2006,16(7):174—176. 性。文中凭借Xilinx PCIe硬核,很好地实现了PCIe xl 总线接口,并在此基础上加人高速DMA Engine设计, [11]余志强,戎蒙恬,袁丹寿.一 种单端口SRAM构成FIFO的 可以有效地提高系统数据存储效率。 该设计方案通过简单修改也同样适用于32-bit Ai r-宽传输系统设计。 (上接第180页) ASIC设计[J].计算机技术 发展,2008,18(9):59—61. [12]徐君明,裴先登,王海卫,等.高性能计算机I/O技术PCI Express分析[J],计算机工程,2004,30(12):7-8. 备的交互。通过绘制机场图片、飞机位置坐标点和 机图标,在飞行模拟器中实现了飞机位最的实时显示。 采用“双缓冲”技术极大地提高了飞行轨迹的绘制效 率,绘制出的l5‘行轨迹无闪烁,画面刷新速度快,完全 满足显示要求。 参考文献: [1I周长发.c撑面向对象编程[M].北京:电子工业出版社, 2oo7. [5]Nagel C,Evjen B,Glynn J,et a1.c群高级编程[M].第4版. 北京:清华大学出版社,2006. [6] Microsoft MSDN[EB/OL].2008.http://msdn.microsoft. com/library,Microsoft. [7] 闷字晗,常 鑫.在c#中用GDI+实现图形动态显示 [J].计算机技术与发展,2006,16(12):117—118, [8] 张卫华.在GDI+中利用双缓冲技术实现橡皮筋效果[J]. 电脑编程技巧与维护,2009(5):70—80. [9 j Mazdak.Double Buffering With GDI+[EB/OI ].2002-12.ht— tp://www.codeproject.com/GDl—plus/gdiplus.aspx, [2]陈本峰,苏琦.Windows GDI+的研究与应用[J].计算 codeproject. 机应用研究,2003(3):56"59. [1O]齐立波.C#A门经典[M].第4版.北京:清华大学出版 社,2008. [3]Graus C.Starting with GDI+[EB/OL].2003-05.http:// www.codeproject.com/KB/GDI—plus/startinggdiplus.aspx, codeproject. [11]梁斌玉.nlJ u ̄c#之门[M].北京:电子 业出版社,2009. 【l2]周靖. isual c#2010从入门到精通【M].北京:清华大 学出版社,2010. [4]Chand M.GDI+图形程序设计[M].北京:电子工业出 版社,2005.