UDP--DDR--SFP,FPGA實現之指令監測模塊實現

指令監測模塊實現介紹

如下圖所示,為指令監測模塊的運行框圖
在這里插入圖片描述
將指令設置為8bytes數據,故需要一個64位寄存器進行緩存,在進行數據緩存時,數據不可以輸出至下一級模塊,故對數據和有效指示信號也應該進行相應延遲,指令緩存8周期,檢驗一周期,為了數據的穩定輸出,故延遲10周期,使用shift_ram ip實現該功能即可。
當監測到頭部8個數據不屬于指令數據后,進行有效數據輸出,而若監測到為指令數據,則在輸出有效信號置0,下一級模塊即不會進行數據緩存,避免數據文件緩存錯誤。

指令監測模塊代碼編寫

根據上述框圖的介紹,以及邏輯的梳理,本節代碼可以清晰寫出,其代碼實現如下:

module udp_cmd_check(input               i_clk           ,input               i_rst           ,input   [7 :0]      i_udp_data      ,input               i_udp_valid     ,output  [7 :0]      o_udp_data      ,output              o_udp_valid     ,output              o_store_done    ,output              o_raddr_clear   );reg     [63:0]          r_check_data    ;
reg     [1 :0]          r_check_res     ;
reg     [1 :0]          r_clear_res     ;
reg     [1 :0]          ro_raddr_clear  ;
wire    [8 :0]          w_dly_din       ;
wire    [8 :0]          w_dly_dout      ;
wire                    w_store_done    ;
wire                    w_raddr_clear   ;assign  w_dly_din       = {i_udp_data,i_udp_valid};dly_w9d10 dly_w9d10_u0 (.D      (w_dly_din  ),.CLK    (i_clk      ),.Q      (w_dly_dout )
);assign  w_store_done = &r_check_res ? 1'b1 : 1'b0;
assign  w_raddr_clear= &r_clear_res ? 1'b1 : 1'b0;
assign  o_udp_data   = w_dly_dout[8 :1] ;
assign  o_udp_valid  = (w_store_done == 1'b1 || w_raddr_clear == 1'b1) ? 1'b0 : w_dly_dout[0];
assign  o_store_done = w_store_done     ;
assign  o_raddr_clear= w_raddr_clear    ;always @(posedge i_clk,posedge i_rst) beginif(i_rst)r_check_data <= 64'd0;else if(i_udp_valid) r_check_data <= {r_check_data[55:0],i_udp_data};
endalways @(posedge i_clk,posedge i_rst) beginif(i_rst)r_check_res <= 2'b00;else if(r_check_data[63:32] == 32'HA5A5A5A5 && r_check_data[31 :0] == 32'HBCBCBCBC) r_check_res <= 2'b11;elser_check_res <= 2'b00;
endalways @(posedge i_clk,posedge i_rst) beginif(i_rst)r_clear_res <= 2'b00;else if(r_check_data[63:32] == 32'HD5D5D5D5 && r_check_data[31 :0] == 32'HFCFCFCFC) r_clear_res <= 2'b11;else if(r_dly_valid & ~w_dly_dout[0])r_clear_res <= 2'b00;
endendmodule

實際r_check_res 和 r_clear_res 只需1bit也可,筆者之前為了降低邏輯位寬過大,曾對高32位和低32位進行分別判斷,測試來看,上述代碼也可以正常運轉,時序不存在問題。

指令監測模塊仿真

在代碼編寫完成后,便需要進行仿真測試,編寫仿真文件,因為在之后的各個模塊檢驗中,都需要進行udp數據接收的模擬,筆者便將udp數據發送、指令發送,編寫為對應的任務塊,方便進行復用,tb文件代碼如下

reg                 i_udp_clk       = 1'b0;
reg                 i_udp_rst       = 1'b0;
wire    [7 :0]      w_store_udp_data    ;
wire                w_store_udp_valid   ;
wire                w_store_done        ;
wire                w_raddr_clear       ;
integer i = 0;
integer j = 0;
always #4   i_udp_clk = ~i_udp_clk;
initial begini_udp_rst = 1;i_sfp_rst = 1;i_ui_rst  = 1;#100@(i_sfp_clk) begini_udp_rst <= 1'b0;i_sfp_rst <= 1'b0;i_ui_rst  <= 1'b0;end#100/*傳輸擦除指令*/@(posedge i_udp_clk)udp_cmd(64'HD5D5D5D5_FCFCFCFC);/*傳輸32KB*/@(posedge i_udp_clk)for(i = 0;i < 32; i = i + 1) begin@(posedge i_udp_clk)udp_send(1024);#500@(posedge i_udp_clk);end/*傳輸完成指令*/@(posedge i_udp_clk)udp_cmd(64'HA5A5A5A5_BCBCBCBC);
/*指令監測,輸出監測后數據*/
udp_cmd_check udp_cmd_check_u0(.i_clk              (i_udp_clk          ),.i_rst              (i_udp_rst          ),.i_udp_data         (i_udp_data         ),.i_udp_valid        (i_udp_valid        ),.o_udp_data         (w_store_udp_data   ),.o_udp_valid        (w_store_udp_valid  ),.o_store_done       (w_store_done       ),.o_raddr_clear      (w_raddr_clear      ));
task udp_send(input    [15:0]  byte_len);begin : datainteger i;i_udp_data   = 8'd0;i_udp_valid  = 1'd0;@(posedge i_udp_clk);for(i = 0;i < byte_len ;i = i + 1)begini_udp_data  <= i_udp_data + 1'b1;i_udp_valid <= 1'b1;@(posedge i_udp_clk);endi_udp_data   <= 8'd0;i_udp_valid  <= 1'd0;
end
endtasktask udp_cmd(input    [63:0]  i_cmd);begin : cmdinteger i;i_udp_data   = 8'd0;i_udp_valid  = 1'd0;@(posedge i_udp_clk);for(i = 0;i < 8 ;i = i + 1)begini_udp_data  <= i_cmd[63:56];i_cmd <= {i_cmd[55:0],8'h0};i_udp_valid <= 1'b1;@(posedge i_udp_clk);endi_udp_data   <= 8'd0;i_udp_valid  <= 1'd0;
end
endtask

其模擬過程即是,首先發送擦除指令,然后進行數據發送,在數據傳輸完成后,發送數據完成指令,在仿真過程中,就這三項測試做驗證,監測模塊是否成功識別指令,阻止指令數據輸出,以及是否成功輸出有效數據。
在這里插入圖片描述
由圖片可知,模塊成功監測到DDR擦除指令,并將清除信號輸出置高多周期,數據輸出有效信號置低,在標準以太網中幀長間隔為12bytes,在仿真測試中,并未嚴格要求該參數,但實際模塊工作可以適應這類情況。
在這里插入圖片描述
由圖片可知,成功對數據進行了下一級模塊轉發。
在這里插入圖片描述
觀察文件傳輸完成,發送結束碼,模塊成功監測出結束碼,拉高傳輸完成信號,并且數據未進行有效輸出,避免了錯誤緩存。
經過上述仿真,可以看出該模塊正常工作,對于該模塊的編寫是較為簡單的,但指令識別功能,在開發中,是十分常用的模塊,有必要進行掌握。關于本節代碼的問題,以及優化意見,歡迎大家在評論區指出,如果想要對應工程進行學習,歡迎大家私信。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript雙問號操作符(??)詳解,解決使用 || 時因類型轉換帶來的問題

目錄 JavaScript雙問號操作符&#xff08;??&#xff09;詳解&#xff0c;解決使用||時因類型轉換帶來的問題 一、雙問號操作符??的基礎用法 1、傳統方式的痛點 2、雙問號操作符??的精確判斷 3、雙問號操作符??與邏輯或操作符||的對比 二、復雜場景下的空值處理 …

智能體的典型應用:自動駕駛、智能客服、智能制造、游戲AI與數字人技術

本文為《React Agent&#xff1a;從零開始構建 AI 智能體》專欄系列文章。 專欄地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。項目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代碼示?例與實戰源&#xff09;。完整介紹…

Ubuntu 22.04(WSL2)使用Docker安裝Redis

Ubuntu 22.04&#xff08;WSL2&#xff09;使用Docker安裝Redis 本教程將指導您在運行于WSL2的Ubuntu 22.04上通過Docker安裝Redis 7.4.3。您將獲得一個配置了自定義設置、持久化存儲和安全選項的Redis實例。 前提條件 WSL2上已安裝Ubuntu 22.04。WSL2上已安裝并運行Docker&…

淺談 Redis 數據類型

淺談 Redis 數據類型 &#xff08;一&#xff09;String 類型 Redis 的 String 類型 是二進制安全的&#xff0c;可以用來存儲 文本字符串、int 類型數據和 bitmap 位圖 等數據。 1. 字符串操作 適用于存儲 文本、JSON、序列化數據 等任意二進制安全的內容 命令作用示例SET設…

Day1 時間復雜度

一 概念 在 C 中&#xff0c;時間復雜度是衡量算法運行時間隨輸入規模增長的趨勢的關鍵指標&#xff0c;用于評估算法的效率。它通過 大 O 表示法&#xff08;Big O Notation&#xff09; 描述&#xff0c;關注的是輸入規模 n 趨近于無窮大時&#xff0c;算法時間增長的主導因…

PAC文件:智能代理配置的瑞士軍刀

在日常上網和企業網絡環境中&#xff0c;我們經常需要配置代理服務器來訪問特定資源、增強安全性或管理網絡流量。Windows和macOS系統自帶的代理配置通常提供全局代理或簡單的排除列表&#xff0c;這在某些復雜場景下顯得不夠靈活。例如&#xff0c;我們可能只想代理某個特定的…

獲取高德地圖JS API的安全密鑰和Key的方法

要使用高德地圖JavaScript API&#xff0c;您需要獲取API Key和安全密鑰(securityJsCode)。以下是獲取步驟&#xff1a; 1. 注冊高德開放平臺賬號 首先訪問高德開放平臺&#xff0c;如果沒有賬號需要先注冊。 2. 創建應用獲取Key 登錄后進入"控制臺" 點擊"應…

攜程酒店 phantom-token token1004 分析

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 部分python代碼 搞APP搞的心態有點崩…

小紅書多賬號運營效率優化:技術方案與自動化實踐

目錄 一、效率瓶頸與流程優化方向 二、技術實現方案與效率提升路徑 1. 多賬號統一管理&#xff1a;環境隔離與批量操作 2. 自動化任務設計&#xff1a;RPA與腳本化執行 四、效果驗證與數據對比 五、總結與開源工具推薦 六、下載地址&#xff1a; 一、效率瓶頸與流程優化…

FastDDS Transport功能模塊初步整理

一. 總體結構 二. 主要類的功能 2.1 TransportDescriptor和TransportInterface ? FastDDS中整個Transport類的設計遵循的是設計模式中的建造者模式&#xff0c;其中&#xff0c;TransportDescriptor就是建造者&#xff0c;而TransportInterface則是建造出來的產品。 ? Tra…

zabbix最新版本7.2超級詳細安裝部署(一)

如果文章對你有用&#xff0c;請留下痕跡在配置過程中有問題請及時留言&#xff0c;本作者可以及時更新文章 目錄 1、提前準備環境 2、zabbix7.2安裝部署 3、安裝并配置數據庫 4、為Zabbix server配置數據庫 5、為Zabbix前端配置PHP 6、啟動Zabbix server和agent進程 7、關閉防…

CodeBlocks調試報錯

嘗試打斷點&#xff0c;并且點擊紅色箭頭啟動debugger時&#xff0c;控制臺報錯 Active debugger config: GDB/CDB debugger:Default Building to ensure sources are up-to-date Selecting target: Debug Adding source dir: C:\Users\Lenovo\Desktop\exercise\ Adding source…

Manus 開放注冊:AI 智能體領域的新起點

2025 年 5 月 13 日成為了一個具有特殊意義的日子 —— 備受矚目的 AI 智能體平臺 Manus&#xff08;Manus&#xff09;正式宣布開放注冊。這一消息猶如一顆重磅炸彈&#xff0c;瞬間在全球科技圈引起了廣泛關注和熱烈討論。在此之前&#xff0c;Manus 一直以其獨特的魅力和極高…

車載網關作為車輛網絡系統的核心樞紐

我是穿拖鞋的漢子&#xff0c;魔都中堅持長期主義的汽車電子工程師。 老規矩&#xff0c;分享一段喜歡的文字&#xff0c;避免自己成為高知識低文化的工程師&#xff1a; 鈍感力的“鈍”&#xff0c;不是木訥、遲鈍&#xff0c;而是直面困境的韌勁和耐力&#xff0c;是面對外界…

俄羅斯方塊算法2025.5.10

問題描述 俄羅斯方塊&#xff08;Tetris&#xff09;作為風靡全球38年的現象級益智游戲&#xff0c;其簡單易學但難于精通的特性使其成為游戲史上的不朽經典。以下是其核心游戲規則解析及我們的要求&#xff1a; 游戲界面由20行10列的可視區域組成&#xff0c;7種不同形狀的四…

Femap許可網絡配置

電磁仿真領域&#xff0c;Femap以其卓越的性能和廣泛的應用場景&#xff0c;成為眾多工程師和科研人員的首選工具。為了滿足多用戶協作的需求&#xff0c;Femap提供了靈活的網絡配置方案。本文將詳細介紹Femap許可網絡配置的方法和優勢&#xff0c;幫助您輕松實現多用戶高效協作…

計算機視覺----時域頻域在圖像中的意義、傅里葉變換在圖像中的應用、卷積核的頻域解釋

1、時域&#xff08;時間域&#xff09;——自變量是時間,即橫軸是時間,縱軸是信號的變化。其動態信號x&#xff08;t&#xff09;是描述信號在不同時刻取值的函數。 2、頻域&#xff08;頻率域&#xff09;——自變量是頻率,即橫軸是頻率,縱軸是該頻率信號的幅度,也就是通常說…

主流高防服務器技術對比與AI防御方案實戰

1. 高防服務器核心能力對比 當前市場主流高防服務商&#xff08;如阿里云、騰訊云、華為云&#xff09;的核心防御能力集中在流量清洗與靜態規則防護&#xff0c;但面臨以下挑戰&#xff1a; 靜態防御瓶頸&#xff1a;傳統方案依賴預定義規則&#xff0c;對新型攻擊&#xff…

常時間運行的程序 導致系統卡頓 自動監控系統CPU和內存利用率 自動選擇 內存回收 軟件重啟 電腦重啟

長時間運行安防系統&#xff0c;導致CPU或內存利用率超80%&#xff0c;使得電腦變的緩慢、卡頓的問題。定時獲取CPU和內存利用率的數據&#xff0c;在不同時間段&#xff08;如凌晨與平時&#xff09;&#xff0c;根據利用率的不同的閾值&#xff0c;進行&#xff1a;內存回收(…

OpenCV播放攝像頭視頻

OpenCV計算機視覺開發實踐&#xff1a;基于Qt C - 商品搜索 - 京東 播放攝像頭視頻和播放視頻文件類似&#xff0c;也是通過類VideoCapture來實現&#xff0c;只不過調用open的時候傳入的是攝像頭的索引號。如果計算機安裝了一個攝像頭&#xff0c;則open的第一個參數通常是0&…