您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > PCIE---TLP报文格式及字段处理
TLP报文格式类型及字段处理以下均基于PCIExpress®2.0BaseSpecification--Revision0.9本文例子均以PCIeRootPort通过PCIeEndPoint访问其挂载的Memory为例,如PCIeEP的RX方向为接收RP端对Memory的读写请求,TX方向为返回完成报文。1.TLP报文格式通用的TLP报文格式如下图所示:其中Header部分是必须的,Data部分不是必须的,其长度最大可以为1024DW,最小为0,即不带数据的TLP报文,TLPDigest也不是必须的,至于Data和TLPDigest是否需要由Header部分决定。2.GenericTLPHeaderTLP报文的Header部分Byte0~3是通用的,其他字节可能与TLP报文的类型相关。通用TLPHeader部分字段定义如下:下面详细介绍功能及字段处理。2.1FmtFmt[1:0]CorrespondingTLPFormat00b3DWheader,nodata01b4DWheader,nodata10b3DWheader,withdata11b4DWheader,withdata此字段确定:Header的大小是3DW还是4DW,如果为4DW,则请求地址则为64bit,否则为32bit;TLP报文是否包含数据;具体见上表。字段处理,Fmt和Type字段联合进行处理确定当前TLP的总线事务,具体见Type字段。2.2Type这里只介绍几种常用的Memory读写请求的TLP报文类型,其他可参考PCIE标准。TLPTypeFmt[1:0]Type[4:0]DescriptionMRd0000000存储器读请求;TLPHeader为3DW或4DW,不带数据01MWr1000000存储器写请求;TLPHeader为3DW或4DW,带数据11Cpl0001010完成报文;TLPHeader为3DW,不带数据;包括存储器,配置和IO写完成CplD1001010完成报文;TLPHeader为3DW,带数据;包括存储器,配置和IO读完成字段处理:Rx方向:解析报文时,首先解析Fmt[1]和Type[4:0],如果Type[4:0]=5’h0,再根据Fmt[1]来获取读写请求,0代表读请求,1代表写请求。assignrx_rdreq_n=((Fmt_Type[6]==1'b0)&(Fmt_Type[4:0]==5'b00000))?1'b1:1'b0;assignrx_wrreq_n=((Fmt_Type[6]==1'b1)&(Fmt_Type[4:0]==5'b00000))?1'b1:1'b0;Tx方向:为返回完成报文;assignFmt_Type=8'h4a;2.3TCTC字段表示当前TLP的传送类型,PCIe总线共规定8种传输类型TC0~TC7,一般仅仅使用默认值TC0,这里不过多介绍TC相关内容。字段处理:Rx方向:不需要解析此字段;TX方向:assignTC=3’h0;2.4TD、EP、ATTD位表示TLP中的TLPDigest是否有效,1为有效,0为无效。EP位表示当前TLP中的数据是否有效,1表示无效,0表示有效。AT字段与PCIe总线的地址转换相关,只有在支持IOMMU技术的处理器系统中,才使用这个字段,因此此位保留。字段处理:Rx方向:EP、TD、AT均不需要解析此字段;TX方向:assignTD=1’b0;assignEP=1’b0;AT字段保留;2.5AttrbitTypeDescriptionOrderingTypeOrderingModel1OrderingAttributes0DefaultOrderingPCI强序模型1RelaxedOrderingPCI-XRelaxedOrdering模型0NoSnoopAttributesCacheCoherencyManagementTypeCoherencyModel0Default硬件强制执行cache共享一致性处理1NoSnoop硬件不强制执行cache共享一致性处理字段处理:1.Rx方向:Attr不需要解析此字段;2.TX方向:assignAttr=2'h0;2.6Length对于RP的读请求,无DataPayload,Length字段表示需要从目标设备EP的数据区读取的数据长度;对于写请求,则表示当前报文DataPayload长度。Length[9:0]TLPDataPayloadSize0000000001b1DW0000000002b2DW…………1111111111b1023DW0000000000b1024DW字段处理:1.Rx方向:读请求:需要将Length保存下来,然后送给TX方向返回完成报文的使用;assignrx_hold_length=length;写请求:设置一计数器,每个时钟周期都去进行一次写操作,每当写一次,计数器减1,读地址加1,直到计数器为0,写使能变为0。2.TX方向:返回读请求的完成报文:将之前读请求TLP报文中的length赋值到完成报文中的length字段;assigntx_length=rx_hold_length;并设置一计数器,每个时钟周期都去进行一次读操作,每当读一次,计数器减1,读地址加8,直到计数器为0,读使能变为0。3.MRd/MWrHeader下面为Memory读写请求TLP报文的格式,请求地址为64bit和32bit。3.1RequesterID、TAGRequesterID字段包含生成这个TLP报文的PCIe设备的BusNumber、DeviceNumber、FunctionNumber。字段处理:对于Memory读请求TLP,需要将此字段保存,以供返回完成报文使用;assignrx_hold_reqid=rx_reqid;assignrx_hold_tag=rx_tag;对于Memory写请求TLP,不需要完成报文作为应答,因此,此字段可以不用解析;3.2LastDWBE、FirstDWBE3.3Address[31:2]字段处理:1.Rx方向:2.TX方向:4.CPL/CPLDHeader4.1RequesterID、TAG当PCIe设备收到存储器读TLP时,首先保存这些报文的RequesterID、TAG,之后当该身背准备好完成报文后,将完成报文的RequesterID、TAG字段赋值为之前保存的RequesterID、TAG。字段处理:赋值为之前保存的RX方向的RequesterID、TAG;assigntx_reqid=rx_hold_reqid;assigntx_tag=rx_hold_tag;4.2CompleterID与RequesterID字段类似,该字段存放发送完成报文的PCIe设备的ID号,即为EP的设备ID。4.3Status、BCMStatus字段保存当前完成报文的完成状态。Status[2:0]Description0b000SC,正常结束0b001UR,不支持的数据请求0b010CRS,要求数据请求方进行重试0b100CA,数据夭折其他保留字段处理:此字段赋值为3’d0,正常结束。BCM字段由PCI-X设备设置。字段处理:保留,设为0;4.4Bytecount若只有一个读完成包被返回,则本字段是该包数据返回读数据的总字节数;若由多个完成包组成的完成序列被返回,则各完成包中本字段表示要读的剩余字节数,包括当前完成包中数据字节加上后续所有完成包中的数据字节。字段处理:我们只使用一个完成包返回完成报文,因此,此字段即为length大小。assignbytecnt={tx_length,2'h0};注:length单位为DW,而bytecnt单位为Byte,因此,1DW=4Byte,则需要tx_length左移两位。4.5LowerAddress完成包读数据中第一个被使能字节所对应的地址的低7位。
本文标题:PCIE---TLP报文格式及字段处理
链接地址:https://www.777doc.com/doc-5749704 .html