基于Wishbone和端点IP的PCIE接口设计
扫描二维码
随时随地手机看文章
摘要:介绍了FPGA内嵌的PCI Express硬核端点模块和Wishbone片上总线规范。应用VHDL语言,编程实现了Wishbone总线的主从端口,以及TLP包的编码和解码功能。在FPGA上运行程序并使用Chipscope测试时序波形,验证了接口数据传输的稳定性和正确性。
关键词:PCI Express总线;FPGA;PCIE端点模块;Wishbone
0 引言
当前,基于FPGA实现PCI Express接口有两种方案,一是采用第三方PHY接口器件和FPGA实现;二是采用集成GTP的FPGA来实现。集成GTP的FPGA实现PCI Express接口在链路效率、兼容性测试及资源可用性等方面有其独特的优势。随着技术的发展和对传输数据速率和灵活性要求的提高,将更加趋于利用高性能FPGA(即集成GTP的FPGA)来实现PCIExpress接口功能。但是,要在FPGA上实现PCI Express通信桥接,还需要用户根据PCI Express协议构建自己的软IP或者向第三方或FPGA供应商购买IP核。构建IP核的难题在于其难度较大且开发周期较长;向第三方或FPGA供应商购买的IP,存在专利费用问题。对于一些验证性开发,其重点一般在于应用功能的实现,而希望公共模块(如PCI Express接口)的开发在满足性能的前提下,尽量少花时间和费用,从而缩短开发周期和成本。因此,利用已有可获取资源,实现PCI Express接口成为这类开发中的首选。
Xilinx的V5/V6系列FPGA芯片中已集成了硬核端点的PCI Express模块,提供了PCI Express接口的底层配置,相当于提供了一个专用协议与PCI Express之间的桥梁。在PCI Express硬核端点上集成片上总线,实现PCI Express与应用模块互联,将能更快地实现PCI Express接口的开发。
目前比较常见的片上总线规范有IBM公司的CoreConnect,ARM公司的AMBA和Silicore Corp公司的Wishbone。CoreConnect和AMBA规范复杂,在设计中需要建立连接桥以连接不同IP核。相对于其他两种接口规范,Wishbone接口规范具有简单、高效、易于实现等特点,而且完全免费。因此,本文采用Wishbone总线规范实现PCI Exprpess接口。
1 Wishbone基本原理、Xilinx集成端点IP及TLP包结构
1.1 Wishhone的基本原理
Wishbone最先是由Silicore公司提出的,现在己被移交给OpenCores组织维护。其开放性、简单性和灵活性受到广大设计者的青睐,现在己有不少的用户群体,特别是一些免费的IP核,采用Wishbone标准。除了具备地址/数据总线宽度可变、互联结构可变及仲裁机制灵活等片上总线的共同特点外,Wishhone还包括以下特征:
(1)支持点到点、共享总线、十字交叉和基于交换结构的互联;
(2)支持常用的总线数据传输协议,如单字节读写周期、块传输周期、控制操作及其他的总线事务等;
(3)主/从结构,支持多控制器和64位地址空间,从端部分地址解码;握手协议使得每个核都可以控制数据的传输速度;
(4)用户自定义标记(TAG),确定数据传输类型、中断向量等;
(5)接口简单、紧凑,总线实现的逻辑单元少。
Wishhone采用主端(Master)和从端(Slave)的架构。主端模块发出数据传送请求,然后通过一个接口网络和从端进行数据交换,其系统结构如图1所示。这个接口网络称之为INTERCON,各终端之间访问通过INTERCON,INTERCON内部可根据访问情况采用不同的互连方式,Wishbone将它称为可变互联网络。可变互联网络的连接形式有点对点、数据流、共享总线和交叉总线等。
Wishbone可变的互连方式允许系统设计工程师可以采用不同的IP核互连方式,以满足不同场合的要求。根据需要,本设计采用点对点的总线互连方式。图2给出了点对点的MASTER/SLAVE主从接口图。其中SYSCON为产生时钟和复位信号,TAGN为用户自定义信号。
Wishbone数据传输的握手机制如图3所示。准备传输数据时,Master设置STB_O输出信号为有效(Wishbone设置高电平为有效电平),表示开始对Slave进行访问;当接收完数据,Master的ACK_I信号接收到Slave发出的完成信号,然后Master取消STB_O信号。Slave可以置RTY_O为高,表示Slave现在忙,以后再试;还可以置ERR_O为高,表示出错。在Master和Slave传输数据期间,两端都可以控制数据的传输速度。
1.2 Xilinx集成硬核端点IP结构
Xilinx的端点IP符合PCIe协议V1.1,集成了PCI Express协议中的物理层(PHY)、数据链接层(DLL)和传输层(TLL),其结构框图如图4所示,包含有以下几个接口:时钟及复位接口;事务层接口;管理接口;缓存接口;收发器接口;配置和状态接口。
事务层接口,与用户应用设计连接。在本次设计中连接到Wishbone从接口。
时钟及复位接口,包含DCM所需的反馈时钟。在本次设计中系统参考时钟为100 MHz,用户时钟为62.5MHz。
收发器接口,与GTP相连。包含多条发送和接收链路,每条链路包含一对发送和一对接收信号,发送和接收信号都是差分信号,本文采用X1。
缓存接口,与事务层和数据链路层相连。用来实现数据传输的缓冲。这三个缓存器已在CORE Generator中进行了例化和配置。Block RAM数据通路为64位宽。三个Block RAM接口均与端点模块的其余部分同步运行。每个接口都具备单独的读写地址、数据和控制信号。
管理接口,用于访问端点模块中的各种寄存器和信号,包括PCI Express配置空间、各种控制和状态寄存器。管理接口还包含用于统计数据和监测的输出信号以及一个读取流量控制信用输出的接口。
配置及状态接口包含控制和状态、错误、后端接口配置以及中断端口。
收发器接口、存储器接口以及时钟和复位接口在CORE Generator封装中自动连接。这些接口在封装之外均不可见。
1.3 TLP包结构
PCI Express协议是基于TLP包传输的,在PCIExpress设备之间传输的TLP结构如图5所示。数据发送时,来自软件层/核心设备的核心信息包括头以及数据部分(某些TLP不包含数据),经事务层添加摘要部分,发往数据链路层后附加序列号及LCRC,最后在物理层添加帧开始及结束标志后发送;数据接收时,逐层去掉附加部分,最后将头及数据部分送至软件层/核心设备。
在每个头中含有类型及格式两个字段,它们定义头剩余部分的格式,用来指定事务的类型、头的大小、数据有效载荷是否存在等。事务(在PCI Express请求者和完成者之间进行的操作)包括存储器事务、I/O事务、配置事务和消息事务。事务分为三个类别:posted(不需要响应,不需要返回完成包,存储器写和消息属于此类事务),非posted(需要响应)和完成包。
本文设计的基于Wishbone的PCI Express接口的读写操作针对存储器空间,其中存储器读写操作TLP头的格式如图6所示。类型字段(Fmt)为00000b时表示存储器读或者写;格式字段(Type)为00/01b时表示3DW/4DW的存储器读操作,为10/11b时表示3DW/4DW的存储器写操作。
2 基于Wishboen的PCI Express接口实现
2.1 实现原理
本文基于Xilinx FPGA的PCI Express集成硬核端点模块和Wishhone片上总线,实现了主机和外接存储器问通过PCI Express的接口通信。PCI Express接口基于协议包传输机制,因此,集成端点模块的数据传输均以TLP包的形式进行。实现数据传输可通过以下步骤进行(以PCI Express读传输为例):
(1)待传输数据存储在应用模块中的数据缓存器中,数据缓存器可以使用片外存储器也可以使用片内RAM资源。本设计使用的是片内RAM资源;
(2)数据通过集成在存储器端的Wishbone总线输入到数据缓存区(Tx_ram)中,在数据缓存区(Tx_ram)中根据规定格式形成TLP包;
(3)根据PCI Express协议,将在数据缓存区(Tx_ram)中的TLP包通过集成端点模块发送出去。
PCI Express写传输是上述的逆过程。
其原理框图如图7所示。
2.2 设计买现
Xilinx的V5/V6系列FPGA提供了一个PCI Express硬核端点模块,此端点模块提供了一个PCI Express接口通信的底层配置,但没有包含对TLP包的编码及解码逻辑。因此,需要在设计中实现TLP包的编码及解码逻辑功能。编码是将来自Wishbone片上总线的数据打包成TLP格式存入Tx_ram;解码即是在Rx_ram中提取TLP包的有效载荷。在解码逻辑中,最重要的就是要根据包头的类型字段和格式字段来正确确定事务的类型、头的大小、有效载荷是否存在。
在应用模块的存储器端和FPGA端点IP核之间实现Wishbone的点对点连接,存储器端接口为主端口,与硬核接口端为从端口。实现了32 b/16 b/8 b的单个存储器的读和写以及主机到应用模块间的DMA传输。需要注意的是,在Wishbone读/写操作的时候,一个时钟周期只能进行一个双字的传送,对多个双字进行读写时需要多个时钟周期。
主机到应用模块间的DMA传输包括DMA写操作和DMA读操作,其状态流程如图8所示。
DMA写操作实现的主要方法是主机将TLP包头中的各个字段正确填充,按照32位并组装成TLP包头,通过主机PCI Express接口传输到集成端点硬核。硬核收到数据后,缓存到Rx_ram中,在解码逻辑控制下,根据包头类型(10/11b)及格式字段(00000b)发起Wishbone写操作,将TLP包的有效载荷写入存储器中。
在进行PCI Express的DMA读操作时,数据通过wishbone总线读入,在编码逻辑控制下,数据按照TLP包格式写入Tx_ram中,将数据打包成一个3DW完成包,等待端点模块发送。
2.3 功能仿真
本设计在XUPV5 LX110T开发板上进行了功能验证试验。首先利用Xilinx公司的CORE Generator工具生成PCI Express端点IP核,其主要参数是链路数为X1,基地址0使能,地址类型为32位,访问类型为Memory类型,用户时钟输入为62.5 MHz。编程设计完成后,通过JTAG接口下载到FPGA芯片中,用Chipscope进行测试,波形图如图9~图10所示。
通过数据传输试验测试,Wishhone转PCI Express接口的传输速率能达到80 MB/s以上,系统工作稳定。目前,Wishbone实现了32 b/16 b/8 b的单个存储器的读和写和DMA读写。如能够编程实现Wishbone大字节块的突发传输,传输速率将大大提高,这也是下一步开发的重点。
3 结语
测试试验结果证明,采用Wishbone和端点IP实现PCI Express总线接口,具有较高的通信速率,能满足许多应用的一般通信要求,特别是开发过程简化且极大地缩短了开发时间。这种设计模式能够更加专注于应用功能的实现而不必在一些公共模块(如PCIExpress)上花费更多的时间和成本。另外,本文采用FPGA芯片内嵌PCI Express End point Block硬核来进行PCI Express的设计,实现方式也为相似产品开发提供了有益参考。