FPGA以太网接口设计,纯Verilog实现UDPTCP协议,支持校验和重发功能,适合学习和简单通信

FPGA以太网接口设计,纯Verilog实现UDPTCP协议,支持校验和重发功能,适合学习和简单通信

fpga以太网接口设计,支持udp和tcp协议,纯verilog手写代码,纯逻辑实现udptcp协议,接口类似于axi stream 。 mac层和tcp/ip层模块是分开的,物理接口可根据要求定制,目前的百兆网版本接口为RMII,千兆网版本接口为GMII转RGMII,Gmii和rgmii均下板测试过,tcp模块支持校验和重发功能,可和电脑端进行一对一通信。 可封装为axi接口(axi stream 或 axi lite)。 适合简单基础通信和参考学习,工程基于vivado,已有代码框图如下,其中图三为soc版本,网口为从机,riscv核为主机,通过axi interconnect桥接,也可灵活增加其他从设备。 非soc版本就只有网口的硬件代码,如图四。 可以和网络调试助手和python或c的socket通信。 注:资源消耗将近2000lut(xilinx fpga) 附带四份文档,1为抓包实测的文档说明,2为以太网协议介绍的ppt,3为tcp实现的代码说明,4为报文基本概念

最近在搞一个FPGA的以太网接口设计,支持UDP和TCP协议,纯Verilog手写代码,没有用任何现成的IP核,完全从底层逻辑实现。这个设计的目标是做一个简单、基础的通信模块,适合学习和参考。整个工程基于Vivado,资源消耗大概2000个LUT(Xilinx FPGA),不算特别大,但功能还算齐全。

模块划分

整个设计分为两个主要模块:MAC层和TCP/IP层。MAC层负责处理物理接口,TCP/IP层则负责协议栈的实现。物理接口可以根据需求定制,目前有百兆网的RMII接口和千兆网的GMII转RGMII接口。GMII和RGMII都已经下板测试过,稳定性还不错。

MAC层

MAC层的代码相对简单,主要是处理物理接口的数据收发。以RMII为例,代码大致如下:

module rmii_rx ( input wire clk_50m, input wire rst_n, input wire [1:0] rxd, input wire crs_dv, output reg [7:0] rx_data, output reg rx_valid ); // 这里省略了一些状态机和数据处理逻辑 always @(posedge clk_50m or negedge rst_n) begin if (!rst_n) begin rx_data <= 8'b0; rx_valid <= 1'b0; end else begin // 根据crs_dv和rxd信号解析数据 // 这里省略了具体的数据解析逻辑 end end endmodule

这个模块的核心是根据crsdv和rxd信号解析出有效的数据,并输出rxdatarxvalid信号。rxvalid信号表示当前rx_data是有效的。

TCP/IP层

TCP/IP层的实现稍微复杂一些,特别是TCP协议,涉及到校验和、重发等功能。这里简单看一下TCP的校验和计算部分:

function [15:0] tcp_checksum; input [15:0] data [0:9]; reg [31:0] sum; integer i; begin sum = 0; for (i = 0; i < 10; i = i + 1) begin sum = sum + data[i]; end while (sum >> 16) begin sum = (sum & 16'hFFFF) + (sum >> 16); end tcp_checksum = ~sum; end endfunction

这个函数计算TCP报文的校验和,输入是一个16位的数据数组,输出是16位的校验和。计算过程是将所有数据相加,然后对结果进行进位处理,最后取反得到校验和。

AXI接口封装

为了方便集成到SoC系统中,这个设计还支持封装为AXI接口,可以是AXI Stream或AXI Lite。以AXI Stream为例,代码大致如下:

module axi_stream_interface ( input wire aclk, input wire aresetn, input wire [31:0] tdata, input wire tvalid, output reg tready, output reg [31:0] rdata, output reg rvalid, input wire rready ); // 这里省略了一些状态机和数据处理逻辑 always @(posedge aclk or negedge aresetn) begin if (!aresetn) begin tready <= 1'b0; rdata <= 32'b0; rvalid <= 1'b0; end else begin // 根据tvalid和tready信号处理数据 // 这里省略了具体的数据处理逻辑 end end endmodule

这个模块的核心是根据tvalidtready信号处理数据流,并输出rdatarvalid信号。rvalid信号表示当前rdata是有效的。

测试与通信

这个设计可以和电脑端的网络调试助手、Python或C的Socket进行通信。测试时,我用Wireshark抓包验证了数据的正确性,抓包文档也附在了工程里。TCP模块支持校验和重发功能,和电脑端进行一对一通信时,稳定性还不错。

总结

这个FPGA以太网接口设计虽然不算特别复杂,但涵盖了从MAC层到TCP/IP层的完整实现,适合初学者学习和参考。代码全部手写,没有依赖任何现成的IP核,理解起来相对容易。如果你对FPGA和网络协议感兴趣,这个工程应该能给你一些启发。

附带的文档里还有以太网协议的介绍、TCP实现的代码说明和报文基本概念,感兴趣的话可以深入了解一下。

Read more

大模型工程化:从Prompt到Harness,驾驭AI生产力新时代

大模型工程化:从Prompt到Harness,驾驭AI生产力新时代

随着大模型技术的飞速发展,行业核心矛盾已从“模型够不够聪明”转变为如何让大模型的能力稳定、可控、合规地落地到真实生产场景。文章介绍了大模型工程化的三大范式:Prompt Engineering(提示词工程)、Context Engineering(上下文工程)和Harness Engineering(驾驭工程)。Prompt Engineering是基础,Context Engineering是场景落地的核心支撑,而Harness Engineering则是生产级规模化落地的完整框架。文章强调这三者并非相互替代,而是层层递进、互为补充的关系,共同构成了完整的工程化体系。最后,文章展望了大模型工程化未来的发展方向,包括三者的深度融合与自动化、标准化与开源生态的完善、评估体系的规模化落地以及与多智能体、多模态的深度适配。 生成式AI发展至今,大模型的基础推理能力早已实现跨越式突破,行业的核心矛盾也已从“模型够不够聪明”,转变为“如何让大模型的能力稳定、可控、合规地落地到真实生产场景”。从最初的对话机器人,到如今的企业级业务自动化、AI智能体规模化落地,行业用三年时间完成了三次认知升级,逐

微调模型成本太高,用RAG技术,低成本实现AI升级

微调模型成本太高,用RAG技术,低成本实现AI升级

文章目录 * 大模型 RAG 技术深度解析:从入门到进阶 * 一、大语言模型(LLM)的三大痛点 * 1.1 幻觉问题:一本正经地胡说八道 * 1.2 时效性问题:知识更新不及时 * 1.3 数据安全问题:敏感信息泄露风险 * 二、RAG 技术:检索增强生成 * 2.1 RAG 的定义 * 2.2 RAG 的架构 * 2.2.1 检索器模块 * 2.2.2 生成器模块 * 三、使用 RAG 的八大优势 * 3.1 可扩展性:减少模型大小和训练成本 * 3.

2026最新Python+AI入门指南:从零基础到实战落地,避开90%新手坑

2026最新Python+AI入门指南:从零基础到实战落地,避开90%新手坑

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 哈喽,各位想入门AI的小伙伴!随着生成式AI、大模型应用的爆发,Python+AI已成为最热门的技术组合,无论应届生求职、职场人转型还是兴趣探索,掌握这门技能都能打开新赛道。但很多新手都会陷入“先学Python还是先学AI”“数学不好能不能学”“学完不会实战”的困境。 本文结合2026年AI技术趋势,用「知识点+核心代码+流程图+表格」的形式,从零基础打通Python+AI入门全链路,聚焦热门易上手方向,全程干货,新手可直接跟着练,老司机可查漏补缺~ 一、为什么2026年入门AI,首选Python? 很多新手会问:“学AI一定要用Python吗?Java、C++不行吗?” 答案是:不是不行,但Python是效率最高、门槛最低、生态最完善的选择,