转载自:https://www.cnblogs.com/chengqi521/p/7094544.html

时间:2014-12-09 来源:西安电子科技大学电子工程学院 作者:姜 宁,陈建春,王 沛,石 婷

摘要 PCI Express是一种高性能互连协议,被广泛应用于网络适配、图形加速器、网络存储、大数据传输以及嵌入式系统等领域。文中介绍了PCIe的体系结构,以及利用Altera Cyclone IV GX系列FPGA实现PCIe接口所涉及的硬件板卡参数、应用层系统方案、DMA仲裁、PCIe硬核配置与读写时序等内容。

PCI Express(PCIe)是一种高性能互连协议,可应用于网络适配、图形加速、服务器、大数据传输、嵌入式系统等领域。PCIe协议在软件层上可兼容于PCI和PCI—X,但同时也有明显的不同。在两个设备间,其是一种基于数据包、串行、点对点的互连,因此所连接设备独享通道带宽。根据使用的版本号和通道数,其性能具有可扩展性。对于PCIe 2.0,每条通道在每个方向上的数据传输速率是5.0 Gbit·s-1。从PCIe×1~PCIe×16,能满足一定时间内出现的低速设备和高速设备的需求。

Altera提供了兼容于PCIe 1.0和PCIe 2.0的解决方案,无论是作为根节点还是端点,都可以通过嵌入在FPGA内部的可配置硬核IP模块实现,而不占用可编程资源,这既节省了资源也提高了应用的可靠性。Altera的IP编译器可以提供×1,×2,×4,×8的通道接口。本文主要介绍采用Cyclone IV GX系列的FPGA来实现×4的PCIe接口所涉及的硬件电气规范、协议规范等。

1 PCIe总线体系和Cyclone IV GX

1.1 PCIe总线体系概述

PCI Express是一种基于数据包、串行、点到点的高性能互连总线协议。其定义了一种分层的体系结构,包括软件层、处理层、数据链路层和物理层。其中软件层是保持与PCI总线兼容的关键,PCIe采用与PCI和PCI—X相同的使用模型和读写通信模型。支持各种常见事物,如存储器读写事物,IO读写事物和配置读写事物。而且由于地址空间模型没有变化,所以现有的操作系统和驱动软件无需进行修改即可在PCIe系统上运行。此外PCIe还支持一种称为消息事物的新事物类型。这是由于PCIe协议在取消了许多边带信号的情况下,需要有替代的方法来通知主机系统对设备中断,电源管理,热插拔支持等进行服务。

1.2 Altera Cyclone IV GX系列FPGA

Cyclone IV GX FPGA采用Altera成熟的GX收发器技术,具有出众的抖动性能和优异的信号完整性。利用灵活的收发器时钟体系结构,可充分利用收发器所有可用资源,实现多种协议。Cyclone IV GX FPGA为根端口和端点配置的PCI Express×1、×2和×4提供唯一的硬核知识产权(IP)模块。因此不用再接入其他专用的PCIe协议芯片,即可实现端到端的高速数据传输。

Cyclone IV系列的FPGA还支持一系列外部存储器,包括DDR2 SDRAM,DDR SDRAM,QDR SDRAM。Altera可提供速度最快、效率最高、最低延迟的存储器控制器,使得FPGA可以接入现有的更高速的存储器件。专用的DQS和DQ引脚在芯片级的布线上进行优化以减少抖动和增大余量上,且固定在芯片四周的特定位置。高速外部存储器在众多应用中是重要的系统组成部分,如视频图像处理,数据通信与存储,以及DMA等。

2 板级系统和部分走线阻抗

2.1 板级系统

充分利用FPGA左右两侧的存储器接口,分别挂两片Micron的DDR2 SDRAM颗粒,作为DMA缓存。FPGA的下侧是高速收发器接口,共有4组GXB[3:0],分别经差分链路接入PCIe ×4金手指。其中GXB[3:2]是复用接口,通过改变T节点的耦合电容,可接入两路高速ADC。FPGA上侧接口包括USB PHY、千兆以太网PHY、串口、SD卡以及VGA接口等。FPGA有3个时钟输入,分别是:(1)来自PCIe接口的参考时钟PCIE_REFCLK。(2)来自专用时钟模块的GXB_REFCLK。(3)来自25 MHz有源晶振的SYM_CLK。

2.2 关键走线的阻抗控制

图2是PCB叠层结构示意图,其中L1,L3,L6,L8是信号层;L2,L7是地层;L4,L5是电层。信号层分别参考临近的地层或电源层。其中PCIe链路仅在L1和L8布线,基于以上叠层结构,确定PCIe接口的100 Ω差分阻抗走线的线宽和线间距分别为4 mil(1mil=0.0254 mm)和8.1 mil,差分线长容差在5 mil之内。

DDR2 SDRAM的布线按照SSTL_18标准,DQ/DQS信号在L3和L6层,确定50 Ω单端走线线宽5.3 mil,等长控制在10 mil之内。时钟走线是100 Ω差分阻抗,布线时放在顶层和L6层。在时钟走线过孔附近打上接地过孔,作为信号回流路径,以尽量减少阻抗不连续对信号完整性造成的影响。

3 PCIe应用层设计方案及仿真

3.1 PCIe IP核结构

Altera的PCIe硬核IP包含处理层,链路层和物理层所要求的全部功能,以及大多数的可选功能。只需在IPCompiler中经过简单的参数设置即可生成全功能的IP模块,如果是作为端点设备,可以使用Avalon-ST接口或Avalon—MM接口适配器,将应用层映射为处理层的TLP。Avalon—ST适配层将应用层的Avalon—ST接口映射到PCIe处理层的TLPs。

3.2 应用层设计

图4左侧是应用层的方案图,主要包含配置模块、硬核IP模块、时钟管理模块、DMA读写控制与仲裁模块、任务驱动模块等5部分。

设计采用64位Agalon—ST接口,这样供应用的层使用的时钟pld_clk与内核时钟同频。TLPs分为Header、PayLoad和ECRC 3部分。其中TLP的数据包头指出了数据包的类型,路由方式,有效载荷长度,目标地址,设备ID,功能ID,总线ID等内容,而数据包后还可生成与校验有关的ECRC信息,这些特征均有助于增强传输过程中数据的完整性与可靠性。图5是一个以4双字长度为例的数据接收的时序图,其中rx_st_data和tx_st_data表示64位宽度的读写数据端口,rx_st_sop和tx_st_sop表示数据包起始标志,rx_st_eop和tx_st_eop表示数据包结束标志。应用层可根据这些数据和标志位实现TLP接收与发送同步。

设计中还包括链式DMA,用于FPGA外部存储与系统存储器的数据传输。通过DMA访问外部存储器的最大优势在于,CPU配置完DMA状态机后可继续执行其他指令操作,然后DMA状态机会通过请求PCIe总线中断的方式来完成数据传输。在用DMA时需要设置两个基址BAR2和BAR3最小为256 Byte。DMA主要分为读操作、写操作以及仲裁3部分。初始条件下,DMA处于复位状态,通过读取DMA信息标示符来判断当前是否处于空闲状态,并从FPGA内部读取DMA控制信息,并相应的进入读操作或写操作。以CPU写FPGA外部存储器为例,CPU通过PCIe总线写BAR0地址数据来配置并开启DMA Engine。FPGA将发出对CPU的DMA读请求,然后等待CPU发送DMA数据。此时DMA Engine处于WAIT_FOR_DATA状态,等待来自PCIe接口的DMA数据包。同样,CPU读FPGA外部存储器时,FPGA将发出对CPU的DMA写请求,并当DMA完成读操作后,等待PCIe接口发送DMA数据包,并由中断标志位判断是否开启PCIe中断。状态转移如图6所示。

在端点存储器方面,2片16位的DDR2 SDRAM并接构成一个32位的FPGA片外存储器,并根据DDR2SDRAM芯片手册在Altmemphy向导中配置好相关时序与延迟参数,即可生成DDR2 SDRAM控制器。在做电路图设计时,由于引脚驱动能力的问题,关键是FPGA对DDR2 SDRAM的引脚在连续的区域内不能超过一定数量,最好能约束引脚区域,全编译一遍后由软

件自由分配,再由人工作适当调整,直到没有严重警告。

3.3 数据收发仿真测试

当用PCIe IP Compiler创建一个PCIe的硬核IP时,会生成一个用户可修改的测试文件顶层以及根联合体模型。这样就对测试应用层接口功能提供了一个简单的途径,只需在测试文件中做一个模块例化,即可构建一个简单的PCIe系统测试平台。

如上共15个寄存器,其中tl_cfg_add和tl_cfg_ctl分别表示要更新的寄存器地址和对应的寄存器数据,tl_cfg_sts是配置的状态。利用tl_cfg_ctl_wr和tl_cfg_sts_wr的跳变边沿,由此可知对应寄存器的内容已发生更新,以此来确定数据的安全采样时机。

如上信号tx_st_sop0的跳变启动了一个TLP数据包的开始。应用层参考tx_stream_read0信号开始往数据端口写入数据,其中前两个数据是TLP的包头。分解成双字格式为:0x40000020,0x010800ff,0x000001880和0x00000000。即这是一个32位地址的写存储器TLP,数据长度为32双字。当tx_stream_read0变为低电平2个周期后应停止写入数据,直到tx_stream_read0再次变为高电平2个周期后可继续写入数据。

如上信号rx_st_sop0出现高电平表明一个TLP数据包的开始。rx_st_data0的前两个数据是TLP的数据包头,分解为双字后是:0x4a000020,0x00000080,0x01080270和0x000 00000。由这些包头信息可知这是—个带数据的完成TLP,完成者ID是0x0000,请求者ID是0x0108。且其后含有32个双字的数据,第一个双字是0xaaa00001,第二个双字是0xaaa 0002,直到0xaaa0020。rx_st_eop0在最后一个数据0xaaa0020aaa001f出现时发生跳变,表明TLP数据包结束。

4 结束语

仿真结果表明,使用Altera Cyclone IV GX系列FPGA搭建的PCIe接口能够方便地实现高速数据传输应用。随着器件的发展和IP核的开发,多通道的PCIe总线技术将会迅速发展,并对大数据、高速数据提供安全可靠的传输管道。

转载自:http://blog.csdn.net/Calvin790704/article/details/54091935

基于FPGA的PCIe接口实现(具体讲解了数据流向)相关推荐

  1. 基于FPGA实现PCI-E接口和DMA控制器设计

    随着网络的飞速发展,人们可获取的信息量日益增长,数据的处理及存储速率的要求也越来越高.万兆网(10Gb以太网)的普及,高速存储设备的应用(如DDR2,传输速率可达800M)对系统带宽带来极大的挑战. ...

  2. 基于FPGA实现SPI接口(配置或通信)

    基于FPGA实现SPI接口(配置或通信总线) 1)总线简介 串行外设接口(SPI)是微控制器(FPGA)和外围IC(如传感器.ADC.DAC.移位寄存器.SRAM等)之间使用最广泛的接口之一.主要用于 ...

  3. 基于FPGA实现IIC接口(EEPROM)

    1 IIC应用领域 在嵌入式系统开发过程中,IIC占据非常重要的地位.IIC通讯接口能到搭载较多的从设备,从而实现与多个从设备进行通讯,在板级通讯中是一种比较常用的通讯接口.笔者通过IIC接口实现FP ...

  4. 基于FPGA实现PCIE IP功能仿真

    基于FPGA实现PCIE IP功能仿真 1 开发工具 modelsim simulator或vivado simulator,本设计采用modelsim进行仿真. 2 参数配置

  5. 基于FPGA实现DAC8811接口(正弦波)

    1 应用领域 基于FPGA实现DAC8811接口参考设计较少,网络资源都是基于单片机实现DAC8811接口控制,但是在特殊场合必须要使用FPGA实现:因为FPGA不仅具有容量大,逻辑功能强的特点,而且 ...

  6. 基于FPGA的VGA接口设计(三)

    关于VGA系列文章的所有链接: 基于FPGA的VGA接口设计(一) 基于FPGA的VGA接口设计(二) 基于FPGA的VGA接口设计(三) 结篇   在之前的文章中介绍了有关VGA的扫描方式.行场同步 ...

  7. 基于FPGA的USB接口控制器设计(VHDL)(中)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第二篇,中篇,USB通信原理.USB 系统开发以及设计实例.话不多说,上货. 之前有关于 Veril ...

  8. 基于FPGA的SSI接口协议实现

    基于FPGA的SSI接口协议实现 SSI 是一种主机和从机点对点的通信接口,其中从机可以是具有 SSI 协议的各种传感器,例如磁致伸缩位移传感器.编码器等. SSI协议采用主机主动式读取方式,从机根据 ...

  9. 基于FPGA的USB接口控制器设计(VHDL)(上)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第一篇,上篇,USB 接口简介 以及 USB 体系结构.话不多说,上货. 之前有关于 Verilio ...

最新文章

  1. Linux Centos 上一些常用的命令
  2. 0x01.基本算法 — 位运算
  3. 慧算账全面升级,V2.2版本带来极致体验
  4. 【.Net Micro Framework PortingKit - 03】调试初步:点亮LED灯
  5. 同类分析比较工具 google trend
  6. Linux系统简单介绍和基本命令
  7. Js-01. 语法、关键保留字、变量
  8. WCF 服务中元数据的地址问题
  9. 泊松图像融合算法代码实现_部分多曝光图像融合算法(含少数通用图像融合算法)代码下载链接...
  10. Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
  11. 倾斜摄影模型(.osgb)中心点位置的确定方法(SuperMap idesktop)
  12. java FTP获取文件夹中所有文件
  13. 四 解决问题1 只列式不计算机,小学六年级数学下册期末试题人教版
  14. 坐标求四面体体积_四面体体积公式
  15. MySQL中出现Duplicate entry 'XXX' for key 'PRIMARY'解决方案
  16. C++:高斯坐标,大地坐标转经纬度
  17. COCA单词整理(1-1000)
  18. JS判断pc mobile几种方式
  19. 康乃德生物拟最高募资1.8亿美元:产品尚未上市,累计亏损11亿元
  20. java游戏 暴雨梨花,《梦幻西游》新足迹暴雨梨花和踩浪花游戏效果

热门文章

  1. 苹果登陆代理方法didCompleteWithAuthorization没有调用,didCompleteWithError没有走
  2. 数字孪生在制造业的7种应用
  3. 微服务理论与实践[1]-什么是微服务
  4. Qt调用exit()、quit()不生效问题
  5. 11个程序员必备简捷开发辅助工具
  6. 英语-专业论文写作的八大特征
  7. jsencrypt-RSA加密
  8. 数据泄露的原因是什么?如何保护数据安全?
  9. 加速想象力 AR/VR 训练营(无锡站)签约挂牌仪式成功举行
  10. 腾讯全面升级员工职级体系(附BAT薪资职级对比)