pcie体系结构笔记

目录

一、与以太网协议类似的结构

1、三层协议

二、我们需要关注的重点

1、有哪些事务(transactions)

2、事务层数据包(Transaction Layer packet,TLP)[1]

3、存储器写请求与中断请求

4、pcie终端设备的配置寄存器空间

三、Xilinx文档中的重点内容

四、参考文献:


前言:由于自己项目上的需求,需要在上位机和FPGA之间通过pcie传输图像,故对PCI Express做了一些研究。由于篇幅有限,本文聚焦于pcie终端设备(endpoint)所包含的协议,更详细的介绍请参考文末的[1]和[2]。水平有限,多多指教。

一、与以太网协议类似的结构

1、三层协议

PCI Express规范定义了一种分层的设备设计体系结构[1]。如图1所示,PCIE定义了包括事务层,数据链路层和物理层,其中软件层不在规范内。与以太网协议类似,PCIE规范中每一层的功能都不同,层与层之间通过数据包的形式进行数据传输,每一层都有相应的数据包格式。

pcie体系结构笔记_第1张图片

图1.PCIE设备的四层模块图[2]

二、我们需要关注的重点

如图1所示,事务层是我们关注的重点,以Xilinx提供的IP核为例,用户只要实现事务层的数据包封装即可,另外两层都不需要用户实现。以下重点介绍事务层。

1、有哪些事务(transactions)

PCIE事务可以分为四大类[1]:(1)存储器事务;(2)IO事务;(3)配置事务;(4)消息事务。我认为事务是对软件层对底层硬件的抽象,也是软件层和底层硬件的接口。

pcie体系结构笔记_第2张图片

图2.PCIE的非报告和报告事务[2]

如图2所示,PCIE事务分为非报告和报告事务[1]。如图3所示,对于非报告事务,请求者发送一个请求数据包给完成者,完成者必须返回一个完成数据包给请求者。而报告事务则不需要完成者返回完成数据包。显然,相比非报告事务,在FPGA中实现报告事务所消耗的资源更少且效率更高,但会牺牲可靠性。

pcie体系结构笔记_第3张图片

图3.PCIE的非报告读事务[2]

2、事务层数据包(Transaction Layer packet,TLP)[1]

如图4所示,事务层数据包的组成部分包括头部、数据和摘要。头部字段众多,[1]中95页有更多介绍。

pcie体系结构笔记_第4张图片

图4. 事务层数据包格式[1]

3、存储器写请求与中断请求

在FPGA中,实现非报告事务会带来更多的资源消耗和逻辑复杂度,因此我认为在FPGA中实现报告事务是最合适的选择。PCIE的报告事务包括存储器写请求和消息请求。存储器写请求的具体格式可参考[1]中102页。

需要注意的是PCIE的中断请求(Message Signaled Interrupt,MSI)并不是消息请求,而是存储器写请求。从[1]中200页可知,MSI功能寄存器中有消息地址寄存器和消息数据寄存器,当设备需要生成中断请求时,它将消息数据寄存器的内容写入到消息地址寄存器所指定的存储器地址[1,p203]。MSI功能寄存器的具体介绍可参考[1,p200]。

有了存储器写请求和中断请求,我们就实现上位机与FPGA之间的图像传输了,而且上位机可以通过存储器写请求来配置FPGA中的自定义寄存器,这些自定义寄存器包括图像尺寸、帧频、像素存储位宽等等。

4、pcie终端设备的配置寄存器空间

三、Xilinx文档中的重点内容

四、参考文献:

[1] PCI Express系统体系结构标准教材

[2] PCI Express System Architecture

[3] 7 Series FPGAs Integrated Block for PCI Express v3.1

[4] XAPP1052 Bus Master Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express Solutions

你可能感兴趣的:(pcie体系结构笔记)