PCIE3.0基础说明(PCI Express Base Specification Revision 3.0 by PCI-SIG)笔记——第二章:事务层说明(2)

2.2.4.路由和寻址规则

TLP路由具备三个主要机制:地址路由、ID路由和隐式(implicit)路由。其中,隐式路由仅有消息请求使用。

2.2.4.1 基于地址的路由规则

  1. 地址路由主要用于内存和I/O请求。
  2. 定义了两种地址格式,64位格式使用了4个DW的头部,32位格式使用了3个DW的头部。(分别如figure 2-7和2-8所示)。
    在这里插入图片描述在这里插入图片描述
  3. 对于内存读、内存写和AtomicOp 请求,地址类型域(AT)将按照如Table2-5中进行编码。对于其他请求,AT域是保留的。
    在这里插入图片描述
  4. Table2-6给出了TLP头部的地址映射。
    在这里插入图片描述在这里插入图片描述
  5. 内存读、内存写和AtomicOp 请求均可以使用上述两种格式
    1).对于低于4GB的地址空间,请求者必须使用32位格式。如果接受者收到了一个用于请求4GB以下(即,高32位地址全为0)的地址空间的64位格式地址,那么其行为是未定义的。
  6. I/O读请求和I/O写请求使用的是32位格式。
  7. 所有代理都必须对头部中的所有地址位进行解码,不允许使用地址别名。

2.2.4.2.基于ID的路由规则

  1. 配置请求、ID路由消息和“完成”将使用ID路由。

  2. ID路由使用总线、设备和功能编号来指定TLP的目的地:
    1)Table2-7给出了非ARI的I路由ID,总线、设备和功能编号(3位)同TLP头部的映射关系
    2)Table2-8给出了ARI的I路由ID,总线、设备和功能编号(3位)同TLP头部的映射关系
    在这里插入图片描述在这里插入图片描述

  3. 定义了两种ID路由格式,一种使用了4个DW的头部,一种使用了3个DW的头部。分别如Figure2-9/2-10所示。
    在这里插入图片描述在这里插入图片描述

2.2.5.头/尾DW字节使能规则

内存、I/O和配置请求都包含字节使能。“字节使能”处于请求头部的第7个字节(见Figure2-11)。对于设置了TH位的内存读请求,字节使能域也用于携带ST[7:0]域。TH位仅能在内存读请求中设置,使得在数据都可用时完成这些读请求。
在这里插入图片描述

  1. 对于设置了TH位的内存读请求,如下的值用于进行字节使能。
    1)如果请求的Length域所指定的长度为1DW,那么头DW的字节使能的值被设置为“1111b”,尾DW的字节使能的值被设置为“0000b”。
    2)如果请求的Length域所指定的长度大于1DW,那么头/尾DW字节使能的值将被设置为“1111b”。

  2. 头DW BE[3:0]域中包含了由一个请求使用的第一个(或唯一一个)DW的字节使能。
    1)如果请求中的Length与所指定的长度大于1DW,那么这个域不能设置为0000b。

  3. 尾DW BE[3:0]域中包含了一个请求的最后一个DW的字节使能。
    1)如果一个请求的Length域所指定的长度为1DW,那么这个域仅能设置为0000b。
    2)如果一个请求的Length域所指定的长度大于1DW,那么这个域不能设置为0000b。

  4. 对于字节使能域中的每个位:
    1)如果被设置位0b,则对应的字节不能写,或者如果不能预取,则Completer不能读该字节。
    2)如果被设置为1b,则对应的字节必须写或Completer必须读该字节。

  5. 对于所有长度为1DW的请求,头DW的BE域的值可以设置为非连续的使能。
    1)非连续字节使能示例:1010b,0101b。

  6. 对于QW对齐的长度为2DW(1QW)的内存请求,允许使用非连续字节使能。

  7. 所有长度为2DW(1QW)的非QW对其内存请求和长度为3DW或更多的内存请求,只能使能请求中的头DW和尾DW中连续的数据。
    1)连续字节使能示例:
    头DW BE:1100b,尾DW BE:0011b
    头DW BE:1000b,尾DW BE:0111b

  8. Table2-9展示了字节使能域中的位和所处请求头部中的位置、对应数据的字节的关系
    在这里插入图片描述

  9. 1DW长度的写请求可以不使能字节,对Completer也没有影响。

  10. 如果一个1DW的读请求指定所读取的数据为未使能 (头DW BE[3:0]域=0000b),则对应的Completion必须将Length设置为1DW,其中包含1DW的数据负载。
    1)Completion包中数据负载的内容是未定义的,可能为任意值。

  11. 如果TLP没有遵守字节使能规则,那么接受者/完成者的行为将是未定义的。

  12. 接受者可能会根据配置,检查是否有违反字节使能规则。如果接受者实现了这类检查,那么如果一个TLP违反了字节使能规则,那么这个TLP就是一个存在错误的TLP。
    1)如果检查了字节使能的规则,那么当违反规则时,将报告与接收端口所对应的错误。

零长度读取
设备将使用没有字节使能的1DW内存读取请求(或“零长度读取”),作为一种清空请求。对于一个请求者,清空原语允许一个设备可以确保之前的Posted writes操作已经在PCIE目的地完成了。为了满足所有情况,零长度读取的地址必须和用于清空的Posted Writess指向同一个设备。建议使用Posted writes清空时使用的同一个地址。

清空原语具有广泛的应用,所有Completer都必须实现同这个原语相关的功能。因为Requester可能在不了解Completer特点的情况下使用清空原语,Completer必须保证零长度读取没有副作用。对于规则“在一个非预取空间,Completer不能读取未使能的字节”,这是一种具体的情况。需要注意的是,在进行零长度读取时,清空仅用于相同的Traffic Class流。

2.2.6. 事务描述符

待续

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章