ICMP、UDP以及IP、ARP报文包的仲裁处理

在之前的章节中,笔者就UDP、ICMP、IP、ARP、MAC层以及巨型帧等做了详细介绍以及代码实现及仿真,从本章节开始,笔者将就各个模块组合在一起,实现UDP协议栈的整体收发,在实现模块的整体组合之前,还需要考虑一个问题:
UDP(传输层) 和 ICMP(网络层) 层级不同。
IP(网络层) 和 ARP(网络接口层) 层级不同。
ARP 是网络接口层协议,直接作用于以太网帧;IP 和 ICMP 是网络层协议,负责逻辑寻址与控制。
但UDP和ICMP的报文均封装在IP数据包中。在一个协议栈中,IP收发器只有一个,当FPGA的ICMP报文和UDP报文同时要进行发送时,则必需要缓存其中一个数据报文,等待另一个数据报文传输完毕,再进行缓存数据报文的发送,以及当UDP报文和ICMP报文缓存区存在有效载荷时,提示上一级,暂缓数据的发送,避免多帧数据,造成缓存的混乱,整体实现的缓存代码,起始是比较简单的,没有涉及太过复杂的处理,UDP和ICMP都有对应的数据缓存FIFO,且二者是不混合使用的,所以处理逻辑简单,同理IP报文和ARP报文也是如此,而在FPGA端,起始ICMP报文和ARP报文的发送量是远远少于UDP报文的,同理也少于IP报文,所以报文的仲裁处理是较为简单的。
如下图所示,是仲裁处理代码的工作示意框图
在这里插入图片描述
在数据缓存区,由两个FIFO组成,一个是数据报文,另一个FIFO则是缓存本帧的数据长度以及报文类型,因为这是一个通用的仲裁处理,不考虑是在仲裁UDP/ICMP还是IP/ARP。所以报文类型无法通过A包缓存区和B包缓存器进行直接判定。
例化FIFO如下面代码所示,分别例化A、B组即可

FIFO_8X256 FIFO_8X256_UA (.clk            (i_clk              ),.din            (ri_data_A          ),.wr_en          (ri_valid_A         ),.rd_en          (r_fifo_rden_A      ),.dout           (w_fifo_dout_A      ),.full           (),  .empty          (w_fifo_empty_A     )
);FIFO_32X16 FIFO_32X16_UA (.clk            (i_clk              ),.din            ({ri_type_A,ri_len_A}),.wr_en          (ri_valid_A         ),.rd_en          (w_type_rd_A        ),.dout           (w_type_len_A       ),.full           (),  .empty          ()
);

关于仲裁比较简单,当判断某一个缓存区的空心号为低时,则标记指示信号、如下面代码所示

always@(posedge i_clk,posedge i_rst)
beginif(i_rst)r_arbiter <= 2'b00;else if(ro_trans_last)r_arbiter <= 2'b00;else if(!w_fifo_empty_A && r_arbiter == 2'b00 && r_cnt == 'd10)r_arbiter <= 2'b01;else if(!w_fifo_empty_B && r_arbiter == 2'b00 && r_cnt == 'd10)r_arbiter <= 2'b11;
end

即根据指示信号的具体值,判断读取哪一个缓存区,而ro_trans_last标志着该缓冲区本次读取完毕的的指示信号为ro_trans_last,即当最后一个数据输出给下一级模块,则表示本次仲裁读取完毕。关于输出trans总线,根据读取的是哪一个缓冲区,进行FIFO数据数据的复制即可,以及类型、长度、都从FIFO中对读取,而ro_trans_last拉高则是在本次读取的数据长度等于FIOF中缓存的本帧数据长度信息确定。
而r_cnt变量,是对两帧数据的输出进行一定间隔处理,降低处理压力,后续会根据实际情况进行间隔处理。
关于流程图中的Frame_refuse,即帧拒绝信号,指示上一级模块,暂时不要进行数据的发送,
其判定逻辑为A、B缓冲区都存在有效载荷,如下代码所示

always@(posedge i_clk,posedge i_rst)
beginif(i_rst)ro_refuse_rec <= 'b0;else if(ro_refuse_rec == 'b1 && r_arbiter == 2'b11 && (w_fifo_empty_B || w_fifo_empty_A))ro_refuse_rec <= 'b0;else if(r_arbiter == 2'b01 && !w_fifo_empty_B)ro_refuse_rec <= 'b1;
end

至此,本模块的逻辑已经基本介绍完毕,接下来进行代码仿真测试。
仿真测试条件如下,给接收端口A总线以及接收端口B总线输入相同数据,而数据报文类型不同,观察输出是否正确,以及拒绝接收的指示信号是否正确。
接下来的代码仿真,都使用modelsim仿真
在这里插入图片描述
可以看出,由于同时输入了A、B数据包,refuse_rec信号进行了拉高,而由于判端逻辑中A包的数据读取是优先于B包数据读取的,所以先进行了A包数据的输出。
数据输出正确,测试通过。
在下一章节中,笔者将就之前的一个问题进行讨论,即巨型帧问题,之前的代码实现了接收IP分片,那么用户想要发送巨型帧时,应该如何处理呢,笔者将就这个问题进行讨论以及代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型学习】第十九章 什么是迁移学习

目录 1. 迁移学习的起源背景 1.1 传统机器学习的问题 1.2 迁移学习的提出背景 2. 什么是迁移学习 2.1 迁移学习的定义 2.2 生活实例解释 3. 技术要点与原理 3.1 迁移学习方法分类 3.1.1 基于特征的迁移学习(Feature-based Transfer) 案例说明 代码示例 3.1.2 基于…

基于大模型的分泌性中耳炎全流程预测与治疗管理研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与创新点 二、分泌性中耳炎概述 2.1 疾病定义与特征 2.2 发病原因与机制 2.3 疾病危害与影响 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 选择大模型预测分…

【NLP 38、实践 ⑩ NER 命名实体识别任务 Bert 实现】

去做具体的事&#xff0c;然后稳稳托举自己 —— 25.3.17 数据文件&#xff1a; 通过网盘分享的文件&#xff1a;Ner命名实体识别任务 链接: https://pan.baidu.com/s/1fUiin2um4PCS5i91V9dJFA?pwdyc6u 提取码: yc6u --来自百度网盘超级会员v3的分享 一、配置文件 config.py …

蓝桥杯学习-11栈

11栈 先进后出 例题–蓝桥19877 用数组来设置栈 1.向栈顶插入元素--top位置标记元素 2.删除栈顶元素--top指针减减 3.输出栈顶元素--输出top位置元素使用arraylist import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(Str…

Linux 蓝牙音频软件栈实现分析

Linux 蓝牙音频软件栈实现分析 蓝牙协议栈简介蓝牙控制器探测BlueZ 插件系统及音频插件蓝牙协议栈简介 蓝牙协议栈是实现蓝牙通信功能的软件架构,它由多个层次组成,每一层负责特定的功能。蓝牙协议栈的设计遵循蓝牙标准 (由蓝牙技术联盟,Bluetooth SIG 定义),支持多种蓝牙…

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains&#xff08;全家桶: IDEA、WebStorm、GoLand、PyCharm&#xff09; 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具&#xff0c;但从 2024.02 版本起&#xff0c;JetBrains 调整了试用政策&#xff0c;新用户不再享有默认的 30 天免费试用…

1.8PageTable

页表的作用 虚拟地址空间映射&#xff1a;页表记录了进程的虚拟页号到物理页号的映射关系。每个进程都有自己的页表&#xff0c;操作系统为每个进程维护一个独立的页表。内存管理&#xff1a;页表用于实现虚拟内存管理&#xff0c;支持进程的虚拟地址空间和物理地址空间之间的…

Prosys OPC UA Gateway:实现 OPC Classic 与 OPC UA 无缝连接

在工业自动化的数字化转型中&#xff0c;设备与系统之间的高效通信至关重要。然而&#xff0c;许多企业仍依赖于基于 COM/DCOM 技术的 OPC 产品&#xff0c;这给与现代化的 OPC UA 架构的集成带来了挑战。 Prosys OPC UA Gateway 正是为解决这一问题而生&#xff0c;它作为一款…

数据结构------线性表

一、线性表顺序存储详解 &#xff08;一&#xff09;线性表核心概念 1. 结构定义 // 数据元素类型 typedef struct person {char name[32];char sex;int age;int score; } DATATYPE;// 顺序表结构 typedef struct list {DATATYPE *head; // 存储空间基地址int tlen; …

【WPF】在System.Drawing.Rectangle中限制鼠标保持在Rectangle中移动?

方案一&#xff0c;在OnMouseMove方法限制 在WPF应用程序中&#xff0c;鼠标在移动过程中保持在这个矩形区域内&#xff0c;可以通过监听鼠标的移动事件并根据鼠标的当前位置调整其坐标来实现。不过需要注意的是&#xff0c;WPF原生使用的是System.Windows.Rect而不是System.D…

基于银河麒麟系统ARM架构安装达梦数据库并配置主从模式

达梦数据库简要概述 达梦数据库&#xff08;DM Database&#xff09;是一款由武汉达梦公司开发的关系型数据库管理系统&#xff0c;支持多种高可用性和数据同步方案。在主从模式&#xff08;也称为 Master-Slave 或 Primary-Secondary 模式&#xff09;中&#xff0c;主要通过…

系统思考全球化落地

感谢加密货币公司Bybit的再次邀请&#xff0c;为全球团队分享系统思考课程&#xff01;虽然大家来自不同国家&#xff0c;线上学习的形式依然让大家充满热情与互动&#xff0c;思维的碰撞不断激发新的灵感。 尽管时间存在挑战&#xff0c;但我看到大家的讨论异常积极&#xff…

Figma的汉化

Figma的汉化插件有客户端版本与Chrome版本&#xff0c;大家可根据自己的需要进行选择。 下载插件 进入Figma软件汉化-Figma中文版下载-Figma中文社区使用客户端&#xff1a;直接下载客户端使用网页版&#xff1a;安装chrome浏览器汉化插件国外推荐前往chrome商店安装国内推荐下…

【Go语言圣经2.5】

目标 了解类型定义不仅告诉编译器如何在内存中存储和处理数据&#xff0c;还对程序设计产生深远影响&#xff1a; 内存结构&#xff1a;类型决定了变量的底层存储&#xff08;比如占用多少字节、内存布局等&#xff09;。操作符与方法集&#xff1a;类型决定了哪些内置运算符…

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景&#xff1f; 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目&#xff1f; 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器&#xff08;即项目将被打成 docker image&am…

SpringBoot 第一课(Ⅲ) 配置类注解

目录 一、PropertySource 二、ImportResource ①SpringConfig &#xff08;Spring框架全注解&#xff09; ②ImportResource注解实现 三、Bean 四、多配置文件 多Profile文件的使用 文件命名约定&#xff1a; 激活Profile&#xff1a; YAML文件支持多文档块&#xff…

深度解析React Native底层核心架构

React Native 工作原理深度解析 一、核心架构&#xff1a;三层异构协作体系 React Native 的跨平台能力源于其独特的 JS层-Shadow层-Native层 架构设计&#xff0c;三者在不同线程中协同工作&#xff1a; JS层 运行于JavaScriptCore&#xff08;iOS&#xff09;或Hermes&…

对话智能体的正确打开方式:解析主流AI聊天工具的核心能力与使用方式

一、人机对话的黄金法则 在与人工智能对话系统交互时&#xff0c;掌握以下七项核心原则可显著提升沟通效率&#xff1a;文末有教程分享地址 意图精准表达术 采用"背景需求限定条件"的结构化表达 示例优化&#xff1a;"请用Python编写一个网络爬虫&#xff08…

Xinference大模型配置介绍并通过git-lfs、hf-mirror安装

文章目录 一、Xinference开机服务systemd二、语言&#xff08;LLM&#xff09;模型2.1 配置介绍2.2 DeepSeek-R1-Distill-Qwen-32B&#xff08;大杯&#xff09;工具下载git-lfs&#xff08;可以绕过Hugging Face&#xff09; 2.3 DeepSeek-R1-Distill-Qwen-32B-Q4_K_M-GGUF&am…

MyBatis操纵数据库-XML实现(补充)

目录 一.多表查询二.MyBatis参数赋值(#{ }和${ })2.1 #{ }和${ }的使用2.2 #{ }和${ }的区别2.3 SQL注入2.3 ${ }的应用场景2.3.1 排序功能2.3.2 like查询 一.多表查询 多表查询的操作和单表查询基本相同&#xff0c;只需改变一下SQL语句&#xff0c;同时也要在实体类中创建出…