1.一种协议无关、可支持目标读写操作的PCIEIP用户逻辑接口的扩展方法,其特征在于,该方法包含以下步骤:
(1)在基于TLP接口的PCIEIP核外部扩展一个目标读写控制转换装置;
(2)目标读写控制转换装置直接对PCIEIP的TLP接口进行操控,完成PCIE目标读写操作的协议相关处理;
(3)用户逻辑通过目标读写控制转换装置的用户逻辑接口,对PCIE目标读写操作进行响应;
其中,该目标读写控制转换装置用于实现PCIEIP核TLP接口到协议无关通用接口的转换;
所述的目标读写控制转换装置;包括:状态机,TLP解析模块,读请求应答拆分模块,应答TLP封装模块,命令接口控制模块,写数据FIFO,读数据FIFO;
所述的状态机,用于实现目标读写控制转换的控制;
所述的TLP解析模块,对接收的TLP进行解析,并保存相关PCIE命令的参数;
所述的读请求应答拆分模块,用于对PCIE读请求进行应答拆分,使读应答符合PCIE协议规范;读请求应答拆分模块计算出当前应答TLP的起始地址this_cpld_tlp_addr、当前应答TLP的双字长度this_cpld_tlp_dw_len、当前应答TLP的字节使能this_cpld_tlp_byte_en、以及未应答数据的双字长度remaining_dw_len这四个关键参数信息,并提交给应答TLP封装模块进行应答TLP的封装;
在状态机处于READ状态时,读请求应答拆分模块计算出第一次读应答所需的信息,其中,当前应答TLP的起始地址就是原始的读请求地址;如果读请求的长度小于等于规定的TLP最大负载长度,长度以双字为单位,则本次读请求只需一个应答TLP即可返回全部读数据,通过公式
this_cpld_tlp_dw_len=length_reg,this_cpld_tlp_byte_en={last_dw_be_reg,first_dw_be_reg},remaining_dw_len=0来计算当前应答TLP的双字长度this_cpld_tlp_dw_len、当前应答TLP的字节使能this_cpld_tlp_byte_en、以及未应答数据的双字长度remaining_dw_len这三个关键参数信息;如果读请求的长度大于规定的TLP最大负载长度,则需要多个应答TLP才能返回全部的读数据;其中length_reg为长度寄存器返回的数据;last_dw_be_reg为末段双字使能寄存器返回的值;first_dw_be_reg为首段双字使能寄存器返回的值;
通过公式
this_cpld_tlp_byte_en={4'b1111,first_dw_be_reg};
来计算当前应答TLP的双字长度this_cpld_tlp_dw_len、当前应答TLP的字节使能this_cpld_tlp_byte_en、以及未应答数据的双字长度remaining_dw_len这三个关键参数信息;其中Max_Payload_Size_in_DW为双字最大负载长度值;其中Max_Payload_Size_in_Byte为字节最大负载长度值;
当状态机处于NEXT_RD_CPLD_CHK状态时,上一个应答TLP已经通过PCIEIP核发送出去,此时读请求应答拆分模块需要计算接下来的读应答所需的参数信息;当前应答TLP的起始地址参数的更新算法如下this_cpld_tlp_addr={(this_cpld_tlp_addr[31:2]+this_cpld_tlp_dw_len),2'b00};
如果未应答数据的双字长度小于等于规定的TLP最大负载长度,表示接下来的将是本次交易中的最后一个应答TLP,通过公式this_cpld_tlp_dw_len=remaining_dw_len;remaining_dw_len=0来计算当前应答TLP的双字长度this_cpld_tlp_dw_len以及未应答数据的双字长度remaining_dw_len,判断未应答数据的双字长度remaining_dw_len是否等于1,在未应答数据的双字长度remaining_dw_len等于1时,通过公式this_cpld_tlp_byte_en={4’b0,last_dw_be_reg}来计算当前应答TLP的字节使能this_cpld_tlp_byte_en,在未应答数据的双字长度remaining_dw_len不等于1时,通过公式this_cpld_tlp_byte_en={last_dw_be_reg,4’b1111,}来计算当前应答TLP的字节使能this_cpld_tlp_byte_en;
如果未应答数据的双字长度大于规定的TLP最大负载长度,则至少还要发送两个应答TLP才能完成本次交易,而接下来的应答TLP的参数计算方法如下:this_cpld_tlp_dw_len=Max_Payload_Size_in_DW;this_cpld_tlp_byte_en=8’hFF;remaining_dw_len=remaining_dw_len-Max_Payload_Size_in_DW,来计算当前应答TLP的双字长度this_cpld_tlp_dw_len、当前应答TLP的字节使能this_cpld_tlp_byte_en、以及未应答数据的双字长度remaining_dw_len这三个关键参数信息;
所述的应答TLP封装模块,将需要返回的读数据或状态封装成应答TLP包;
所述的命令接口控制模块,对目标命令接口信号进行控制,并将命令信号从PCIE时钟域同步到用户时钟域;
所述的写数据FIFO,用于缓存、同步PCIE写操作数据;
所述的读数据FIFO,用于缓存、同步待返回的PCIE读操作数据;
通过上述扩展转换装置,在基于TLP接口的PCIEIP之上实现了可支持目标读写操作的协议无关用户逻辑接口。