PCIe链路协议使用“端到端的数据传送方式”,发送端和接收端中都含有TX(发送逻辑)和RX(接收逻辑)。PCIe协议采用分层结构,分为事务层、数据链路层和物理层 。PCIe中2个互连的设备采用事务的方式通信,事务是指为实现设备间某种信息传送。
而定制的由一个或者若干个包组成的发送序列,事务通过事务包(TLP) 具体实现。协议每层的功能如下:
1、物理层(PhysicalLayer):电气特性,使用两个单向的低电压差分对信号实现数据传输,同时也承担8b/10b的数据编解码,即在PCIe链路上的10 bit中含有8 bit的有效数据
2、数据链路层(DataLink Layer):对该层传输的TLP进行组装和分拆,作为中间层为上下两层服务。
3、事务层(TransactionLayer):接受从软件方送来的请求,并生成请求包传输到数据链路层。同时接受从数据链路层传来的数据包,
传递给软件,也就是对TLP进行分装和组装。
PCIE协议通信框图如下:
用户逻辑与PCI Express事务层接口直接连接,可发送或接收事务层数据包用以实现BAR(基址地址寄存器)空间访问功能和DMA读写功能。计算机对板卡BAR空间的memory读写即为CPU( 计算机) 发出存储器映射地址写寄存器的命令,该命令包括了存储器映射地址字节使能和寄存器内容,PCIe相应的TLP 端点 接收该TLP并将寄存器内容写到对应的本地寄存器后,事务结束。
当CPU发出存储器映射地址读寄存器的命令,该命令包括了存储器映射地址字节使能,生成相应的TLP, 端点收到该TLP后会生成响应TLP( 包含数据) 完成包传送,提取其有效载荷并赋值给指定寄存器后,事务结束。 用户逻辑设计结构如图2所示:
上图中PCIe集成端点模块核可以在FPGA中直接使用PCIe的IP核实现,我们需要在FPGA中自已实现的主要是上图中与PCIe IP核相连接的部分几个模块。