PCI-Express总线介绍 接口设计和实现

接口/总线/驱动

1139人已加入

描述

PCI Express总线是新一代的I/O局部总线标准,是取代PCI总线的革命性总线架构。PCI总线曾经是PC体系结构发展史上的一个里程碑,但是随着技术的不断发展,新涌现出的一些外部设备对传输速度和带宽有更高的要求,PCI设计之初并没有考虑这些因素,因此并不能完全满足这些外部设备的需求。PCI Express总线正是在这种背景下应运而生的。

一个PCI Express连接可以被配置成x1、x2、x4、x8、x12、x16和x32的数据带宽。Xilinx公司的Virtex5系列FPGA芯片内嵌PCI-Express-Endpoint BLOCk硬核,为实现单片可配置PCI-Express总线解决方案提供了可能。

本文在研究PCI-Express接口协议和PCI-Express Endpoint Block硬核的基础上,使用Virtex5LXT系列的XC5VLX50T FPGA芯片设计PCI- Express接口硬件电路,现YPCI-Express x4总线数据的传输。

1 PCI-Express总线概述

PCI-Express是一种高性能、通用的I/O互连技术,可以广泛应用于计算和通讯的平台。与传统的PCI/PCI-X总线相比,PCI Express用高速串行接口替代了PCI-X的并行接口;用点到点的基于Switch的交换式通讯替代了PCI-X的基于总线的通讯;用基于包的传输协议(PACketbasedprotocol)替代TPCI-X的基于总线的传输协议。此外,它还引入了一些新的特性:更强的电源管理、服务质量控制(QoS),支持热拔插,以及完善的错误处理和恢复。

1.1 PCI-Express设备/拓扑结构

PCI-Express的典型拓扑结构如图1所示。PCI-Express协议中共定义了三种设备:RootComplex、Endpoint和Switeh。

总线

Root Complex在系统中的位置类似于PCI-X中的主桥,它是I/O层次的根,它将CPU和MM连接至I/O部件。每个Root Complex可以有一个或多个PCI-Express Port(Root Port),每个接口定义一个层次域。Endpoint是PCI-Express的端点设备,可以分为PCI-Express Endpoint和LegacyEndpoint两类。

Switch是PCI-Express的交换设备,可以理解为逻辑上由多个PCI-PCI桥组合而成,每个桥对应于一个SwiSh端口。从配置软件来看,Swi-tch是两个或更多个逻辑的PCI-PCI桥。

1.2 PCI-Express的层次

PCI-Express协议中定义了三层结构:事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(PhysICal Layer)。其结构如图2所示。

总线

事务层主要负责组包和拆包,负责管理基于信用的流控制。

数据链路层主要负责链路的管理和数据完整性的管理,包括错误的检测和错误的纠正。

物理层包含接口的所有电路:驱动器和输入缓冲、并-串/串-并转换、锁相环、阻抗匹配电路,具有接口初始化和维护的功能。物理层可以更进一步细分为逻辑物理层(Logical Physical Layer)和电气物理层(EleCTRical Physical Laycr)。逻辑物理层在发送方向上负责从数据链路层接收包,处理后发送上链路;在接收方向上负责将从链路收到的包经过处理转发到数据链路层。电气物理层是连接到链路的模拟接口,包含每个通道的差分收发器。

1.3 PCI-Express的包

对应于协议定义的三层结构,PCI Express定义了三种包:

(1)TLP:对应于事务层,主要完成协议中定义的存储器事务、I/O事务、配置事务和消息事务。

(2)DLLP:对应于数据链路层,主要用于链路管理的功能,包括和TLP确认相关的ACK/NAK协议、电源管理和流控制信息的交换。在这一层提供了点到点的链路重传机制和链路层的ECC校验,从而提供了可靠的容错机制。

(3)PLP:对应于物理层,能够支持物理层的链路训练,时钟容忍/补偿,自治的硬件电源管理。

2Virtex-5Lxt简介

综合考虑了实现PCI Express总线的周期、难易、成本等因素,最后本文采用了Xilinx公司65nm工艺的Virtex5 LXT系列芯片来实现PCI-Express的总线接口以及应用。

Virtex 5 Lxt PCIE Endpoint block具有PCI-Express的完整功能,完全符合PCIe基本规格v1.1版要求,作为FPGA内部的硬核,它是可配置的PCIe端点解决方案,大大增加设计的灵活性,降低设计的RNE费用,并且支持1x、2x、4x或8x通道的实现,为系统的功能扩张提供了有效的途径。

该系列芯片内嵌PCIE Endpoint block集成了PCIE协议中的物理层(PHY)、数据链接层(DLL)和传输层(TL),同时它还实现了PCI-Express设备的功能配置寄存器,其结构框图如图3所示,包含有以下几个接口:时钟和复位接口、配置和状态接口、电源管理接口、用户接口和传输层接口。该PCIE Endpoint block完成了PCI-SIG兼容性专题研讨会的严格测试步骤,保证了产品的兼容性,降低了风险;集成了Rocket IO-TMGTP收发器,该GTP收发器能提供100Mb/s到3.2Gb/s的串行连接性能,可以支持PCI-Express协议所需的2.5Gb/s的速率,与PCI-Expre-ss协议每通道2.5Gb/s工作模式兼容,这使得它在数据的编解码上满足PCI-Express协议的要求。本文使用该系列中的XC5VLX50T芯片设计PCI-Express接口硬件电路,实现PCI-Express x4的数据传输。

总线

3 PCI-Express总线接口设计

本文的硬件主要就是单片XC5VLX50T实现PCI-Express总线接口,并在该FPGA内设计具体应用,完成PCI-Express总线接口的测试和使用。本文实现的应用有如下几个特性:

(1)主机通过控制FPGA内部的寄存器文件来启动和停止DMA操作,支持endpoint到root的全双工DMA读写。

(2)使用LogICORE产生的Endpoint BLOCk Plus进行PCI-Express总线接口设计。该硬核集成了PCIE协议中的物理层、数据链接层的解析,提供传输层接口(TRN)供设计者对相应的事务层数据包的处理。

(3)PCI-Express总线接口支持x4通道的实现,主机操作系统为嵌入式Linux 2.6.10系统。在Windows XP下也进行PCI-Express接口测试。

FPGA是整个设计的最关键部分,主要实现:PCI-Express硬核;在硬核的用户接口和传输接口实现PCI-Express传输本地总线的时序逻辑;并且在其内部完成DMA控制时序逻辑。FPGA是PCI-Express总线接口和应用模块数据传输的通道。在Host端使用嵌入式的MPC8548作为主机系统应用CPU,设计相应的驱动和应用程序配合FPGA内部代码的调试。图4为该系统的拓扑框图。

总线

使用LogiCORE产生的Endpoint Block Plus中,定义了两个基地址memory空间,一个用于DMA寄存器的操作,一个用于用户逻辑空间。本文主要介绍的就是用户应用层接口的实现,该接口将通过TRN进行相应的事务层数据包的处理。

用户应用层接口主要包括如下几个模块:a.TX Engine模块;b.RX Engine模块;c.Egress Data Presenter模块;d.Read Request Wrapper模块;e.DMA Control/Status Registers模块。这几个模块之间的拓扑关系如图5所示。

总线

TX Engine:该模块主要用于产生和发送事务层数据包:Posted事务包(存储器、I/O、配置读写事务)、non_Posted事务包(该总线事务包分两步进行,首先是发送端向接收端提交总线读写请求,之后接收端再向发送端发送完成包)和completion(完成)包。该模块通过发送posted memory写,non_Posted memory读,和接收completion包来完成DMA的读写请求。该模块的启动由DMA Control/Status Registers模块控制。该模块又包括若干子模块:posted PACket generator模块、non posted packet generator模块、completion packet generator模块和transmit TRN state machine模块,上述三个generator模块均由transmit TRN状态机模块控制,该状态机的控制信号来自Endpoint Block Plus核以及DMA Control/StatusRegisters模块。

RX Engine:该模块主要用于接收Endpoint BlockPlus模块从RX TRN接口送出的事务层数据包,对不同的事务包进行解析,根据相应的包做相应的处理,该模块能处理如下三种事务包:完成包、memory读包和memory写包。该模块又包括如下子模块:接收TRN状态机模块、接收TRN监控模块、接收数据状态机模块以及两个fifo用于存放完成包的接收数据和完成包中目的和源的地址以及数据包的长度,用于设置DMA Control/Status Registers模块中的各个状态。接收TRN状态机模块只负责TRN接口处的数据包的状态和接收收据,送给后面的模块;接收TRN监控模块负责根据不同的TLP包来分配数据和状态,是直接将带数据的完成包的数据写到用户应用接口fifo,还是读请求或写请求TLP包通知TX engine,组成相应的包发送出去或者通知DMA控制器进行相应的DMA传送控制;接收数据状态机模块对接收到的数据进行相应的处理。

Egress Data Presenter:该模块是专门为TX Engine模块提供发送数据的模块,要发送到主机的数据都在该模块中进行处理,它和TX Engine模块间的数据位宽定义为64bit。

Read Request Wrapper:该模块主要用于TX Engine模块和RX Engine模块之间的通信控制接口,本文中设计DMA的读写操作每包可能的数据长度为:1KDW、2KDW、3KDW、4KDW、8 KDW、16 KDW之间可选。该选择是由主机通过写寄存器文件来进行长度策略选择的。

DMA Control/Status Register:该模块主要用于主机系统通过控制FPGA内部的寄存器文件的设置来启动和停止endpoint到root的DMA读写操作。包括一个控制寄存器以及若干个配置寄存器,配置寄存器有主机的目的地址、源地址信息,本地的目的地址、源地址信息,以及每次DMA的数据包长度等信息。由控制寄存器中的bit位的状态来启动所有的状态机的控制,所以控制寄存器是整个操作的关键信号。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分