前言:开始pcie项目之前需要知道,本次项目我们是使用现有的框架RIFFA框架去完成设计的,因此比起具体代码的含义,更注重框架的使用。在开始项目之前需要了解PCIE的组建包过程。
一、TLP包的基本格式:
1.1整体包结构概述
1、TLP 包是由 PCIE 的 Endpoint 或者 Root Complex 组建发送。
2、TLP 包只包含两种包头长度 3DW 和 4DW(double word is 32bit),数据
内可以选择包含和不包含 ECRC 1DW(循环校验字 32bit)
由红色圈圈出的是用户的 TLP 包,也就是接下来我们要重点讲解的部分。(此部分如果选择使用框架那么由框架创建例如 Riffa 和 XDMA,如果完全自定义那么就是需要自己的写这些 TLP)
1.2包结构的通用字段含义
1.3 Memory write TLP 包结构
- 3DW的头,32bit 地址可以请求 2^32 也就是 4GB 的字节地址空间
- 4DW 头,64bit 地址可以请求 2^64 也就是 16GB 的字节地址空间
其中:
1.4 Memory read TLP 的包结构
- 3DW的头,32bit 地址可以请求 2^32 也就是 4GB 的字节地址空间
- 4DW 头,64bit 地址可以请求 2^64 也就是 16GB 的字节地址空间
结构上发现其实和Memory write TLP 包没什么区别。
不同之处在于:
Mrd 是一个 Non-posted 事物:需要一个独立的反馈事务来反馈读取的数据。(一般一个mrd可能会有多个完成响应包来完成一次数据读取请求)
Mwr是一个posted事物:不需要一个独立反馈事务(因为写事务中本省就带有数据了,写成功与否的状态信息是可选的反馈信息,并不是必须的。)