Xilinx PCIe PG213总结

参考文献:

UltraScale+ Devices Integrated Block for PCI Express v1.3

m_axis_cq_tuser (512-bit Interface)

bit

name

width

description

7:0

first_be[7:0]

8

1)payload的第一个Dword的字节使能标识。

2)first_be[3:0]反应此拍第一个TLP中传输事务层头中的First Byte_Enable位的设置,而first_be[7:4]反应此拍第二个TLP中传输事务层头中的First Byte_Enable位的设置。

3)对应存储读和I/O读,这4bits指示读取的第一个Dword中有效的字节

4)对应存储写和I/O写,这4bits指示payload的第一个Dword的有效字节

5)对于原子操作和带有payload的消息,这4bits全部设置位1

6)仅当在CQ接口上开启straddle时,first_be的bits[7:4]位才是有效的,当straddle关闭时,这bits[7:0]将被设置为全0

7)first_be域段仅在packet的第一拍是有效的。当m_axis_cq_tvalid和is_sop[0]全是1时,first_be[3:0]才有意义,当m_axis_cq_tvalid和is_sop[1]全是1时,first_be[7:4]才有意义

15:8

last_be[7:0]

8

1)关于payload的最后Dword的Byte 使能标识

2)last_be[3:0]反应在此拍第一个TLP的传输层头中Last Byte Enable的设置,last_be[7:4]反应在此拍第二个TLP的传输层头中Last Byte Enable的设置

3)对于存储读操作,这4bits指示数据块中最后Dword的有效字节

4)对于存储写操作,这4bits指示payload的末端Dword的有效字节

5)对于一个Dword传输和0长度的传输的存储读和写,这4bits应该全为0

6)对于原子操作和带有payload的消息,这4bits应该全为1

7)仅当在CQ接口上开启straddle时,last_be的bits[7:4]位才是有效的,当straddle关闭时,这bits[7:0]将被设置为全0

8)last_be域段仅在packet的第一拍是有效的。当m_axis_cq_tvalid和is_eop[0]全是1时,last_be[3:0]才有意义,当m_axis_cq_tvalid和is_eop[1]全是1时,last_be[7:4]才有意义

79:16

byte_en[63:0]

64

1)逻辑内部选择性的使用这些byte_en位,表示正在传输包的payload中有效的字节,bit[63:0]分别对应m_axis_cq_tdata[511:0]的64个字节。

2)对于描述符字节,这些bit位没有意义

3)逻辑内部可以通过请求描述符(地址和长度)产生byte_en标志位,也可通过first_be和last_be的设置产生byte_en标志位,逻辑可以直接使用byte_en标志位代替逻辑内部产生的byte_en标志位

4)当payload大小超过2Dword(8bytes)时,byte_en的bit位是连续的,当payload大小不足2Dword时,byte_en的bit位将是不连续的

【特例】:对于PCIE定义的0长度内存写事务特殊情况,当关联的1个Dword 净荷被传输时,byte_en的bit位全部为0。

81:80

is_sop[1:0]

2

1)此拍中1个新的TLP开始的标识

2)这2bits位被设置在TLP的第1拍

3)当straddle关闭时,仅is_sop[0]是有效的且is_sop[1]固定设置为0

4)当straddle开启时,is_sop[1:0]标识含有如下:

  • 2'b00:在此拍中,没有新的TLP

  • 2'b01:在此拍中,有1个新的TLP。is_sop0_ptr[1:0]标识指示,这个TLP的起始位置

  • 2'b11:此拍中,由2个新的TLP。is_sop0_ptr[1:0]标识指示,第1个TLP的起始位置,is_sop1_ptr[1:0]标识指示,第2个TLP的起始位置

  • 2'b10:保留

5)当straddle关闭时,对于逻辑内部,is_sop[1:0]标识的使用时可以选的,因为一个新的TLP,一定时尾随tlast标识的

83:82

is_sop0_ptr[1:0]

2

1)指示第一个TLP的第一个字节的位置

  • 2'b00:Byte lane0

  • 2’b10:Byte lane32

  • 2'b01,2'b11:保留

2)当 CQ接口的straddle开启时,这个域段有效,否则,这个域段固定为0,且一个TLP起始位置为byte lane0

85:84

is_sop1_ptr[1:0]

2

1)指示第2个TLP的第一个字节的的位置

  • 2'b10:Byte lane 32

  • 2'b00,2'b01,2'b11:保留

2)当CQ接口的straddle开启时,这域段有效。在1拍中可差分2个TLP。当straddle关闭时,这个域段固定为0

87:86

is_eop[1:0]

2

1)指示一个TLP结束在此拍。

2)is_eop被设置在TLP的最后一拍

3)当straddle关闭时,仅is_eop[0]有效,is_eop[1]固定为0

4)当straddle开启时,is_eop标识含有如下:

  • 2'b00:在此拍,没有TLP结束

  • 2'b01:在此拍,有1个TLP结束。is_eop0_ptr[3:0]指示这个TLP的最后Dword的偏移

  • 2'b11:在此拍,有2个TLP结束。is_eop0_ptr[3:0]指示第1个TLP的最后Dword的偏移,is_eop1_ptr[3:0]指示第2个TLP的最后Dword的偏移

  • 2'b10:保留

5)当straddle关闭时,是否使用此域段有逻辑内部决定,因为1个TLP的尾tlast是有效的

91:88

is_eop0_ptr[3:0]

4

1)此拍第一个TLP的最后一个Dword的偏移

2)当is_eop[0]有效时,此域段才有效

95:92

is_eop1_ptr[3:0]

4

1)此拍第二个TLP的最后一个Dword的偏移

2)当is_eop[1]有效时,此域段才有效

96

discontinue

1

1)如果此IP核在从其内部FIFO中读取TLP净荷,检测到不可纠错的错误时,IP核会在TLP的最后一拍将discontinue标识置为有效

2)当用户逻辑检测到这个discontinue标识有效时,逻辑内部必须丢弃整个TLP数据

3)当TLP没有净荷时,discontinue标识一直无效

4)仅在净荷传输的最后一拍,discontinue标识才有效,此时is_eop[0]=1

5)当straddle开启时,如果在此拍discontinue标识有效,IP核不会产生产生第二个TLP

6)当IP核被设置为Endpoint时,IP核使用Advanced Error Reporting,将此错误向与它相连的Root Complex报告

98:97

tph_present[1:0]

2

1)tph_present指示通过接口传递请求TLP中,存在一个传输事务处理提示

  • tph_present[0]指示此拍的第一个TLP存在提示,当m_axi_cq_tvalid=1且is_sop[0]=1时,tph_present[0]是有效的

  • tph_present[1]指示此拍的第二个TLP存在提示,当m_axi_cq_tvalid=1且is_sop[1]=1时,tph_present[1]是有效的

102:99

tph_type[3:0]

4

1)当在请求TLP中存在TPH时,这两个2bits位提供于提示相关联的PH[1:0]字段值

  • tph_type[1:0]提供和此拍第一个TLP关联的TPH类型。当m_axis_cq_tvalid=1且is_sop[0]=1时,tph_type[1:0]有效

  • tph_type[3:2]提供和此拍第二个TLP关联的TPH类型。当m_axis_cq_tvalid=1且is_sop[1]=1时,tph_type[3:2]有效

118:103

tph_st_tag[15:0]

16

1)当在请求TLP中存在TPH时,tph_st_tag提供了8bit的Steering Tag,这8bit的Steering Tag于整个TPH有关联

  • tph_st_tag[7:0]提供的Steering Tag与此拍的第一个TLP有关。当m_axis_cq_tvalid=1 且is_sop[0]=1时,tph_st_tag[7:0]有效

  • tph_st_tag[15:8]提供的Steering Tag与此拍的第二个TLP有关。当m_axis_cq_tvalid=1 且is_sop[1]=1时,tph_st_tag[15:8]有效

182:119

parity

64

1)关于512bit位宽的传输数据的奇数校验

2)Bit i 指示对m_axis_cq_tdata的byte i 进行奇数校验

3)64bits分别对应512bits数据的64个字节

m_axis_cc_tuser (512-bit Interface)

bit

name

width

description

1:0

is_sop[1:0]

2

1)此拍内有一个新的TLP标识

2)is_sop[1:0]被设置在TLP的第一拍

3)当straddle关闭时,仅is_sop[0]是有效的

4)当straddle开启时,is_sop[1:0]含有如下:

  • 2'b00:此拍数据没有新的TLP头

  • 2'b01:此拍数据又一个新的TLP头。它的起始位置由is_sop0_ptr[1:0]指示

  • 2'b11:此拍数据有两个新的TLP头。is_sop0_ptr[1:0]指示第一个TLP的位置,is_sop1_ptr[1:0]指示第二个TLP的位置

  • 2'b10:保留

5)is_sop[1:0]域段仅当straddle使能时,IP核才使用此域段

6)当straddle关闭时,IP核使用tlast标识去判断一个输入的TLP的第一拍

3:2

is_sop0_ptr[1:0]

2

1)is_sop0_ptr[1:0]用来指示第一个TLP的第一个字节的位置

  • 2'b00:Byte lane 0

  • 2'b10:Byte lane 32

  • 2'b01,2'b11:保留

2)当straddle开启时,is_sop0_ptr[1:0]域段被IP核使用

3)当straddle关闭时,逻辑内部必须将一个新的TLP放在byte lane 0位置

5:4

is_sop1_ptr[1:0]

2

1)is_sop1_ptr[1:0]用来指示第二个TLP的第一个字节的位置

  • 2'b10:Byte lane 32

  • 2'b00,2'b01,2'b11:保留

2)当straddle开启时,is_sop1_ptr[1:0]域段被IP核使用。逻辑内部在此拍拆分2个TLP

7:6

is_eop[1:0]

2

1)在此拍内有一个TLP尾

2)is_eop[1:0]域段被设置在TLP的最后一拍

3)当straddle关闭时,仅is_eop[0]是有效的。

4)当straddle开启时,此域段的含有如下:

  • 2'b00:在此拍内没有TLP尾

  • 2'b01:在此拍有一个TLP尾。is_eop0_ptr[1:0]指示这个TLP的最后Dword的偏移

  • 2'b11:在此拍有两个TLP尾。is_eop0_ptr[1:0]指示第一个TLP的最后Dword的偏移,is_eop1_ptr[1:0]指示第二个TLP的最后Dword的偏移

  • 2'b10:保留

5)当straddle开启时,这个域段被IP核使用

6)当straddle关闭时,IP核使用tlast核tkeep域段判断尾拍和EOP的位置

11:8

is_eop0_ptr[1:0]

2

1)在此拍内第一个TLP的最后一个Dword的偏移

2)当is_eop[0]有效时,此域段才有意义

3)当straddle开启时,这个域段才被IP核使用

15:12

is_eop1_ptr[1:0]

2

1)在此拍内第二个TLP的最后一个Dword的偏移

2)当is_eop[1]有效时,此域段才有意义

3)当straddle开启时,这个域段才被IP核使用

16

discontinue

1

1)在事务传输期间,逻辑内部检测到错误并且需要中止此包时,需要置位此标识。IP核会将链路上对应的TLP清空,避免出现数据损坏。

2)除TLP的第一拍外,逻辑内部可以在事务传输的任何拍置位此信号

3)逻辑内部可以选择在error出现的地方中止数据包或进行传输直到包尾。针对后者情况,IP核认为此包从出现错误开始到包尾都是错误的,即使在包尾前逻辑内部将discontinue标识置低。

4)当s_axis_cc_tvalid=1时,discontinue才有意义

5)IP核仅当s_axis_cc_tready=1时,采集discontinue信号。因此,一旦discontinue置位后,直到s_axis_cc_tready=1之前,discontinue不应置为0

6)当straddle开启时,若一个带有discontinue标识的TLP尾,在相同的拍内,不应该发送新的TLP

7)当IP核被设置在一个Endpoint,这个错误通过IP核上报到Root Complex,使用AER

80:17

parity

64

1)256bit数据的奇数校验

2)当IP核的校验检查开启时,关于s_axis_cc_tdata的字节i的奇数校验,逻辑内部设置parity的bit i。

3)当IP核检测到奇偶校验错误时,IP核会将对应的TLP清空,并将此错误作为不可纠正的内部错误

4)如果校验检查关闭,parity标识将设置为0

AXI4-Stream Interface Description

Completer Request Interface Operation(512bits)

对于还有payload的TLP,以128bit的描述符开始,且后面跟随数据。

Completer请求接口支持2中不同的数据对齐模式,IP核例化的时候进行选择哪种模式。

Dword对齐模式

有效数据的第一个字节出现在lane n=S+16+(A mod 4) mod 64,A表示以字节为单位的传输的数据块起始地址,S表示描述符的第一个字节出现的位置。对于消息和配置请求,A被设置为0。当straddle关闭时,S一直为0。当straddle开启时,S可能是0或32。

128bit地址对齐模式

在512bit总线上,payload的起始位置一直在128bit边界对齐。然而,512bit总线上,描述符的起始仅在第0字节或者第32字节。与payload相关联的第1个字节的偏移遵循公式,n=(S+16+(A mod 16)) mod 64,S是描述符的第一个字节出现位置的偏移,A是与payload第一个字节相关的内存或I/O地址。意味着,如果描述符起始位置为第0字节,payload的起始位置可能为:16,20,24,28。如果描述符起始位置为第32个字节,payload的起始位置可能为:48、52、56或60。

描述符的末端与payload的第一个字节之间用空字节填充。

支持straddle功能的接口,在相同拍内最多允许支持2个TLP。straddle功能仅能在Dword对齐模式下使用。

Completer Request Descriptor Formats

IP核将链路上收到的每一个请求TLP作为独立的AXI4-Stream包,在完成请求接口上传输。每个包以描述符开始,并且payload尾随描述符的后面。描述符保持16B长度,描述符在请求包的第一个16字节中发送。描述符一直保持在512bit接口的第一拍发送。描述符的结构根据请求类型有所不同。

下面的结构是内存read/write、I/O的read/write或原子操作请求:

 

Completer Request Descriptor Fields

bit

field name

descriptor

1:0

Address Type

1)对于内存事务和原子操作,此域段才被定义,含有如下:

  • 00:请求中的地址未转换

  • 01:事务是一个传输请求

  • 10:在请求中的地址是转换过的地址

  • 11:保留

63:2

Address

1)此域段应用在内存、I/O和原子操作请求。

2)这个地址是请求的第一个Dword的地址

3)m_axis_cq_user中的first_be来判定字节级别的地址(重要)

4)当事务指定地址位宽为32bits时,bits[63:32]将被设置为0

74:64

Dword Count

1)此域段用来指示读或写的数据块大小(以Dword为单位)

2)这个域段的取值范围为:0~256 Dwords

3)对于I/O访问,Dword count=1

4)对于0长度的内存read/write,Dword count=1,且Firt_be=0

78:75

Request Type

1)识别事务的类型

2)事务类型和其编码,如下:

  • 0000: Memory Read Request

  • 0001: Memory Write Request

  • 0010: I/O Read Request

  • 0011: I/O Write Request

  • 0100: Memory Fetch and Add Request

  • 0101: Memory Unconditional Swap Request

  • 0110: Memory Compare and Swap Request

  • 0111: Locked Read Request (allowed only in Legacy Devices)

  • 1000: Type 0 Configuration Read Request (on Requester side only)

  • 1001: Type 1 Configuration Read Request (on Requester side only)

  • 1010: Type 0 Configuration Write Request (on Requester side only)

  • 1011: Type 1 Configuration Write Request (on Requester side only)

  • 1100: Any message, except ATS and Vendor-Defined Messages

  • 1101: Vendor-Defined Message

  • 1110: ATS Message

  • 1111: Reserved

95:80

Requester ID

1)与请求相关的PCI请求ID

2)在RID传统解释接口中,16bits拆分为,8bit bus number、5bit device number、3bit function number

3)开启AIR时,bit[95:88]为8bit的bus number、bit[87:80]为8bit的function number

4)当请求时非邮寄的事务时,逻辑内部必须存储requester id,并且,当数据返回时,需要将此域段返回给IP核

103:96

Tag

1)与请求相关的Pcie Tag

2)当请求时非邮寄的事务时,逻辑内部必须存储tag,并且,当数据返回时,需要将此域段返回给IP核

3)对于内存写和消息,此域段被忽略

111:104

Target Function

1)关于内存、I/O和原子操作请求,此域段才有意义

2)它提供请求的目标function number号(BAR检查进行判定)

3)当ARI使用时,此域段全部有效,否则,仅bit[106:104]有效

114:112

BAR ID

1)关于内存、I/O和原子操作请求,此域段才有意义

2)它为请求中的地址提供匹配的BAR number

  • 000 = BAR 0 (VF-BAR 0 for VFs)

  • 001 = BAR 1 (VF-BAR 1 for VFs)

  • 010 = BAR 2 (VF-BAR 2 for VFs)

  • 011 = BAR 3 (VF-BAR 3 for VFs)

  • 100 = BAR 4 (VF-BAR 4 for VFs)

  • 101 = BAR 5 (VF-BAR 5 for VFs)

  • 110 = Expansion ROM Access

注意:在Root Port(RP)模式下,BAR ID 保持000状态

120:115

BAR Aperture

1)关于内存、I/O和原子操作请求,此域段才有意义

2)它提供与请求匹配的BAR的间隙设置

3)在寻址它的内存或I/O空间中,用户决定使用的bits位

4)例如,数值12表示:匹配BAR的间隙是4K,并且,bits[63:12]被忽略

5)对于VF BARs,BAR Aperture是基于覆盖BAR的单个VF消耗的存储器空间

123:121

Transaction Class (TC)

1)与请求相关的PCIe传输事务类

2)当请求时非邮寄的事务时,逻辑内部必须存储tag,并且,当数据返回时,需要将此域段返回给IP核

126:124

Attributes

1)bit124是No Snoop 标识位,bit125是Relaxed Ordering标识位,bit126是ID-Based Ordering标识位,仅对于存储请求和信息,以上标识才能被设置

2)当请求时非邮寄的事务时,逻辑内部必须存储tag,并且,当数据返回时,需要将此域段返回给IP核

114:112

Message Routing

15:0

Destination ID

63:32

Vendor-Defined Header

63:0

ATS Header

Aborting a Transfer(中止传输)

对于包含有效载荷的任何请求,在传输payload的期间,在数据的最后一拍discontinue标识有效时,表示有错误产生。逻辑内部要对此TLP包,进行整包丢弃处理。在开启straddle的情况下,在尾拍中,接口不允许产生新的TLP包

Selective Flow Control for Non-Posted Requests(关于非邮寄事务的流控选择)

PCIe协议要求,即使逻辑内部不能接收非邮寄传输事务,也要Pcompleter请求接口持续传递邮寄事务。为了达到要求,IP核在completer接口上实现了基于可信值的流控机制,通过逻辑内部控制接口上的非邮寄事务请求,从而不影响邮寄事务。逻辑内部将接受非邮寄事务的buffer的可用空间值,通过pcie_cq_np_req信号传递到IP核中。仅当可用信值非零时,IP核才会发送非邮寄事务到逻辑内部。当非邮寄事务的传递因缺乏信值被暂定时,IP核任然会持续传递邮寄请求事务给逻辑内部。当逻辑内部没有基于信值反压机制时,逻辑内部会按照IP核传递的邮寄事务和非邮寄事务的顺序进行处理。

IP核维护一个内部信值计数器,用于跟随非邮寄事务的可用信值。下面的算法用于信值的跟踪。

  • 在复位时,IP核内部的信值计数器置0

  • 接口输出复位后,在每个时钟周期下:

    • 如果这个时钟下,pcie_cq_np_req[1:0]非零且没有非邮寄请求事务,信值+1,除非信值计数达到上限。当pcie_cq_np_req[1:0]=2‘b01时,信值+1,pcie_cq_np_req[1:0]=2‘b10或2’b11时,信值+2

    • 如果这个时钟下,pcie_cq_np_req[1:0]=2‘b00且有一个非邮寄请求被传递,信值-1,除非信值已为0

    • 如果这个时钟下,pcie_cq_np_req[1:0]=2’b00且有两个非邮寄请求被传递,信值-2,除非信值已为0

    • 否则,信值计数器保持不变

  • 如果信值计数器大于0,IP核开始传递一个非邮寄请求事务给逻辑内部

Completer Completion Interface Opearation(512-bits)

数据包的头部描述符的长度为96bit,描述符后面紧跟着的payload数据。

在Dword-aligned模式下,有效字节的第一个字节放置的位置必须遵循此公式:n=(S+12+(A mod 4) )mod 64,A表示:被传输的数据块的起始地址(Byte为单位的地址),S表示:描述符的第一个字节出现的lane number。这个地址A为描述符中Lower Address域段的值。当straddle关闭时,这个起始的lane number S一直为0,当straddle开启时,这个起始的lane number S为0或32。

在128bit address-aligned模式下,有效字节的第一个字节放置的位置必须遵循此公式:n=(S+16+(A mod 16) )mod 64,A表示:payload净荷的首字节的地址,S表示:描述符的第一个字节出现的lane number(0或32)。描述符和payload净荷的之间的空隙,通过添加空字节进行填充。

此接口支持Straddle模式,在同一拍的数据中最多可有两个TLP数据。Straddle模式仅能在Dword-aligned模式下使用。

Completer Completion Descriptor Format

将完成数据发动至IP核的完成接口。每个数据包都已描述符开始,尾随后面的是净荷数据。描述符的大小固定为12B。Completion TLP的描述符总是在TLP包的首拍的数据中。当逻辑内部将completion数据拆分为多个Completion时,必须将拆分的Completion包当作独立的AXI4-Stream数据包,拥有自己的描述符。

描述符格式如下:

Bit index

Width

Fied Name

Description

6:0

Address

7

1)对于memory读Completion,这个域段表示memory数据传输的起始地址(以Byte为单位)的低7bit位。

2)对于其他的Completion,此域段被设置为0

7

RSV

1

保留

9:8

Address Type

2

1)此域段,仅在memory事务和Atomic操作,才会被定义。逻辑需要将CQ的描述符中AT域段的值填充至此域段中

2)对于其他的事务,逻辑必须将其设置为0

15:10

RSV

6

保留

28:16

Byte Count

13

1)这13bit取值的范围为:0~4096。

2)如果memory读请求使用一个Completion完成,则此域段表示payload的大小(单位:Byte)

3)对于I/O 读completion和I/O写completion,此域段必须设置为4

4)当发送一个payload长度为0的memory读时,此域段必须设置为1且必须有一个Dword大小的虚拟payload跟随在描述符后面

29

Locked Read Completion

1

1)当这个completion是Locked Read requst响应时,此域段必须设置

2)对于其他Completion,此域段必须设置为0

31:30

RSV

2

保留

42:32

Dwrod Count

11

1)此域段表示payload的大小(单位:Dword),取值范围:0~1024

2)对于I/O读completion,此域段必须设置为1

3)对于I/O写completion,此域段必须设置为0

4)对于memory读且payload长度为0时,此域段必须被设置为1

5)当发送一个UR或CA 时,此域段必须设置为0

6)对于其他场景,根据当前数据包的payload大小,进行真实设置

45:43

Completion Status

3

1)此域段必须根据Completion类型进行设置

2)有效的设置场景有:

  • 000:Successful Completion

  • 001:Unsupported Request(UR)

  • 100:Completer Abort(CA)

46

Poisoned Completion

1

1)此域段用来标识逻辑内部传输的Completion TLP是否有错误

2)当跟随在描述符后面的payload有错误时,需要将此域段置1,否则,置0。通过此方式向PCIE告知payload有错误

47

RSV

1

保留

63:48

Requester ID

16

1)PCI请求ID,此域段与CQ的描述符中Requester ID一致

71:64

Tag

8

1)PCI Tag,此域段与CQ的描述符中Tag ID一致

79:72

Target Function/Device Number

8

1)此域段表示Completer function的设备号和/或功能号

  • Endpoint mode:

    • ARI enable:

      • Bit[79:72]被当作Completer Function Number)

    • ARI disable:

      • Bit[74:72]被当作Completer Function Number

      • Bit[79:75]不被使用

  • Switch的上游(IP核的Endpoint mode模式被选择)

    • ARI enable:

      • Bit[79:72]被当作Completer Function Number)

    • ARI disable:

      • Bit[74:72]被当作Completer Function Number

      • 如果completion来源于switch本身,则Bit[79:75]不被使用。若Completion来源于Switch上游,Bit[79:75]被当作Completion Device number,需要结合描述符中的Completor ID Enable域段使用

  • Root Port mode(下游端口)

    • ARI enable:

      • Bit[79:72]被当作Completer Function Number)

    • ARI disable:

      • Bit[74:72]被当作Completer Function Number

      • Bit[79:75]被当作Completer Device number。需要结合描述符中的Completor ID Enable域段使用

87:80

Completer Bus Number

8

1)此域段表示Requester Function 的设备号和/或功能号

  • Endpoint mode:

    • ARI enable:

      • Bit[87:80]被当作Requester Function Number)

    • ARI disable:

      • Bit[74:72]被当作Requester Function Number

      • Bit[79:75]不被使用

  • Switch的上游(IP核的Endpoint mode模式被选择)

    • ARI enable:

      • Bit[87:80]被当作Requester Function Number)

    • ARI disable:

      • Bit[82:80]被当作Requester Function Number

      • 如果completion来源于switch本身,则Bit[87:83]不被使用。若Completion来源于Switch上游,Bit[87:83]被当作Requester Device number,需要结合描述符中的Completor ID Enable域段使用

  • Root Port mode(下游端口)

    • ARI enable:

      • Bit[87:80]被当作Requester Function Number)

    • ARI disable:

      • Bit[87:80]被当作Requester Function Number

      • Bit[87:83]被当作Requester Device number。需要结合描述符中的Completor ID Enable域段使用

88

Completer ID Enable

1

91:89

Transaction Class(TC)

3

1)1'b1:在描述符中支持Bus、Device和Function numbers,来在TLP头的Completer ID域段

2)1'b0:IP核使用接收的Configuration requests中捕获的Bus和Device numbers和在描述符中支持的Function numbers来自于TLP头中的Completer ID域段

Endpint mode:

  • 必须设置为0

Switch上游(IP核的Endpoint mode模式被选择):

  • 当Completion来自Switch本身时,必须设置为0

  • 当Completion来自上游,必须设置为1

Root Port mode:

  • 必须设置为1,当ARI is not enable时, 此域段与Completer Bus Number bits和Completer Function/Device Number bits一起使用

94:92

Attributes

3

1)此域段值与CQ中TC值一致

95

RSV

1

保留

Completions with Successful Completion(SC)Status

对于Non-posted请求,逻辑内部必须返回一个Completion到Completer completion interface。当这个请求没有错误产生时,逻辑内部返回的Completion需要带有Successful Completion(SC) Status。根据请求类型,Completion可以带有payload数据。此外,当一个数据块大小超过MPS时,与这个请求相关的数据需要被拆分为多个Split Completions。逻辑内部必须在每个Split Completion传递到Completer completion interface接口上且每个Split Completion带有各自的描述符头部。

在Dword-aligned模式下,TLP以12Bytes的描述符头,payload数据紧随其后。在没有s_axis_cc_tready拉低且数据包正常传递期间,不允许拉低s_axis_cc_tvalid信号,若在此期间拉低s_axis_cc_tvalid,IP核将视为一个Error且将传输的相关Conpletion TLP作废,避免数据冲突。

逻辑内部必须在数据包的最后一拍,拉高s_axis_cc_tlast信号。如果IP核不准备接收数据,IP核会将s_axis_cc_tready拉低。当s_axis_cc_tready拉低时,逻辑内部保持s_axis_cc_tdata和s_axis_cc_tlast不发生改变。

Completions with Error Status(UR and CA)

当在completer request interface上,响应一个接收请求(此请求带有Unsported Request或Completion Abort 状态)时,逻辑内部必须发生一个3个Dword的completion描述符,其后面附带5个Dwords信息。这5个Dwords信息对IP核产生log很重要。

按照下面的规则构成:

  • 前三个Dword为描述符头

  • 第四个Dword包含在m_axis_cq_tuser中的部分状态信号,如下

    • m_axis_cq_tuser中的first_be[3:0]

    •  m_axis_cq_tuser中的last_be[3:0]

    • m_axis_cq_tuser中的tph_present、tph_type[1:0] 和 tph_st_tag[7:0]

  • 后四个Dwords来自CQ中的描述符头

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值