天天看点

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

前言

通过写博客,可以检查你是否了解设计,这像是一个提问题并自我解读的过程。 如果你提出问题但发现无法解决,则问题就在这里。例程是从某个IP内核开始的最佳方法,它可以用作以后设计的基础。

本文基于K7325tFPGA芯片进行分析的,7 Series Integrate Block for PCI Express核配置,本根据自己的理解分享Xilinx的例子代码和仿真分析,可将例子用于自己的工程项目上,本文章不注重讲解PCIE协议,只是结合PCIE协议,注重分析例子中的代码和仿真,PCIE配置成ROOT端,即FPGA作为主机,对设备端进行操作。

生成PCIE例子工程的步骤

1. 打开IP CORE进行设置

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

7 Series Integrate Block for PCI Express配置

2.点击该IP核,右键点击 Open IP Example Design,点击OK,即可生成例子工程。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

PCIE例子工程例子架构图

一、 PCIE系统架构

1.1 PCIE分层结构

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

PCIE结构

1.2  TLP包

四种TLP类型。

Memory (内存空间操作)

IO (IO空间操作)

Configuration (配置操作)

Message (信息操作)

四种类型TLP,如果有需要响应,称为Non-Posted TLP,如果没有需要响应,称为Posted TLP。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

TLP包类型

1.2.1  TLP结构

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

TLP数据格式

1.2.2  Header各个字段的含义

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

Header格式

深色部分为公共部分,不同类型的TLP包格式在Header上对应不同字段。各个字段的含义:

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

  1. Fmt:Format,决定头的数据大小,3DW和4DW
  2. Type:TLP类型。
  3. R:保留
  4. TC:传输优先级,数值越大,优先级越高
  5. Attr:属性,共3bit
  6. TH:指示何时包含TLP提示,以便让系统了解如何最好地处理这个TLP
  7. TD:是否接受CRC校验
  8. EP:如果EP=1,则应该认为伴随该数据的数据无效,事务被允许正常完成。
  9. AT:地址的种类
  10. Length:TLP负载的数据长度,单位DW (32bit)
  11. Last DW BE:
  12. 1st DW BE:在PCIe 总线以字节为基本单位数据传递,但是 Length 字段以 DW 为最小单位。为此TLP 使用 Last DW BE 和 First DW BE 返两个字段迕行字节使能,使得在一个 TLP中,有效数据以字节为单位。
基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

1.2.3 Memory TLP

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

3dw与4dw区别在于地址的宽度不同。

Tag:Requester ID、Tag合起来组成Transaction ID,在同一时间段内,PCIe设备发出的每一个Non-Posted数据请求TLP,其Transaction ID必须唯一。也就是Tag必须唯一。

Request ID:该字段字段包含生成TLP报文的PCIe设备的总线号(Bus Number)、设备号(Device Number)和功能号(Function Number)。唯一的找到目标设备,那是因为不同的Endpoint设备空间会映射到Host内存空间的不同位置。

Memoty Write

例子:仿真模型的测试

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

Memoty仿真

S_axis_tx_tdata:face010f_60000001, 80000000_10000000, 00000000_12345678

可分析为:

{ Fmt ,Type } = 0110_0000;写TLP,4DW带数据

Length = 1dw,

{Requester ID, Tag} = face01

{Last DW BE, 1st DW BE} = 0f

Address [63:0] = 80000000_10000000

data负载= 12345678;

Memory Read

例子:仿真模型的测试

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

Memory仿真

S_axis_tx_tdata:face050f_20000001, 80000000_10000000,

可分析为:

{ Fmt ,Type } = 0010_0000;读TLP,4DW不带数据

Length = 1dw,

{Requester ID, Tag} = face01

{Last DW BE, 1st DW BE} = 0f

Address [63:0] = 80000000_10000000

无数据负载

1.2.4 Completion TLP

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

字段含义:

compl Status:完成情况指示。000--成功完成;001--不支持该请求。其余情况可查阅规范。

000b (SC) Successful Completion:表示请求(Request)被正确的处理;

001b (UR) Unsupported Request:表示请求是非法的或者不能被Completer所识别的。在PCIe V1.1以及之后的版本将这作为Advisory Non-Fatal Error;

010b (CRS) Configuration Request Retry Status:Completer暂时不能响应的配置请求,需要Requester稍后再次尝试;

100b (CA) Completer Abort:Completer可以响应该请求,但是却发生了其他的错误,该错误是Uncorrectable Error。

Byte Count:是指还剩下多少字节的数据需要读取。其余字段可自行查阅规范。

例子:仿真模型的测试

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

S_axis_tx_tdata:01000004_4a000001, 12345678_face0500,

可分析为:

{ Fmt ,Type } = 0100_1010;响应TLP,3DW带数据

响应读TLP,返回要读的数据。

compl Status = 3’b000(正确处理读TLP)

Byte Count = 4

Length = 1dw,

{Requester ID, Tag} = face05

{Last DW BE, 1st DW BE} = 0f

Data = 12345678

1.2.5 Message TLP

用于传输中断,错误,电源管理等信息。Header大小总为4DW

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

字段含义

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

例子:仿真模型的测试

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

S_axis_tx_tdata:10ee0050_74000001, 00000000_00000000, 00000000_00000019

可分析为:

{ Fmt ,Type } = 0111_0100;信息TLP,4DW

Meaasage Code = 50

{Requester ID, Tag} = 10ee

由信息的命令的代码,此信息为电源设备信息。

1.2.6 Configuration TLP

配置TLP,Type 0是endpoint的配置,Type1为switch的配置。

主机软件访问pcie 设备的配置空间,RC会生成Configuration TLP与switch交互,进行配置设备的数据。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

字段含义

Ext Reg Number:它们提供DW空间的前四位,用于访问扩展的配置空间。它们与寄存器号结合,创建访问1024 DW(4096字节)空间所需的10位地址。对于pci兼容的配置空间,该字段必须为零。

Register Number:配置DW空间的较低的8位指定了寄存器号。最低的两个位总是零,强制dwl对齐访问。

Bus Number+Device Function Number 决定唯一目标设备。

例子:仿真模型的测试

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

S_axis_tx_tdata:10ee000f_04000001, 00000000_01000000

可分析为:

{ Fmt ,Type } = 0000_0100;配置读TLP,3DW带数据

Length = 1dw,

{Requester ID, Tag} = 10ee00

{Last DW BE, 1st DW BE} = 0f

Address [31:0] =01000000

Data =00000000

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

S_axis_tx_tdata:00000004_4a000001, ee101170_10ee0000

可分析为:

{ Fmt ,Type } = 0100_1010;响应配置读TLP,3DW带数据

Length = 1dw,

{Requester ID, Tag} = 10ee00

Data =ee101170(返回配置读数据)

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

S_axis_tx_tdata:10ee000f_44000001, ffffffff_01000010

可分析为:

{ Fmt ,Type } = 0100_0100;响应配置写TLP,3DW带数据

Length = 1dw,

{Requester ID, Tag} = 10ee00

Data =ffffffff

Address [31:0] = 01000010

2.1 pcie 配置空间和地址

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

每个pcie设备都有自己的配置空间,主机通过访问这些空间读取设备的信息,pcie配置空间是协议规定好存放的内容有自己的定义。

PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

2.1.1 BAR(Base Address Register)

Endpoint configuration提供最多6个BAR.Switch提供两个。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

主机访问配置空间过程:

CPU不能直接访问配置空间,让RC(Root Complex)去办。若想读取pcie外设的数据,先让RC通过TLP把数据从pcie外设读到主机内存中,后CPU从主机内存读数据。若CPU要往外设写数据,则先把数据写到主机内存中,然后叫RC通过TLP写到PCLe设备。

分配映射空间

对于pcie设备,系统软件如何为其分配映射空间。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

pcie上电后BAR的配置过程:

上电时:系统软件首先读取pcie设备的BAR0(见图5-33),得到数据。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

后系统软件往BAR0写入全1(见图5-34),如有保持不变,则是厂家固化的。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

解读:(图5-34)低12位没变,表明设备空间为4KB,低4位表明是存储空间属性(映射类型),是厂家设置好的然后系统软件根据这些信息,在系统内存空间找到地方来映射着4KB的空间,把分配的空间写入到BAR0.(图5-35)

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

在pcie拓扑结构中,一条总线下可挂几个设备,而每个设备可以具有对个功能。(见图5-36)

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系统架构

标题

在整个pcie系统中,只要知道BUS No + Device No + Function No,就找到唯一的function寻址基本单元是功能,它的ID由Bus + Device + Fun组成。

一个pcie可以有最多256Bus,每条Bus上最多挂32设备,而每个设备上最多可实现8个function,每个function对应4KB的配置空间。上电时这些配置空间都需要映射到主机内存空间。

系统软件读取configuration空间:

系统软件访问configuration,只需指定相应function对应的内存空间,RC发现这个是configuration映射空间,就会产生相应的configuration Read TLP去获得相应的function 的 configuration。

下期将继续更新pcie例子工程的代码分析。

水平有限,如有错误,请指教不胜感情。如果您有其他看法,欢迎在下方讨论,谢谢!