PCIE——数据有效位判定

基于FPGA设计PCIE接口设计(数据有效位判定)

        PCIE和CPU之间通信,当FPGA发送一个存储器读请求(MRd)后,将收到CPU返回的带数据读完成报文(Cpld)。根据带宽的不同,接口数据位宽可以选择为64bit、128bit、256bit。在PCIE协议中,数据传输最小单位是双字(DW),所以FPGA收到Cpld报文后需要判断数据的哪个双字有效。Cpld报文的TLP头部长度为3DW。



    1. 接口数据位宽为64bit

            根据s_axi_rx_tkeep信号来判断哪个双字有效。

    (1)判断最后64bit数据有效双字:

        当s_axi_rx_tlast信号和s_axi_rx_tvalid信号同时拉高时,表示为最后一拍数据,根据s_axi_rx_tkeep[7:0](0xFF或0x0F)信号来判断哪个双字有效;其它情况下,s_axi_rx_tkeep[7:0]=0xFF,根据s_axi_rx_tvalid信号来判断64bit数据是否有效。

s_axi_rx_tdata[63:0] D1D0                 --D0                
s_axi_rx_tlast 1 1
s_axi_rx_tkeep[7:0] 0xFF 0x0F

    (2)判断起始64bit数据有效双字:

        Cpld报文的TLP头部长度为3DW(64bit+32bit,H1H0+D0H2),起始有效双字为D0--。


2. 接口数据位宽为128bit

        根据m_axi_rx_tuser信号来判断哪个双字有效。

    (1)判断最后128bit数据有效双字:m_axi_rx_tuser[21:17](rx_is_eof[4:0])

5'b1_0011 —— EOF located at byte3(DWORD 0),-- -- -- D0

5'b1_0111 —— EOF located at byte3(DWORD 1),-- -- D1 D0

5'b1_1011 —— EOF located at byte3(DWORD 2),-- D2 D1 D0

5'b1_1111 —— EOF located at byte3(DWORD 3),D3 D2 D1 D0

5'b0_xxxx  —— EOF not present

    (2)判断起始128bit数据有效双字:m_axi_rx_tuser[14:0](rx_is_sof[4:0])

5'b1_0000 —— SOF located at byte0(DWORD 0)

5'b1_1000 —— SOF located at byte8(DWORD 2)

5'b0_xxxx  —— SOF not present

Cpld报文的TLP头部长度为3DW(128bit-32bit):

rx_is_sof[4:0]=5'b1_0000:D0H2H1H0

        rx_is_sof[4:0]=5'b1_1000:H1H0--,D2D1D0H3,如果数据长度小于3DW,则还需要结合rx_is_eof[4:0]一起来判断有效双字。



猜你喜欢

转载自blog.csdn.net/qq_27048579/article/details/80750176