首页 > 技术 > 内容

FPGA以太网-UDP协议

时间:2026-01-06  作者:Diven  阅读:0

UDP协议是不可靠的协议,也就是说在传输的过程中如果出错了,并不会去重新传输这个协议包,这个和TCP是不一样的。如果我们需要传输一些即使丢包也不太影响质量的数据的时候便可以采取UDP协议。比如做图像,音频等数据的传输,采用UDP协议会更好一点,因为在传输的时候即使丢失了一些包,也不会产生太大的影响,反而如果采用TCP这种出错会重传的协议在网络环境不好的时候反而会引入较大的延迟从而影响体验。但是对于传输文件等功能来说就需要采用ftp这种基于tcp的协议了,毕竟谁都不愿意收到的文件里面有大量的错误。

现在FPGA里面先实现UDP协议的回环测试。整个工程目录和我们之前实现ARP协议一样FPGA以太网--ARP协议,分为tx rx crc和ctrl四个模块。

对于一个以太网帧需要分为下图几个部分(图片来源于正点原子的资料)

因此在rx模块中我们定义了状态机的以下几个状态,分别用于解析前导码,以太网帧头,IP首部,UDP首部,数据和校验码。

状态机跳转如下:

 

always @(*) begin case (curr_state) IDLE:begin if(rxd == 8'h55 && valid == 1'b1)begin next_state = PREAMLE; end else begin next_state = IDLE; end end PREAMLE:begin if(preamleError == 1'b1)begin next_state = IDLE; end else if(preamleSucess == 1'b1)begin next_state = FRAME_HEAD; end else if(valid == 1'b0)begin next_state = IDLE; end else begin next_state = PREAMLE; end end FRAME_HEAD:begin if(headError == 1'b1)begin next_state = IDLE; end else if(headSucess == 1'b1)begin next_state = IP_HEAD; end else if(valid == 1'b0)begin next_state = IDLE; end else begin next_state = FRAME_HEAD; end end IP_HEAD:begin if(ipHeadError == 1'b1)begin next_state = IDLE; end else if(ipHeadSucess == 1'b1)begin next_state = UDP_HEAD; end else if(valid == 1'b0)begin next_state = IDLE; end else begin next_state = IP_HEAD; end end UDP_HEAD:begin if(udp_head_cnt == 8'd7)begin next_state = DATA; end else if(valid == 1'b0)begin next_state = IDLE; end else begin next_state = UDP_HEAD; end end DATA:begin if(udp_data_cnt == udp_len - 16'd1)begin next_state = FCS; end else if(valid == 1'b0)begin next_state = IDLE; end else begin next_state = DATA; end end FCS:begin if(valid == 1'b0)begin next_state = IDLE; end else begin next_state = FCS; end end default: begin next_state = IDLE; end endcaseend

 

在tx中用于udp数据的发送:

当valid为高的时候发起一次udp的发送请求同时将发送长度,mac,ip,port等数据都传进来,当可以发送数据的时候会把ready信号置高。

需要注意的是在以太网发送的过程中,两个以太网帧之间是需要有间隔的,这样才能完成正常的传输。因此我们定义了一个gap来完成这个过程。

为了完成UDP回环测试,使用QT制作一个测试小工具

可以设置IP和端口,下面为发送窗口,上面是回环回来的数据。

可以看到UDP环回测试成功。


审核编辑:刘清

猜您喜欢


贴片电阻上的47B标识表示其阻值为47欧姆,误差为±0.1%。 字母B代表0.1%的精度。贴片电阻通常采用三位数字或字母数字组合来表示阻值。前两位或三位数字表示...
2024-11-29 10:25:39
TO-263(也称为DDPAK)是一种常见的表面贴装封装类型,广泛应用于功率器件,如电源管理IC、功率MOSFET和其他高功率电子组件。随着电子设备对于小型化和...
2025-03-07 00:09:54
保险丝作为保护电路安全的重要元件,起到了不可替代的作用。UTL(尤提乐)作为汽车保险丝领域的知名品牌,凭借其高品质的产品和多样化的类型,赢得了广大车主和维修人员...
2020-04-29 02:40:30
木托盘是现代物流中不可少的重要工具,按照不同的标准可以进行多种分类。根据结构形式,木托盘可以分为平板式和框架式。平板式托盘适合承载各种货物,而框架式托盘则更适合...
2020-06-01 00:00:00
贴片电阻的耐压值指的是电阻能够承受的最大电压,超过此值电阻可能被击穿损坏。计算贴片电阻耐压值,并非简单的电压值,而是需要考虑功率。一般来说,贴片电阻的耐压值计算...
2024-11-29 10:25:32
气动除锈机是高效、便捷的表面处理工具,应用于工业制造、汽车维修和船舶维护等领域。利用压缩空气驱动,能够快速去除金属表面的锈蚀、油污和旧漆,恢复原有的光泽。该设备...
2022-11-03 00:00:00
螺柱和螺杆是机械连接中常见的紧固件,在结构和功能上有着明显的区别。螺柱通常是指固定在基体上的螺纹杆,其一端或两端突出,用于连接其部件。主要作用是提供一个稳定的连...
2008-03-24 00:00:00
在选择验电器时,规格和尺寸是非常重要的考虑因素。验电器的规格通常包括其测量范围、准确度和响应时间等,而尺寸则关系到其便携性和使用便利性。常见的验电器规格有低压和...
2012-07-01 00:00:00
秒表作为计时工具,具有多个关键参数,帮助用户准确记录时间。最基本的参数是“计时精度”,通常以毫秒为单位,精确度越高,记录时间越准确。其次是“计时范围”,秒表能够...
2009-08-01 00:00:00
硅电容在现代电子中很重要。被应用于各种设备。本文将介绍硅电容的应用和优点。硅电容的基本概念硅电容是新型电容器。主要由硅材料制成。与传统电容相比,硅电容更小,更轻...
2025-04-11 19:30:06