存储器和 I/O 写入 TLP 处理 - 1.3 简体中文

UltraScale+ 器件 Integrated Block for PCI Express 产品指南 (PG213)

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文

PCIe® 的端点接收到存储器或 I/O 写入 TLP 时,TLP 目标地址和传输事务类型将与核 BAR 中的值进行比对。如果 TLP 通过此比对检查,那么核会将此 TLP 传递到 PIO 设计的 AXI4-Stream 接收接口。PIO 设计采用不同方式来处理存储器写入和 I/O TLP 写入:PIO 设计通过生成无数据完成 (cpl) 包来响应 I/O 写入,这符合 PCI Express 规范的要求。

AXI4-Stream 完成器请求接口会随包起始、包结束和就绪握手信号一起,断言相应的 (BAR ID[2:0]) 完成器请求描述符 [114:112] 信号有效,以向 PIO 设计标示与传入 TLP 匹配的特定目标 BAR。在接收时,PIO 设计 RX 状态机会处理传入的写入 TLP 并提取 TLP 数据和相关地址字段,以便将这些信息一起传递到 PIO 设计内部块 RAM 写入请求控制器。

在地址对齐模式下,根据断言有效的特定 BAR ID[2:0] 信号,RX 状态机会先向内部写入控制器标示要使用的相应 2 KB 块 RAM,然后再断言写入使能请求有效。例如,如果以 BAR0 为目标的核接收到 I/O 写入请求,那么该核会将此 TLP 传递到 PIO 设计,并将 BAR ID[2:0] 设置为 000b。RX 状态机会从 I/O 写入 TLP 提取下位地址位和数据字段,并指令内部的存储器写入控制器开始写入此块 RAM。

而对于 Dword 对齐模式,当 BAR ID[2:0] = 01b 时,RX 状态机会断言写入使能请求。RX 状态机会从存储器 32 写入 TLP 提取下位地址位和数据字段,并指令内部的存储器写入控制器开始写入此块 RAM。

在此示例中,将 BAR ID[2:0] 设置为 000b 并断言此设置有效导致指令 PIO 存储器写入控制器访问 ep_mem0(默认情况下,这表示 2 KB 的 I/O 空间)。对 FPGA 块 RAM 执行写入时,PIO 设计 RX 状态机会断言 m_axis_cq_tready 无效,导致 AXI4-Stream 接收接口暂停接收其它 TLP,直至内部的存储器写入控制器写入块 RAM 为止。对于使用该核的设计而言,并非所有设计都需要以此方式断言 m_axis_cq_tready 无效;PIO 设计使用此方法可简化 RX 状态机的控制逻辑。