Memory、I/O和Configuration请求规则
以下规则适用于所有内存请求、I/O请求和配置请求。接下来是针对每种请求类型的附加规则。
•除了常见的报头字段,所有的内存,I/O和配置请求包括以下字段:
◦Requester ID[15:0] 和 Tag[9:0],形成Transaction ID。
◦Last DW BE[3:0]和First DW BE[3:0]。对于 TH 位为1的 Memory Read Requests 和 AtomicOp Requests,报头中Last DW BE[3:0] 和 First DW BE[3:0] 字段的字节位置将被调整为 ST[7:0] 字段。对于 TH 位为1的 AtomicOp Requests,DW BE 字段的值隐含为保留。对于 TH 位为0的 AtomicOp Requests,DW BE 字段为保留。
对于Memory请求
请遵循以下原则:
•Memory Requests按地址路由,支持64位或32位寻址
•对于Memory Read Requests,长度不能超过Max_Read_Request_Size指定的值
对于AtomicOp请求,体系结构的操作数大小及其相关的Length字段值在下表
•FetchAdd请求包含一个操作数,即“add”值。
•Swap交换请求包含一个操作数,即“swap”值。
•CAS请求包含两个操作数。数据区的第一个是“compare”值,第二个是“swap”值。
•对于AtomicOp请求,地址必须与操作数的大小自然对齐。Completer必须检查是否违反此规则。如果TLP违反此规则,则该TLP为畸形TLP。这是一个与接收端口相关的报告错误。
•请求不能指定导致内存空间访问超过4 kb边界的地址/长度组合。
◦接收方可以选择检查是否违反此规则。如果执行此检查的接收器确定某个TLP违反了此规则,则该TLP为畸形TLP。
▪如果选中,这是一个与接收端口相关的报告错误(见6.2节)。
◦对于AtomicOp请求,强制Completer检查地址的自然对齐(见上文)已经保证访问不会跨越4-KB边界,所以一个单独的4-KB边界检查是没有必要的。
◦如果对AtomicOp CAS请求执行4-KB边界检查,该检查必须理解TLP长度值是基于两个操作数的大小,而对内存空间的访问是基于一个操作数的大小。
对于I/O请求
请遵循以下规则:
•I/O请求按地址路由,使用32位寻址(如图所示)
•I/O请求有以下限制:
◦TC[2:0]必须为000b;
◦I/O请求不适用LN且位为Reserved;
◦I/O请求不适用TH且位为Reserved;
◦ Attr[2]为Reserved;
◦ Attr[1:0]必须为00b,不要求或不鼓励接收方检查此选项
◦Length[9:0]必须为00 0000 0001b
◦Last DW BE[3:0]必须为0000b
接收方可以选择检查是否违反这些规则(但不能检查保留位)。这些检查是独立可选的
对于Configuration请求
以下规则适用:
•配置通过ID请求路由,并使用3DW报头。
•除了所有内存请求、I/O请求和配置请求的报头字段和ID路由字段外,配置请求还包含以下附加字段(如图2-20所示)。
◦Register Number[5:0]
◦Extended Register Number[3:0]
•配置请求有以下限制:
◦TC[2:0]必须为000b
◦LN不适用于Configuration Requests且比特为Reserved
◦TH不适用于Configuration Requests且比特为Reserved
◦Attr[2]为Reserved
◦Attr[1:0]必须为00b
◦AT[1:0]必须为00b不要求或不鼓励接收方检查此选项。
◦Length[9:0]必须为00 0000 0001b
◦Last DW BE[3:0]必须为0000b