欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PCIe一些系统参数(MPS, MRRS, RCB)的深度解析

程序员文章站 2022-03-11 15:41:07
首先这篇文章跟大家之前看到的文章不一样,通过耐心阅读相信大家一定能有深刻的理解。一、各个参数含义1、MPS(Max Payload Size)该参数含义是一个TLP包里携带的有效净荷的最大值是多少字节(该限制条件同时适用于写操作和读操作)。2、MRRS(Max Read Request Size)该参数含义是一个TLP读请求包,一次最多能向接收端请求读出多少字节。请求读多少字节是在TLP包头的Length字段(见上图)指定的。要注意,Length是以DW(4个字节)为单位的,而MPS/MRRS...

首先这篇文章跟大家之前看到的文章不一样,通过耐心阅读相信大家一定能有深刻的理解。

一、各个参数含义

1、MPS(Max Payload Size)

该参数含义是一个TLP包里携带的有效净荷的最大值是多少字节(该限制条件同时适用于写操作和读操作)。

2、MRRS(Max Read Request Size)

该参数含义是一个TLP读请求包,一次最多能向接收端请求读出多少字节。
PCIe一些系统参数(MPS, MRRS, RCB)的深度解析
请求读多少字节是在TLP包头的Length字段(见上图)指定的。要注意,Length是以DW(4个字节)为单位的,而MPS/MRRS/RCB参数的单位都是字节。

3、RCB(Read Completion Bounary)

该参数含义是接收端在向发送端返回读响应数据时,多个TLP包的大小必须是RCB的倍数,即必须对齐到RCB地址边界上。

这个参数不容易理解,下面通过一个具体例子来感受一下。

For instance if you read 100h (256) bytes from address 00010028h and the RCB is 64 bytes. The data will most likely be returned as follows:

a) 先返回一个24 bytes长度的CplD包(为什么会先返回24字节长度的包?原因是首地址10028h不是RCB值即64B的整倍数,为了对齐地址,需要先返回一个24B的包,这样地址就对齐到了10040h)。对应地,地址递增情况是:10028h + 18h = 10040h

b) 再返回一个64 bytes长度的CplD包。对应地,地址递增情况是:
10040h + 40h = 10080h

c) 再返回一个64 bytes长度的CplD包。对应地,地址递增情况是:
10080h + 40h = 100C0h

d) 再返回一个64 bytes长度的CplD包。对应地,地址递增情况是:
100C0h + 40h = 10100h

e) 再返回一个40 bytes长度的CplD包。对应地,地址递增情况是:
10100h + 28h = 10128h

There are other valid combinations here that could be used, but most root complexes tend to return the smallest completions as allowed.

有人会问为什么会出现10028h这样没有对齐到64B的倍数的地址?原因是读请求的大小在MRRS限定的范围内是随意的(意思是可以不是64B的倍数)。

二、参数之间的对比

-For read request baundary is Maximum Read Request Size

-For one completion baundary is Maximum Payload Size(此限制对读写均适用)

-For multiple completion baundary is RCB

三、思考

MRRS参数出现的原因大家有没有想过……其实设定MRRS的原因是为了避免某个设备长时间占用总线

参考链接:https://forums.xilinx.com/t5/PCIe-and-CPM/any-useful-for-128bytes-Read-Completion-Boundary-RCB/td-p/9533

本文地址:https://blog.csdn.net/weixin_39615959/article/details/111862928

相关标签: fpga pci-e