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.pswp.cn/pingmian/72537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72537.shtml
英文地址,請注明出處:http://en.pswp.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;同時也要在實體類中創建出…