项目场景:
使用UDP进行回环,网络调试助手,发送数据通过UDP接收模块接收,解析出数据,给到UDP发送模块,传回上位机。
问题描述
UDP接收模块中,接收到的CRC校验值与自己计算CRC校验值进行判断,相符后将数据解析给发送端,否则回到空闲状态。当加上CRC校验判断后,回环会有无法接收现象。去掉CRC判断,数据回环无误。
(1)现确定crc计算模块无误,crc_result为接收上位机的值,crc_sum为计算值。
(2)接收模块中均对目的mac,目的IP,udp端口,IP校验,进行验证均无误。
此代码用于判断接收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;elserx_done_check_ok <= 1'b0; //改为1则认为crc值相等,即不判断
此代码用于判断CRC是否通过,通过产生结束信号,解析出数据,不通过则回到空闲状态。
RX_DONE: beginif((cnt_rx_done >= 2'd2) && (rx_done_check_ok == 1'b0) )begincurr_state <= IDLE;cnt_rx_done <= 0;end else if(cnt_rx_done >= 2'd3)beginGMII_RX_DONE <= 1;curr_state = IDLE;cnt_rx_done <= 0;endelse begincnt_rx_done <= cnt_rx_done + 1'b1;curr_state <= curr_state; endend
仿真时没有问题:
不加CRC判断上板测试时数据传输无误:
加CRC校验时有时无法通过:
wireshark抓取也是:
【注:】
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;elserx_done_check_ok <= 1'b0; //改为1测为不判断crc校验
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
还请各位大佬不吝赐教,不胜感激!!!
【工程附件:】链接:https://pan.baidu.com/s/1Rw9Q0jhR82vSSx_FGYmquQ?pwd=2vvu
提取码:2vvu