• FPGA---UDP通信求助


    项目场景:

    使用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;
    		else
    			rx_done_check_ok <= 1'b0;   //改为1则认为crc值相等,即不判断
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    此代码用于判断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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    仿真时没有问题:
    在这里插入图片描述
    不加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;
    		else
    			rx_done_check_ok <= 1'b0;   //改为1测为不判断crc校验
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

    解决方法:
    经过上板实测,通过ILA抓取发现在这里插入图片描述
    crc_en未在有效数据地方拉低(只在crc_data有效数据到来时拉高),图中红色部分可见。
    修改代码为:

     IDLE:     begin
    							    GMII_RX_DONE <= 0;
    								crc_en <= 0;
    								if(GMII_DV_reg1 && !GMII_DV_reg2)
    									begin
    										  curr_state <= PREAMBLE_CODE;
    										  crc_init <= 1;
    									end
    								else
    								  curr_state <= curr_state;
    							end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在IDLE状态加上crc_en <= 0;即可解决。
    在这里插入图片描述

  • 相关阅读:
    扔掉你的开发板,跟我玩Mcore-全志h616
    开发一款抖音小游戏大致的研发成本是多少
    手把手教你定位线上MySQL锁超时问题,包教包会
    flink的Standalone-HA模式安装
    科普一下:拍抖音需要什么设备,可能用到的设备合集
    基于SkyEye运行Qt:著名应用程序开发框架
    Node + Express 后台开发 —— 起步
    MySQL(4)
    node笔记记录36process之1
    UNIAPP实战项目笔记47 显示默认收货地址和修改收货地址页面的布局
  • 原文地址:https://blog.csdn.net/wd12306/article/details/133748041