起始编辑日期 2024.05.29 星期三 晴天 轻松的生菜
一.前言
其实对于PCIE的学习,我只是停留在知道如何简单地应用IP核,因此,我会从一个USER,也就是使用者的角度来写下面这些东西,而不是一个CREATOR创造者的角度,如果想当一个CREATOR,先从一个USER开始做起吧,哈哈哈。
二.关于PCIE与IP核
在我看来,PCIE和UART、SPI本质上没有什么区别,只是PCIE这个协议会更加复杂,而且PCIE接口的传输速度明显快于低速接口的传输速度,一个接口如果传输速度很快,我们很自然地就会想到一件事情,也就是我们该用怎样的时钟去采集传输过来的的数据,Xilinx在设计PCIE IP核的时候其实已经把这个问题给你解决了,是利用了Xilinx芯片上的一个接口,好像叫GTX,具体的不是很清楚,总之,我们是不需要去考虑最底层的接收和解析的问题的,IP核会帮我们接收数据并且帮我们解析成TLP,这样一说是不是感觉IP核可真是大好人呢,对吧。IP核给到我们USER的数据统一称为TLP,TLP的组成是HEADER+DATAPAYLOAD,而且是通过AXI 的一组接口来给到我们的。
三.TLP(HEADER+DATAPAYLOAD)
这里提到的TLP局限于这几种类型:MEMORY WRITE(写存储器)、MEMORY READ(读存储器)、COMPLETION WITH DATA(返回读取数据,针对于MEMORY READ)、COMPLETION WITHOUT DATA(返回命令)。前两者是由主设备下发给从设备的,后两个是由从设备返回给主设备的,当主设备发出MEMORY READ命令时,我们就需要返回
就像上面说的,虽然我们不需要进行最底层的接收和解析,但是接收并解析TLP,是需要我们USER去做的,举个很简单的例子,A发送一条命令给B,A先将信息加密,然后传给B,B的任务就是先解密这个信息,然后再执行解密以后的命令,其中USER with IP核 就是B,IP核负责接收并解析出TLP,我们USER负责接收和执行TLP,那么我们先来看看一个基本的TLP命令是怎么样的吧,看图一。(这里需要知道一个数据单位DW,DW是一个数据单位,也就是DOUBLE WRODS-双字,1DW=32bits)。
图一.3DW Memory Write TLP
这个图怎么看呢,首先每一行都是1DW的数据,一共有七行,也就是7DW,最后一行的TLP Digest是CRC校验码,暂时不用管,可以不选择,因为对于USER来说,这是一个可选项,那我就先不选。
接下来我们来看最右边的红色标识,H开头的表示是HEADER,D开头的表示是DATA PAYLOAD。前三行是TLP的HEARDER部分,紧接着的三行Data是DATA PAYLOAD,也就是数据部分。我们注意到这里的HEADER一共有3DW&#x