NVMe事务层学习(二)

三、事务层对TLP的处理

3.1事务层发送端

PCIe 的发送端事务层使用由应用层传来的信息组装一个 TLP,并将这个 TLP 按照其优先级分发到 buffer 中等待发送。

发送仲裁器()选择将要发送的 TLP,同时由流量控制逻辑(数据链路层)保证对端设备有足够的信用值接收该 TLP。

TLP 从事务层的发送端送到数据链路层和物理层,并由数据链路层和物理层的发送端进行进一步的处理,包括添加序列号、LCRC、起始字符和结束字符,进行扰码、8b/10b 编码等操 作,并最终发给对端设备。

3.2事务层接收端

PCIe 的接收端物理层和数据链路层会依次将检测到的起始字符、序列号等部分进行剥离,并将 TLP 发送到事务层。

而事务层则按照顺序(相应于发送端的优先级)对其进行操作。首先检查该事务包是否存在错误,例如畸形事务包错误、ECRC 错误、信用管理错误等 情况。

如果存在错误,则会丢弃该 TLP 并向上层应用发出错误信号;如果检测无误,TLP 会被剥离 ECRC,而后根据类型不同分别送入不同的 Buffer 中,进行下一步处理。

包括将收到的数据通过转发到应用层,或将配置事务送到配置寄存器等。同时,事务层还会通知数据链路层己方 FIFO 的使用情况,以便使数据链路层的流量控制功能可以定时将己方的信用数据更新给对方。

四、PCIe的配置

4.1 大小

每一个 PCIe EP 设备,至少有一个功能,最多支持 8 个功能。对于每一个 PCIe 功能,都有一个配置空间 (Configuration Space)与之对应。

配置空间就是一系列 PCIe 相关寄存器的组成的寄存器组,PCIe 所有需要的配置信息都在配置空间中存储,大小为4096字节(4KB)。

4.2 分类

前256B是PCI总线兼容的,包括64B的Header和192B的Capability空间。

后3840B是PCIe新定义的扩展配置空间,有两种基本类型Type0(EP)Type1(Switch)。

Type0型的Header空间有着较多的基地址寄存器(6个)

Type1型的Header部分有更多的记载下游链路设备信息的寄存器。

4.3 配置事务

在 PCIe 规范中,仅有 RC 设备可以发起配置事务,主动访问其他设备的配置空间并进行读写;

端点设备不能主动发起配置事务,只能接收和处理由 RC 设备发出的配置事务,这是为了防止 PCIe 总线上不同设备之间互相修 改配置所造成的混乱。

RC 基于 CPU 的配置要求,将配置事务下发到 PCIe 总线设 备上,而后将处理结果送回 CPU,配置事务在这一过程中只能从上游(RC)向下游(其他PCIe设备)移动。

配置事务由事务包的形式发送,并且在发出时配置事务一定是 Type1 型的。

4.4 配置过程

上游设备发出 Configuration Read/Write 型事务,通过交换机向下游设备发送。当交换机设备接收到配置事务时根据事务包中的目标 ID 号进行处理。

1,(桥本身的事务首先检查 TLP 中的 ID 号 是否与自己本身的 ID 相等,如果相等,则接收该 TLP 并转交到配置处理模块。

2,(与桥相连的EP的事务)如果不相等,则检查 ID 号是否与下一级总线号相等(Secondary Bus Number),如果相等,则说明该事务是传给下一级的 Endpoint 设备的,交换机会先修改 TLP 中 的 Header 字段,将Type1型事务转变为Type0型事务,再发给下游的 Endpoint 设备。

3,(与桥相连的桥的事务)如果不相等,但是该 ID 落在自己的下一级总线号和最后一级总线号之间(Subordinate Bus Number),则表明该事务要传给下一级,的交换机设备,由下一级交换机继续进行路由,此时该交换机直接将Type1型事务转发给相应的下游端口。

4,如果还不相等,则认为该事务与自己无关,丢弃该 TLP, 忽略该事务。

EP接收到事务时,只有为Type0时才会选择接收并处理 TLP,收到 Type1 型事务时会忽略该事务。

4.4 PCIe的路由方式

路由就是路径选择的意思,即网络通信的方式。

PCIe 的路由方式分为三种,分别是地址路由、ID 路由、模糊路由(隐式路由)。

地址路由(Address Routing)是通过配置空间中的基地址寄存器进行路由的。 当 EP 接收到 TLP 后,事务层会检查 TLP 中的目标地址是否位于本设备基地址寄存器中,如果检查成功,则进行下一步处理。

对于 Memory 请求来说,32bit 的地址使用 3DW 的 Header,64bit 的地址使用 4DW 的 Header。而 IO 请求则只能使用 32bit 的地址, 即只能使用 3DW 的 Header。

ID 路由是通过 TLP Header 中的目标 ID 号,即总线号、Device ID、功能 ID 这三者进行匹配来进行路由的。

对于EP,接收方会检查 TLP 中的 ID 号是否与自己本身的 ID 号一致,如果一致,则认为该 TLP 是发送给自己的,并进行下一步处理。

对于交换机设备来说,其配置空间中也包含有所有下游端口的总线 ID, 当交换机接到 ID 路由的 TLP 时,首先检查 ID 是否是本设备 ID,如果是,则说明这个 TLP 是给交换机自己的。如果不是,则会检查 TLP 的 ID 是否落在下游端口总线 ID 的范围内,即下一级总线号(Secondary Bus Number)和最后一级总线号 (Subordinate Bus Number)之间,如果是,则该 TLP 是发送给其下游设备的,交换机需要将其转发到下游端口。

隐式路由只能用于 Message 型 TLP, 不需要表明 ID,而是采用广播的方式进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值