赞
踩
在上板尝试进行PING操作的时候,发现一直是请求超时的情况,结果排查发现是首部校验和没有计算的问题。在UDP层,我们不进行校验和是不会影响数据正常收发的,但是在ICMP层不可以,FPGA没有进行校验和主机是无法正常进行PING板卡的。
ICMP校验和计算与IP层一样,只不过IP层只校验首部,但ICMP需要将数据一起进行校验。校验步骤:
always@(posedge i_clk,posedge i_rst)
begin
if(i_rst)
r_hd_checksum <= 'd0;
else if(i_trigger)
r_hd_checksum <= 16'h0000 + 16'h0000 + i_Identifier + i_Sequence
+ 16'h6162 + 16'h6364 + 16'h6566 + 16'h6768
+ 16'h696a + 16'h6b6c + 16'h6d6e + 16'h6f70
+ 16'h7172 + 16'h7374 + 16'h7576 + 16'h7761
+ 16'h6263 + 16'h6465 + 16'h6667 + 16'h6869;
else if(ri_trigger)
r_hd_checksum <= r_hd_checksum[31:16] + r_hd_checksum[15:0];
else
r_hd_checksum <= r_hd_checksum;
end
rm_axis_ip_data <= {16'h0000,(~r_hd_checksum[15:0]),ri_Identifier,ri_Sequence};
修改完校验和计算后PING结果一切正常。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。