2024年5月28日发(作者:赫灵珊)
PCI-Express总线的接口电路设计
王福泽 (天津工业大学)
一、 课题背景
计算机I/O技术在高性能计算发展中始终是一个关键技术。其技术特性决定
了计算机I/O的处理能力,进而决定了计算机的整体性能以及应用环境。从根本
上来说,无论现在还是将来,I/O技术都将制约着计算机技术的应用与发展,尤
其在高端计算领域。近年来随着高端计算市场的日益活跃,高性能I/O技术之争
也愈演愈烈。当计算机运算处理能力与总线数据传输速度的矛盾日益突出时,新
的总线技术便应运而生。在过去的十几年间,PCI(Peripheral component
Interconnect)总线是成功的,它的平行总线执行机制现在看来依然具有很高的
先进性,但其带宽却早已露出疲态。PCI总线分有六种规格(表1所示),能提供
133MBps到2131MBps的数据传输速率,而对于现有高性能产品例如万兆以太网
或者光纤通信,传统的PCI的数据传输速率早已入不敷出
表1 PCI总线六种规格
总线类型
PCI32位
PCI32位
PCI-X 32位
PCI-X 32位
PCI-X 32位
PCI-X 32位
对于64位总线实现,上述所有带宽加倍仔细分析传统的PCI信号技术,可
发现并行式总线已逐渐走近其性能的极限,该种总线已经无法轻易地提升频率或
降低电压以提高数据传输率:其时钟和数据的同步传输方式受到信号偏移及PCB
布局的限制。高速串行总线的提出,成功的解决了这些问题,其代表应用就是
PCI Express。PCI Express采用的串行方式,并且真正使用“电压差分传输”
即是两条信号线,以相互间的电压差作为逻辑“0”,“1”的表示,以此方式传输
可以将传输频率作极高的提升,使信号容易读取,噪声影响降低。由于是差分传
输,所以每两条信号线才能单向传送1比特,即一根信号线为正、另一根信号线
为负,发送互为反相的信号,每一个“1比特”的两条信号线称为一个差分对。
按PCI Express技术规范规定,一个差分对的传输速率为2.5Gbps。实际使用中,
总线形式
并行
并行
并行
并行
并行
并行
时钟频率
33MHz
66MHz
66MHz
133MHz
266MHz
533MHz
峰值带宽
133MB/s
266MB/s
266MB/s
533MB/s
1066MB/s
2131MB/s
每条总线上板卡插槽数
4-5
1-2
4
1-2
1
1
[4]
。
对于64位总线实现,上述所有带宽加倍
则要使用两个差分对作为一个条链路,分别用做发送和接收。因为有了这样的机
制,使得数据带宽是可以弹性调配的。根据相关标准PCI-Express总线能够以
xl/x2/x4/x8/x12/x16/x32进行传输(如表2所示),可提供5Gbps到160Gbps的
传输带宽。当系统内某一通道需要更高频宽时,可以机动调度多个链路给该通道,
让其传输频宽提升,以适应一时激增的数据传输需求
[1]
。
表2 PCI-Express多链路传输速率表
PCI Express链路
宽度
传输带宽(Gb/s)
有效带宽(Gb/s)
5.0
4.0
10.0
8.0
20.0
16.0
40.0
32.0
60.0
48.0
80.0
64.0
160.0
128.0
X1 X2 X4 X8 X12 X16 X32
8b/10b编码使实际有效数据带宽损失20%,每链路包含一对发送/接收模块,每模块单项
传输带宽2.5Gb/s
除了传输方式的改变外,PCI Express还有一个更有意义的改变,即连接方
式的改变。PCI Express采用点对点连接方式,较PCI的共享总线方式是一个重
要的进步。对于PCI的共享总线方式,PCI总线上在某一时刻只能有一个设备进
行通信,一旦PCI总线上挂接的设备增多,每个设备的实际传输速率就会下降,
性能也得不到保证。而PCI Express则采用一种较为先进的连接方式,以点对点
的方式处理通信,每个设备在要求传输数据时建立独立的传输通道,对于其它设
备这个信道是封闭的,这种操作方式保证了通道的专有性,避免其它设备的干扰,
使信号的质量和可靠性增加。由于是点对点的关系,也很好的保证了其扩展性。
由于PCI-Express只是扩展总线,与操作系统无关,也可保证其与原有PCI的兼
容性,给用户的升级带来了方便。下图为PCI-Express的拓扑结构。
图1 PCI-Express系统拓扑结构
PCI Express不但具有高性能的传输速率,而且其通用性也有重要的意义。
由于其通用的模式,不仅可用于北南桥和其它设备的连接,也可以延伸到芯片组
间的连接,甚至也可以用于连接图形芯片。这样整个计算机的I/O系统将重新统
一起来,将更进一步的简化计算机系统,使其具有更强的通用性。从目前己经显
现的特点看,PCI Express一改传统PCI的并行总线架构,因此比其它I/O技术
有着更为领先的带宽优势,随着时间的推移有逐步取代PCI和PCI-X的趋势。PCI
Express被广泛地认为是一项革命性的总线技术,其重要性可以满足不同使用者
的需求。随着未来持续增加的带宽需求,PCI Express具有广泛的应用前景
[2]
。
二、 基于FPGA的PCI-Express接口具体设计方案
本设计将采用Xilinx公司最新的Virtex5LXT设计平台,使用了两个用于实现
PCI Express 功能的集成端点模块,其中一个模块(主控模块)具有配置另一个
模块(从属模块)的功能。数据可以在这两个集成端点模块之间双向(即在全双
工模式下)流动。该设计的用户接口是通过本地链路 (LL) 接口提供的。该设计
能够在 x1、x2、x4 和 x8 通道配置下操作
[3]
。
设计功能如下:
• 用户接口的本地链路成帧接口
♦ 64 位数据总线宽度与 3 位提醒总线
♦ 包化接口,带用于标记包的帧起始 (SOF) 和帧结束 (EOF)
• 传输和接收方向用户接口的包中断特性
• 帧错误检测支持
• 多通道配置支持:x1、x2、x4 和 x8
• 每通道 1.62 Gb/s 或更高的吞吐量
• 自动初始化、恢复与通道维护,对用户应用是透明的
• Virtex-5 LXT 器件中的集成端点模块
IP核及其应用说明
该设计的完整框图如图3所示。两个端点可以直接通信,其中一个模块(主
控模块)具有配置另一个模块(从属模块)的功能,数据可以在两个集成端点模
块之间双向流动,用户接口由本地接口提供。
图3 基于PCI-Express的点到点连接结构框图
其中主控端可以在本地自行配置,另一端作为从属端,由主控端通过
PCI-Express链路进行配置。进行配置后,该设计便已经准备好可以在全双工模式
下进行数据传输操作了。设计的用户接口符合本地链路协议的要求。在传输期间,
用户提供的本地链路帧在前往集成端点模块进行传输之前,会先被转换成传输层
包(TLP)。在接收期间,来自集成端点模块的TLP会被转换正本地链路帧,而数
据以及其他控制信号将通过本地链路接口传送给用户,因此,PCI-Express会分为
三个架构模块:配置IP(config IP)、Context IP传输和Context IP接收。
配置IP模块
配置IP模块负责在本地配置主控端,并通过 PCI Express 协议链路配置从
属端。配置完成后,会触发 LINK_READY,以表明链路已准备好可以进行数据传
输了。配置期间,将在主控端和从属端设置最大有效载荷大小。配置 IP 会根据
选择的用户设计选项设置集成端点模块的最大有效载荷大小 (MPS),如果是设计
选项 1,则设置为 512 字节,如果是设计选项 2,则设置为 1024 字节。
Context IP传输模块
Context IP 传输模块采用存储转发技术原理,通过协议链路以存储器写
TLP 的形式传输用户帧。存储器写 TLP 标头中的 TAG 区段未经过定义,可以包
含任何值,因此可用于存储帧起始、帧结束、帧中断等标记,这些标记有助于在
收到结束信号时重建本地链路帧。
传输器逻辑可将从用户处传来的数据存储在 FIFO 中。FIFO 的容量等于为
选定设计选项设置的MPS。长度计数器会对有效载荷的长度进行计数,有效载荷
的长度用于建立 TLP 标头中的长度区段。计数器在达到最高计数值(MPS = 512
时为 511, MPS = 1024 时为 1023)后会归零。帧的长度会存储在长度缓冲器
内。Context传输框图如下图所示:
图4 Context传输框图
Virtex-5 器件中的内置 FIFO 用于进行存储。如果数据传输之间的链路断
开(LINK_UP 信号变为低),则当前存储在缓冲器内的所有数据都将丢失。由于
必须重新进行配置,因此可以将数据传输之间的链路断开视为复位。
如果用户帧大小小于在集成端点模块中设置的 MPS,整个帧将作为单个
TLP 进行传输,。
Context IP 接收
该模块(如图5)可接收来自传输层接收接口的 TLP,然后提取其中的有效
载荷。从TLP的TAG区段提取的标记位将被写入到接收端 FIFO 的数据奇偶位输入
区段。提取的数据以及相应的本地链路成帧信号会被发送给接收端的用户。
[6]
图5 Context IP 接收框图
-Express端点IP核说明
Xilinx 提供的 Endpoint Block Plus for PCIe 解决方案适用于 Virtex™-5
LXT/SXT FPGA 架构,是一种可靠的高带宽可缩放串行互连构建模块。其顶层功
能模块如图6所示,从中可以看出,核接口分为系统(SYS)接口、PCI-Express
(PCI-EXP)接口、配置(CFG)接口以及事务(TRN)接口。
图6 顶层功能模块和接口
核使用数据包在各模块之间交换信息。数据包在事务层和数据链路层形成,
用来承载从发送元件到接收元件的信息。传输的数据包中包括在各层处理数据包
所需的必要信息。在接收端,各层接收元件处理输入的数据包,剥取相关信息,
然后将数据包传送到下一层。于是,接收到的数据包从其物理层表现形式转换为
数据链路层表现形式和事务层表现形式。
Endpoint Block Plus for PCIe 核包括顶层信号接口,这些接口按接收方
向、发送方向和双向共用信号分组。下面主要对各个接口进行分别介绍。
系统(SYS)接口
系统 (SYS) 接口信号由系统复位信号 sys_reset_n 和系统时钟信号
sys_clk 组成,如下表所示:
表3 系统接口信号
功能 信号名称 方向 描述
系统复位 Sys_reset_n 输入 异步低有效信号。
系统时钟 Sys_clk 输入 参考时钟:100MHz或250MHz。
系统复位信号是异步低有效输入信号。sys_reset_n 的有效置位致使整个核(包
括Rocket I/O GTP和Rocket I/O GTX收发器)硬复位。复位信号发出后,核尝
试进行链路初始化并恢复到正常工作状态。在典型的端点应用中,通常存在应连
接到sys_reset_n的边带复位信号。系统输入时钟的频率必须是100MHz或
250MHz,在Core Generator的GUI中选定。PCI-Express系统的时钟控制方式
有两种:其一就是使用同步实在哦好难过控制,其中所有器件共用一个时钟源,
另一种是使用非同步始终控制,其中各器件使用自己的时钟源
[7]
。
PCI-Express接口
PCI Express (PCI_EXP) 接口信号由按多个通道组织的收发差分信号对组成。每
个 PCI Express 通道由一对发送差分信号 {pci_exp_txp、pci_exp_txn} 和一
对接收差分信号 {pci_exp_rxp、pci_exp_rxn} 组成。一通道核仅支持通道 0;
四通道核支持通道 0-3;八通道核支持通道 0-7。
事务接口
事务 (TRN) 接口为用户设计提供生成和使用 TLP 的机制,分为共用事务接
口、发送实物接口以及接收事务接口。
配置接口
配置 (CFG) 接口供用户设计用来检查 Endpoint for PCIe 配置空间的状
态。用户提供一个 10 位配置地址,该配置地址选择 1024 个配置空间双字
(DWORD) 寄存器之一。端点经 32 位数据输出端口返回所选寄存器的状态。
三、 PIO传输测试
PCI Express 系统主 CPU 通常使用程控输入输出 (PIO) 事务来访问 PCI
Express 架构中的存储器映射输入输出 (MMIO) 和配置映射输入输出 (CMIO)
位置。Endpoint for PCI Express 接受存储器和 IO 写事务,并使用带数据完
成型事务来响应存储器和 IO 读事务。
由 CORE Generator 生成的 Endpoint for PCIe 中随附 PIO 示例设计(PIO
设计),可以通过业已成熟的现成设计即可方便地构建系统板,进而验证板的链
路和功能。本测试将继续使用Virtex5芯片开发板作为硬件,调用其内核实现测
试。图7为PCI-Express总线的架构组件。
图7 PCI-E系统概述
当 CPU 发出向 MMIO 地址存储寄存器的命令时,数据向下游移动。根联合
体 通常会生成一个具有相应 MMIO 位置地址、字节使能和寄存器内容的存储器
写 TLP。Endpoint 接收存储器写 TLP 并更新相应的本地寄存器后,事务即终止。
当 CPU 发出从 MMIO 地址加载寄存器的命令时,数据向上游移动。根联合
体通常会生成一个具有相应 MMIO 位置地址和字节使能的存储器读 TLP。
Endpoint 在收到存储器读 TLP 后会生成带数据完成型 TLP。完成包传送到根联
合体,有效载荷加载至目标寄存器后,事务即完成。
图8所示为 PIO 设计的各种组件,分为四大部分:TX 引擎、RX 引擎、存
储器访问控制器和电源管理关闭控制器。
图8 PIO 设计组件
接收通路
图9所示为 PIO_64_RX_ENGINE 模块。模块的数据通路必须与正在使用的核
的数据通路相匹配。这些模块与 Endpoint for PCIe 事务接收 (trn_r*) 接口
相连接。
图9 Rx 引擎
PIO_64_RX_ENGINE 模块接收并解析输入的读和写 TLP。RX 引擎解析 1
DWORD 的 64位可寻址存储器和 IO 读请求。RX 状态机从 TLP 中提取所需信息
并将其传送到存储器控制器。 RX 引擎解析 1 DWORD 的64 位可寻址存储器和
IO 写请求。RX 状态机从 TLP 中提取所需信息并将其传送到存储器控制器。
发射通路
图10所示为 PIO_64_TX_ENGINE模块。模块的数据通路必须与正在使用的
核的数据通路相匹配。这些模块与核事务发射 (trn_r*) 接口相连接。
图10 Tx 引擎
PIO_64_TX_ENGINE模块为接收到的存储器和 IO 读 TLP 生成完成包。PIO
设计不生成出站读或写请求。不过,用户可以添加此功能,以进一步定制设计。
PIO_64_TX_ENGINE 模块生成完成包来响应 1 DWORD 的 64 位可寻址存储器和
IO 读请求。生成该完成包所需的信息会传送到 TX 引擎。完成包发出后,TX 引
擎将 compl_done_i 输出置为有效,指示 RX 引擎可将 trn_rdst_rdy_n 置为有
效并继续接收 TLP。
Endpoint 存储器
图11 EP 存储器访问
图11所示为 PIO_EP_MEM_ACCESS 模块。此模块包含 Endpoint 存储器空
间。PIO_EP_MEM_ACCESS 模块处理从入站存储器和 IO 写 TLP 写入存储器的数
据,并使用存储器中的数据读来响应存储器和 IO 读 TLP。EP_MEM 模块根据从
RX 引擎接收到的信息,处理 1 DWORD 的 64 位可寻址存储器和 IO 写请求。存
储器控制器在处理写请求期间会将 wr_busy_o 输出置为有效,以指示其处于忙
碌状态。1 DWORD 的 64 位存储器和 IO 读请求均根据以下输入处理。读请求处
理完毕后,数据在 rd_data_o[63:0]上返回。
PIO 读事务
图12所示为对 PIO 设计的连续存储器读请求。完整接收第一个 TLP 后,
接收引擎将 trn_rdst_rdy_n 置为无效。只有发射引擎将 compl_done_o 置为有
效,指示第一个请求的完成包已成功发送后,才会接受下一个读事务。
图12 连续读事务
PIO 写事务
下图所示为对 PIO 设计的连续存储器写请求。仅当存储器访问单元将
wr_busy_o 置为无效,指示与第一个请求相关的数据已成功写入存储器窗口后,
才会接受下一个写事务。下图为逻辑分析仪输出的写事务时序图
图13 连续写事务
四、 测试结论与总结
PIO 设计展示了 Endpoint for PCI-Express 及其接口功能。经过读写事务
的测试以及收发波形的分析对比,可以得出结论:通过Xilinx Virtex5 LXT平
台设计的PCI-Express总线接口完全符合协议的标准,设计达到与其预期目标。
经过两个多月的学习和开发工作,我受益匪浅。不仅学会了关于Xilinx FPGA
的基本设计流程和方法,还深刻地理解了PCI-Express总线的拓扑结构及其特
性,并且对ISE10.1以及Verilog HDL设计语言也进行了一定程度的学习,对硬
件的电子开发技术基本入门,在理论和实践两方面都受益颇多。于此同时,此项
难度巨大的设计工程也对我的意志有了一定的磨练,经历多次的失败和错误之后
才得出此项成果,深感来之不易。
本设计经过传输测试后证明,已经达到PCI-Express总线的传输标准。采用此设
计可以有效地缩短研发周期,降低研发风险。但此类的开发板一般价格较高,并
不适合大批量应用。此为其不足之处。
五、 主要参考文献
[1]刘福奇,刘波.Verilog HDL应用程序设计实例精讲.北京:电子工业出版社,
2009
[2]马鸣锦,朱剑兵,何红旗.PCI、PCI-X和PCI-Express的原理及体系结构.北京:
清华大学出版社,2007
[3]田耘.徐文波.胡彬.Xilinx ISE Design Suite 10.x FPGA开发指南-逻辑设
计篇.北京:人民邮电出版社,2008
[4]田耘.徐文波.胡彬.Xilinx ISE Design Suite 10.x FPGA开发指南-DSP嵌入
式与高速传输篇.北京:人民邮电出版社,2008
[5]潘松.黄继业.EDA技术实用教程(第二版).北京:科学出版社,2008
[6]孙静.
PCIE接口芯片中的编码及解码电路设计:[硕士学位论文].沈阳;沈阳
工业大学,2008
[7]胡鹏.新一代高速1/0互连PCI-Express接口设计:[硕士学位论文],北京;
国防科技大学,2005
2024年5月28日发(作者:赫灵珊)
PCI-Express总线的接口电路设计
王福泽 (天津工业大学)
一、 课题背景
计算机I/O技术在高性能计算发展中始终是一个关键技术。其技术特性决定
了计算机I/O的处理能力,进而决定了计算机的整体性能以及应用环境。从根本
上来说,无论现在还是将来,I/O技术都将制约着计算机技术的应用与发展,尤
其在高端计算领域。近年来随着高端计算市场的日益活跃,高性能I/O技术之争
也愈演愈烈。当计算机运算处理能力与总线数据传输速度的矛盾日益突出时,新
的总线技术便应运而生。在过去的十几年间,PCI(Peripheral component
Interconnect)总线是成功的,它的平行总线执行机制现在看来依然具有很高的
先进性,但其带宽却早已露出疲态。PCI总线分有六种规格(表1所示),能提供
133MBps到2131MBps的数据传输速率,而对于现有高性能产品例如万兆以太网
或者光纤通信,传统的PCI的数据传输速率早已入不敷出
表1 PCI总线六种规格
总线类型
PCI32位
PCI32位
PCI-X 32位
PCI-X 32位
PCI-X 32位
PCI-X 32位
对于64位总线实现,上述所有带宽加倍仔细分析传统的PCI信号技术,可
发现并行式总线已逐渐走近其性能的极限,该种总线已经无法轻易地提升频率或
降低电压以提高数据传输率:其时钟和数据的同步传输方式受到信号偏移及PCB
布局的限制。高速串行总线的提出,成功的解决了这些问题,其代表应用就是
PCI Express。PCI Express采用的串行方式,并且真正使用“电压差分传输”
即是两条信号线,以相互间的电压差作为逻辑“0”,“1”的表示,以此方式传输
可以将传输频率作极高的提升,使信号容易读取,噪声影响降低。由于是差分传
输,所以每两条信号线才能单向传送1比特,即一根信号线为正、另一根信号线
为负,发送互为反相的信号,每一个“1比特”的两条信号线称为一个差分对。
按PCI Express技术规范规定,一个差分对的传输速率为2.5Gbps。实际使用中,
总线形式
并行
并行
并行
并行
并行
并行
时钟频率
33MHz
66MHz
66MHz
133MHz
266MHz
533MHz
峰值带宽
133MB/s
266MB/s
266MB/s
533MB/s
1066MB/s
2131MB/s
每条总线上板卡插槽数
4-5
1-2
4
1-2
1
1
[4]
。
对于64位总线实现,上述所有带宽加倍
则要使用两个差分对作为一个条链路,分别用做发送和接收。因为有了这样的机
制,使得数据带宽是可以弹性调配的。根据相关标准PCI-Express总线能够以
xl/x2/x4/x8/x12/x16/x32进行传输(如表2所示),可提供5Gbps到160Gbps的
传输带宽。当系统内某一通道需要更高频宽时,可以机动调度多个链路给该通道,
让其传输频宽提升,以适应一时激增的数据传输需求
[1]
。
表2 PCI-Express多链路传输速率表
PCI Express链路
宽度
传输带宽(Gb/s)
有效带宽(Gb/s)
5.0
4.0
10.0
8.0
20.0
16.0
40.0
32.0
60.0
48.0
80.0
64.0
160.0
128.0
X1 X2 X4 X8 X12 X16 X32
8b/10b编码使实际有效数据带宽损失20%,每链路包含一对发送/接收模块,每模块单项
传输带宽2.5Gb/s
除了传输方式的改变外,PCI Express还有一个更有意义的改变,即连接方
式的改变。PCI Express采用点对点连接方式,较PCI的共享总线方式是一个重
要的进步。对于PCI的共享总线方式,PCI总线上在某一时刻只能有一个设备进
行通信,一旦PCI总线上挂接的设备增多,每个设备的实际传输速率就会下降,
性能也得不到保证。而PCI Express则采用一种较为先进的连接方式,以点对点
的方式处理通信,每个设备在要求传输数据时建立独立的传输通道,对于其它设
备这个信道是封闭的,这种操作方式保证了通道的专有性,避免其它设备的干扰,
使信号的质量和可靠性增加。由于是点对点的关系,也很好的保证了其扩展性。
由于PCI-Express只是扩展总线,与操作系统无关,也可保证其与原有PCI的兼
容性,给用户的升级带来了方便。下图为PCI-Express的拓扑结构。
图1 PCI-Express系统拓扑结构
PCI Express不但具有高性能的传输速率,而且其通用性也有重要的意义。
由于其通用的模式,不仅可用于北南桥和其它设备的连接,也可以延伸到芯片组
间的连接,甚至也可以用于连接图形芯片。这样整个计算机的I/O系统将重新统
一起来,将更进一步的简化计算机系统,使其具有更强的通用性。从目前己经显
现的特点看,PCI Express一改传统PCI的并行总线架构,因此比其它I/O技术
有着更为领先的带宽优势,随着时间的推移有逐步取代PCI和PCI-X的趋势。PCI
Express被广泛地认为是一项革命性的总线技术,其重要性可以满足不同使用者
的需求。随着未来持续增加的带宽需求,PCI Express具有广泛的应用前景
[2]
。
二、 基于FPGA的PCI-Express接口具体设计方案
本设计将采用Xilinx公司最新的Virtex5LXT设计平台,使用了两个用于实现
PCI Express 功能的集成端点模块,其中一个模块(主控模块)具有配置另一个
模块(从属模块)的功能。数据可以在这两个集成端点模块之间双向(即在全双
工模式下)流动。该设计的用户接口是通过本地链路 (LL) 接口提供的。该设计
能够在 x1、x2、x4 和 x8 通道配置下操作
[3]
。
设计功能如下:
• 用户接口的本地链路成帧接口
♦ 64 位数据总线宽度与 3 位提醒总线
♦ 包化接口,带用于标记包的帧起始 (SOF) 和帧结束 (EOF)
• 传输和接收方向用户接口的包中断特性
• 帧错误检测支持
• 多通道配置支持:x1、x2、x4 和 x8
• 每通道 1.62 Gb/s 或更高的吞吐量
• 自动初始化、恢复与通道维护,对用户应用是透明的
• Virtex-5 LXT 器件中的集成端点模块
IP核及其应用说明
该设计的完整框图如图3所示。两个端点可以直接通信,其中一个模块(主
控模块)具有配置另一个模块(从属模块)的功能,数据可以在两个集成端点模
块之间双向流动,用户接口由本地接口提供。
图3 基于PCI-Express的点到点连接结构框图
其中主控端可以在本地自行配置,另一端作为从属端,由主控端通过
PCI-Express链路进行配置。进行配置后,该设计便已经准备好可以在全双工模式
下进行数据传输操作了。设计的用户接口符合本地链路协议的要求。在传输期间,
用户提供的本地链路帧在前往集成端点模块进行传输之前,会先被转换成传输层
包(TLP)。在接收期间,来自集成端点模块的TLP会被转换正本地链路帧,而数
据以及其他控制信号将通过本地链路接口传送给用户,因此,PCI-Express会分为
三个架构模块:配置IP(config IP)、Context IP传输和Context IP接收。
配置IP模块
配置IP模块负责在本地配置主控端,并通过 PCI Express 协议链路配置从
属端。配置完成后,会触发 LINK_READY,以表明链路已准备好可以进行数据传
输了。配置期间,将在主控端和从属端设置最大有效载荷大小。配置 IP 会根据
选择的用户设计选项设置集成端点模块的最大有效载荷大小 (MPS),如果是设计
选项 1,则设置为 512 字节,如果是设计选项 2,则设置为 1024 字节。
Context IP传输模块
Context IP 传输模块采用存储转发技术原理,通过协议链路以存储器写
TLP 的形式传输用户帧。存储器写 TLP 标头中的 TAG 区段未经过定义,可以包
含任何值,因此可用于存储帧起始、帧结束、帧中断等标记,这些标记有助于在
收到结束信号时重建本地链路帧。
传输器逻辑可将从用户处传来的数据存储在 FIFO 中。FIFO 的容量等于为
选定设计选项设置的MPS。长度计数器会对有效载荷的长度进行计数,有效载荷
的长度用于建立 TLP 标头中的长度区段。计数器在达到最高计数值(MPS = 512
时为 511, MPS = 1024 时为 1023)后会归零。帧的长度会存储在长度缓冲器
内。Context传输框图如下图所示:
图4 Context传输框图
Virtex-5 器件中的内置 FIFO 用于进行存储。如果数据传输之间的链路断
开(LINK_UP 信号变为低),则当前存储在缓冲器内的所有数据都将丢失。由于
必须重新进行配置,因此可以将数据传输之间的链路断开视为复位。
如果用户帧大小小于在集成端点模块中设置的 MPS,整个帧将作为单个
TLP 进行传输,。
Context IP 接收
该模块(如图5)可接收来自传输层接收接口的 TLP,然后提取其中的有效
载荷。从TLP的TAG区段提取的标记位将被写入到接收端 FIFO 的数据奇偶位输入
区段。提取的数据以及相应的本地链路成帧信号会被发送给接收端的用户。
[6]
图5 Context IP 接收框图
-Express端点IP核说明
Xilinx 提供的 Endpoint Block Plus for PCIe 解决方案适用于 Virtex™-5
LXT/SXT FPGA 架构,是一种可靠的高带宽可缩放串行互连构建模块。其顶层功
能模块如图6所示,从中可以看出,核接口分为系统(SYS)接口、PCI-Express
(PCI-EXP)接口、配置(CFG)接口以及事务(TRN)接口。
图6 顶层功能模块和接口
核使用数据包在各模块之间交换信息。数据包在事务层和数据链路层形成,
用来承载从发送元件到接收元件的信息。传输的数据包中包括在各层处理数据包
所需的必要信息。在接收端,各层接收元件处理输入的数据包,剥取相关信息,
然后将数据包传送到下一层。于是,接收到的数据包从其物理层表现形式转换为
数据链路层表现形式和事务层表现形式。
Endpoint Block Plus for PCIe 核包括顶层信号接口,这些接口按接收方
向、发送方向和双向共用信号分组。下面主要对各个接口进行分别介绍。
系统(SYS)接口
系统 (SYS) 接口信号由系统复位信号 sys_reset_n 和系统时钟信号
sys_clk 组成,如下表所示:
表3 系统接口信号
功能 信号名称 方向 描述
系统复位 Sys_reset_n 输入 异步低有效信号。
系统时钟 Sys_clk 输入 参考时钟:100MHz或250MHz。
系统复位信号是异步低有效输入信号。sys_reset_n 的有效置位致使整个核(包
括Rocket I/O GTP和Rocket I/O GTX收发器)硬复位。复位信号发出后,核尝
试进行链路初始化并恢复到正常工作状态。在典型的端点应用中,通常存在应连
接到sys_reset_n的边带复位信号。系统输入时钟的频率必须是100MHz或
250MHz,在Core Generator的GUI中选定。PCI-Express系统的时钟控制方式
有两种:其一就是使用同步实在哦好难过控制,其中所有器件共用一个时钟源,
另一种是使用非同步始终控制,其中各器件使用自己的时钟源
[7]
。
PCI-Express接口
PCI Express (PCI_EXP) 接口信号由按多个通道组织的收发差分信号对组成。每
个 PCI Express 通道由一对发送差分信号 {pci_exp_txp、pci_exp_txn} 和一
对接收差分信号 {pci_exp_rxp、pci_exp_rxn} 组成。一通道核仅支持通道 0;
四通道核支持通道 0-3;八通道核支持通道 0-7。
事务接口
事务 (TRN) 接口为用户设计提供生成和使用 TLP 的机制,分为共用事务接
口、发送实物接口以及接收事务接口。
配置接口
配置 (CFG) 接口供用户设计用来检查 Endpoint for PCIe 配置空间的状
态。用户提供一个 10 位配置地址,该配置地址选择 1024 个配置空间双字
(DWORD) 寄存器之一。端点经 32 位数据输出端口返回所选寄存器的状态。
三、 PIO传输测试
PCI Express 系统主 CPU 通常使用程控输入输出 (PIO) 事务来访问 PCI
Express 架构中的存储器映射输入输出 (MMIO) 和配置映射输入输出 (CMIO)
位置。Endpoint for PCI Express 接受存储器和 IO 写事务,并使用带数据完
成型事务来响应存储器和 IO 读事务。
由 CORE Generator 生成的 Endpoint for PCIe 中随附 PIO 示例设计(PIO
设计),可以通过业已成熟的现成设计即可方便地构建系统板,进而验证板的链
路和功能。本测试将继续使用Virtex5芯片开发板作为硬件,调用其内核实现测
试。图7为PCI-Express总线的架构组件。
图7 PCI-E系统概述
当 CPU 发出向 MMIO 地址存储寄存器的命令时,数据向下游移动。根联合
体 通常会生成一个具有相应 MMIO 位置地址、字节使能和寄存器内容的存储器
写 TLP。Endpoint 接收存储器写 TLP 并更新相应的本地寄存器后,事务即终止。
当 CPU 发出从 MMIO 地址加载寄存器的命令时,数据向上游移动。根联合
体通常会生成一个具有相应 MMIO 位置地址和字节使能的存储器读 TLP。
Endpoint 在收到存储器读 TLP 后会生成带数据完成型 TLP。完成包传送到根联
合体,有效载荷加载至目标寄存器后,事务即完成。
图8所示为 PIO 设计的各种组件,分为四大部分:TX 引擎、RX 引擎、存
储器访问控制器和电源管理关闭控制器。
图8 PIO 设计组件
接收通路
图9所示为 PIO_64_RX_ENGINE 模块。模块的数据通路必须与正在使用的核
的数据通路相匹配。这些模块与 Endpoint for PCIe 事务接收 (trn_r*) 接口
相连接。
图9 Rx 引擎
PIO_64_RX_ENGINE 模块接收并解析输入的读和写 TLP。RX 引擎解析 1
DWORD 的 64位可寻址存储器和 IO 读请求。RX 状态机从 TLP 中提取所需信息
并将其传送到存储器控制器。 RX 引擎解析 1 DWORD 的64 位可寻址存储器和
IO 写请求。RX 状态机从 TLP 中提取所需信息并将其传送到存储器控制器。
发射通路
图10所示为 PIO_64_TX_ENGINE模块。模块的数据通路必须与正在使用的
核的数据通路相匹配。这些模块与核事务发射 (trn_r*) 接口相连接。
图10 Tx 引擎
PIO_64_TX_ENGINE模块为接收到的存储器和 IO 读 TLP 生成完成包。PIO
设计不生成出站读或写请求。不过,用户可以添加此功能,以进一步定制设计。
PIO_64_TX_ENGINE 模块生成完成包来响应 1 DWORD 的 64 位可寻址存储器和
IO 读请求。生成该完成包所需的信息会传送到 TX 引擎。完成包发出后,TX 引
擎将 compl_done_i 输出置为有效,指示 RX 引擎可将 trn_rdst_rdy_n 置为有
效并继续接收 TLP。
Endpoint 存储器
图11 EP 存储器访问
图11所示为 PIO_EP_MEM_ACCESS 模块。此模块包含 Endpoint 存储器空
间。PIO_EP_MEM_ACCESS 模块处理从入站存储器和 IO 写 TLP 写入存储器的数
据,并使用存储器中的数据读来响应存储器和 IO 读 TLP。EP_MEM 模块根据从
RX 引擎接收到的信息,处理 1 DWORD 的 64 位可寻址存储器和 IO 写请求。存
储器控制器在处理写请求期间会将 wr_busy_o 输出置为有效,以指示其处于忙
碌状态。1 DWORD 的 64 位存储器和 IO 读请求均根据以下输入处理。读请求处
理完毕后,数据在 rd_data_o[63:0]上返回。
PIO 读事务
图12所示为对 PIO 设计的连续存储器读请求。完整接收第一个 TLP 后,
接收引擎将 trn_rdst_rdy_n 置为无效。只有发射引擎将 compl_done_o 置为有
效,指示第一个请求的完成包已成功发送后,才会接受下一个读事务。
图12 连续读事务
PIO 写事务
下图所示为对 PIO 设计的连续存储器写请求。仅当存储器访问单元将
wr_busy_o 置为无效,指示与第一个请求相关的数据已成功写入存储器窗口后,
才会接受下一个写事务。下图为逻辑分析仪输出的写事务时序图
图13 连续写事务
四、 测试结论与总结
PIO 设计展示了 Endpoint for PCI-Express 及其接口功能。经过读写事务
的测试以及收发波形的分析对比,可以得出结论:通过Xilinx Virtex5 LXT平
台设计的PCI-Express总线接口完全符合协议的标准,设计达到与其预期目标。
经过两个多月的学习和开发工作,我受益匪浅。不仅学会了关于Xilinx FPGA
的基本设计流程和方法,还深刻地理解了PCI-Express总线的拓扑结构及其特
性,并且对ISE10.1以及Verilog HDL设计语言也进行了一定程度的学习,对硬
件的电子开发技术基本入门,在理论和实践两方面都受益颇多。于此同时,此项
难度巨大的设计工程也对我的意志有了一定的磨练,经历多次的失败和错误之后
才得出此项成果,深感来之不易。
本设计经过传输测试后证明,已经达到PCI-Express总线的传输标准。采用此设
计可以有效地缩短研发周期,降低研发风险。但此类的开发板一般价格较高,并
不适合大批量应用。此为其不足之处。
五、 主要参考文献
[1]刘福奇,刘波.Verilog HDL应用程序设计实例精讲.北京:电子工业出版社,
2009
[2]马鸣锦,朱剑兵,何红旗.PCI、PCI-X和PCI-Express的原理及体系结构.北京:
清华大学出版社,2007
[3]田耘.徐文波.胡彬.Xilinx ISE Design Suite 10.x FPGA开发指南-逻辑设
计篇.北京:人民邮电出版社,2008
[4]田耘.徐文波.胡彬.Xilinx ISE Design Suite 10.x FPGA开发指南-DSP嵌入
式与高速传输篇.北京:人民邮电出版社,2008
[5]潘松.黄继业.EDA技术实用教程(第二版).北京:科学出版社,2008
[6]孙静.
PCIE接口芯片中的编码及解码电路设计:[硕士学位论文].沈阳;沈阳
工业大学,2008
[7]胡鹏.新一代高速1/0互连PCI-Express接口设计:[硕士学位论文],北京;
国防科技大学,2005