项目场景:

使用UDP进行回环,网络调试助手,发送数据通过UDP接收模块接收,解析出数据,给到UDP发送模块,传回上位机。


问题描述

UDP接收模块中,接收到的CRC校验值与自己计算CRC校验值进行判断,相符后将数据解析给发送端,否则回到空闲状态。当加上CRC校验判断后,回环会有无法接收现象。去掉CRC判断,数据回环无误。

(1)现确定crc计算模块无误,crc_result为接收上位机的值,crc_sum为计算值。
FPGA---UDP通信求助-LMLPHP
(2)接收模块中均对目的mac,目的IP,udp端口,IP校验,进行验证均无误。
FPGA---UDP通信求助-LMLPHP

此代码用于判断接收CRC值与计算CRC值

always @ (posedge clk125m_o  or negedge reset_n)
		if(!reset_n)
			rx_done_check_ok <= 1'b0;
		else if(crc_result == crc_sum )   
			rx_done_check_ok <= 1'b1;
		else
			rx_done_check_ok <= 1'b0;   //改为1则认为crc值相等,即不判断
	

此代码用于判断CRC是否通过,通过产生结束信号,解析出数据,不通过则回到空闲状态。

RX_DONE:  begin
									
								if((cnt_rx_done >= 2'd2) && (rx_done_check_ok == 1'b0) )
									begin
										curr_state <= IDLE;
										cnt_rx_done <= 0;
									end	
								else if(cnt_rx_done >= 2'd3)
									begin
										GMII_RX_DONE <= 1;
										curr_state = IDLE;
										cnt_rx_done <= 0;
									end
								else 
									begin
										cnt_rx_done <= cnt_rx_done + 1'b1;
										curr_state <= curr_state;	
									end
							end

仿真时没有问题:
FPGA---UDP通信求助-LMLPHP
不加CRC判断上板测试时数据传输无误:
FPGA---UDP通信求助-LMLPHP
加CRC校验时有时无法通过:
FPGA---UDP通信求助-LMLPHP
wireshark抓取也是:
FPGA---UDP通信求助-LMLPHP

【注:】

always @ (posedge clk125m_o  or negedge reset_n)
		if(!reset_n)
			rx_done_check_ok <= 1'b0;
		else if(crc_result == crc_sum )   
			rx_done_check_ok <= 1'b1;
		else
			rx_done_check_ok <= 1'b0;   //改为1测为不判断crc校验
	

还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!

【工程附件:】链接:https://pan.baidu.com/s/1Rw9Q0jhR82vSSx_FGYmquQ?pwd=2vvu
提取码:2vvu

10-11 12:36