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

OpenClaw WebUI 中 Chat 的工作流程及主要程序名称

## 整体架构 OpenClaw WebUI 是一个基于 Web Components 的现代前端应用,提供了直观的聊天界面来与 OpenClaw Agent 进行交互。 ## 主要程序名称 ### 前端程序 1. control-ui/index.html - WebUI 主页面 2. control-ui/assets/index-BeKTXH1m.js - 打包后的前端核心代码 3. control-ui/assets/index-DWhx-9JL.css - 前端样式文件 ### 后端服务 1. Gateway 服务 - 运行在端口 18789,提供 API 端点 2. Agent 服务 - 处理代理逻辑 3.

IntelliJ IDEA 运行 Tomcat 报错:Please, configure Web Facet first!

IntelliJ IDEA 运行 Tomcat 报错:Please, configure Web Facet first!

适用:IntelliJ IDEA Ultimate 关键点:Web Facet + Artifact(war exploded)+ Tomcat Deployment 本文同时覆盖两种项目结构: 1)普通 Web 目录结构(例如项目里有 web/WEB-INF) 2)Maven 标准结构(src/main/webapp) 0. 你遇到的现象是什么? 当你在 IDEA 里运行 Tomcat(或尝试打开浏览器访问)时,弹出提示: Browser Error Please, configure Web Facet first! 这句话的真实含义是:IDEA 还没把你的模块识别为 Web 模块,因此无法正确识别 Web 根目录、

Ollama 结合 Open-WebUI 本地运行大模型

Ollama 结合 Open-WebUI 本地运行大模型

1. 一、Ollama 简介 2. 二、Docker安装 Ollama 3. 三、Open-WebUI 4. 四、文档链接 本文介绍了如何使用 Ollama 在本地运行大型语言模型,以及利用 Open-WebUI 提供的图形化界面与大语言模型进行交互。 一、Ollama 简介 Ollama 是一个开源框架,专门设计用于在本地运行大型语言模型(LLM)。它的主要特点和功能如下: * 简化部署:Ollama 旨在简化在 Docker 容器中部署 LLM 的过程,使得管理和运行这些模型变得更加容易。安装完成后,用户可以通过简单的命令行操作启动和运行大型语言模型。例如,要运行 Gemma 2B 模型,只需执行命令 ollama run gemma:2b。 * 捆绑模型组件:它将模型权重、

彻底弄懂Web Storage与Cookie:从机制到应用的全方位对比

彻底弄懂Web Storage与Cookie:从机制到应用的全方位对比

彻底弄懂Web Storage与Cookie:从机制到应用的全方位对比 * 引言 * 1. 什么是Cookie? * Cookie 的核心特性: * Cookie 流程图 * 2. 什么是Web Storage? * Web Storage 流程图 * 3. 核心区别深度解析(对标选项逐一解读) * a. 存储容量 * b. 网络流量(带宽浪费) * c. 作用域与跨域 * d. API 易用性 * e. 设计初衷 * f. 历史兼容与封装 * 4. 总结对比表 * 5. 应用场景建议 * 什么时候选 Cookie? * 什么时候选 Web Storage? * 6. 结语 🌺The Begin🌺点点关注,收藏不迷路🌺 引言 在前端开发中,