FPGA千兆網系列2-----UDP傳送與接收
文章目錄
開發環境
- 小梅哥AC6102開發板(內含RTL8211E千兆乙太網phy晶片)
- quartus prime17.1
- win10
- 千兆網絡卡 這個需要電腦支援,不支援就玩不了了
- udp協議介紹請參考我之前寫的udp和arp
- 本例項支援udp的傳送與接收
- 支援arp的傳送和接收
系統框圖
傳送
本例項支援傳送3種包
- 傳送udp包,s3_in是外部按鍵,按下時為低,鬆開為高。當s3_in被按下時,經過udp_debounce濾波,會輸出一個udp_wr訊號給generate_data模組,當udp_wr為低時,generate_data就會每隔1s產生1024個數據,並寫入到wfifo中,當wfifo中的資料到達1024個時,也就是wfifo_wrusedw >= 1024時,auto_read_write模組就會產生一個udp_tx訊號。然後通知eth_mac_send去傳送一個udp包。
auto_read_write產生udp_tx程式碼如下:
//tx_en always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin tx_en <= 1'b0; end else if(wfifo_wrusedw >= 'd1024)begin tx_en <= 1'b1; end else begin tx_en <= 1'b0; end end //tx_en_r always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin tx_en_r <= 1'b0; end else begin tx_en_r <= tx_en; end end assign udp_tx = tx_en && (~tx_en_r);
- 傳送arp請求包
當s2_in被按下時,會經過arp_debounce模組,並且在你鬆手時,產生一個高脈衝arp_req_tx訊號,(注意arp_debounce和udp_debounce模組功能是不一樣的,具體的自己看看程式碼就知道了),然後再通知eth_mac_send去傳送一個arp請求包。
arp_debounce產生arp_req_tx程式碼如下:
//對低電平期間的高脈衝進行濾波 //cnt always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= cnt; else cnt <= cnt + 1; end else begin cnt <= 0; end end assign add_cnt = key_r[2] == 1'b0; assign end_cnt = add_cnt && cnt == TIME_10US-1; //end_cnt_r always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin end_cnt_r <= 1'b0; end else begin end_cnt_r <= end_cnt; end end //捕獲下降沿 這個訊號會接到eth_mac_send的arp_req_tx上 assign key_out = (~end_cnt) && end_cnt_r;
- 傳送arp應答包,當pc向fpga傳送arp請求包時,eth_receive模組會解析接收到的資料,這個模組目前只支援udp和arp的解析,當其將資料解析為arp請求包時,就會產生一個arp_ack_tx訊號給eth_mac_send,並通知他傳送一個arp應答包。
eth_receive產生arp_ack_tx程式碼如下:
//arp_ack_tx
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
arp_ack_tx <= 1'b0;
end
else if((state_c == CRC) && end_cnt && opcode_req && arp_src_ip_ok)begin
arp_ack_tx <= 1'b1;
end
else begin
arp_ack_tx <= 1'b0;
end
end
接收
接收模組為eth_receive,目前只支援udp和arp兩種協議
- UDP,當解析資料為udp時,會產生cmd_flag和cmd_data兩個訊號,cmd_flag與udp包中的資料對齊,cmd_data就是udp的資料匯流排。
使用網路除錯助手向fpga傳送1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9,一共18個數據(如果不足18個數據,會自動補0到18位為止)。
signaltap捕獲的波形:
- ARP請求,當解析為arp請求時,會產生arp_ack_tx訊號。
為了使pc能傳送arp請求包給fpga,我們可以先把arp表清空。arp -d:清空arp表指令。
可以看出192.168.0.3介面下已經沒有192.168.0.2的資訊了,這個時候我們再拿網路除錯助手向fpga傳送udp包時,因為arp表被清空,所以他會先發一個arp的請求包,然後才再發udp包(因為網路除錯助手發不了arp包,我就想到了這個辦法,哈哈,有知道怎麼直接發arp包的可以在下面評論留言一下),順便拿wireshark看一下到底發了什麼包。
可以看出網路助手先發了一個arp的請求包,然後fpga響應了,產生了arp_ack_tx訊號,通知eth_mac_send發arp應答包給pc,這時pc的arp表就會把fpga的ip地址和mac地址對應上
知道了fpga的ip地址和mac後,他接著又發了udp包。 - ARP應答,當fpga向pc傳送了arp請求時,pc也會響應,並且傳送arp應答包給fpga,我設計這個功能,是因為每個pc的mac地址都不一樣,我們就自己向pc傳送arp請求包,然後再解析pc發的arp應答包,並把pc的mac地址給獲取,用於以後傳送udp包。所以這個主要目的是獲取pc的mac地址。
總結
本例項可以用於資料的傳輸,只需要把資料一直往generate_data模組中寫即可,它自動將資料通過udp傳送給pc。所以再稍微封裝一下就可以當成一個udp的ip核了。過幾天還會有個實際的例子,網路攝像頭專案,後續有時間的話,還會在攝像頭的接觸上增加一點影象處理,比如sobel運算元。
福利
專案工程下載連結:
相關推薦
FPGA千兆網系列2-----UDP傳送與接收
文章目錄開發環境系統框圖傳送接收總結福利 開發環境 小梅哥AC6102開發板(內含RTL8211E千兆乙太網phy晶片) quartus prime17.1 win10 千兆網絡卡 這個需要電腦支援,不支援就玩不了了 udp協議介紹請參考我之前寫的udp和ar
FPGA千兆網UDP協議實現
技術 pga 進程 linux class inf fin font spa 上一篇百兆網接口的設計與使用,我們接著來進行FPGA百兆網UDP(User Datagram Protocol)協議的設計。 1)UDP簡介 在此,參考博主夜雨翛然的博文“https://w
Tor釋出洋蔥網絡可進行傳送與接收檔案OnionShare 2
img 提醒 郵件 圖片 macos process fff win sage Tor項目釋出了可以使用Tor洋蔥網絡傳送與接收檔案的OnionShare 2,官方提到,OnionShare與其他電子郵件以及雲端硬盤的傳文件方法不同,沒有任何第三方能夠存取OnionShar
CentOS 7下的KVM網卡配置為千兆網卡
mode org network pre color pan 配置 strong 替換 在KVM下可以生成兩種型號的網卡,RTL8139和E1000,其實應該是底層生成不同芯片的網卡,而不是附帶宿主機網卡是什麽型號就是什麽型號的,其中默認為100兆網卡,即RTL8319的螃
千兆網絡卡如何才能達到全速
1000Mb網絡卡如何才能跑滿,跑到100%? 作者:趙磊 部落格:http://elf8848.iteye.com 千兆網絡卡理論最大傳輸速度是(1024Mbit/s=128MByte/s),注意b與B差了8倍。 要想達到最大傳輸速度要滿足三個條件 : 1
LINUX網絡卡(設定千兆網絡卡速度及模式)
http://blog.chinaunix.net/uid-23381466-id-58878.html Ethtool是用於查詢及設定網絡卡引數的命令。 概要: ethtool ethX //查詢ethX網口基本設定 ethtool –h //顯示
Linux下千兆網絡卡和萬兆網絡卡ethtool對比
[[email protected] ~]# ethtool em3 Settings for em3: Supported ports: [ TP ] Su
千兆網卡的傳輸速度
tps 服務 交換 占用cpu時間 www byte 1.5 自帶 隨著 千兆光纖網卡為1000Mbit/s網卡,最大傳輸速度能達到1000Mbit秒,只能提供一種固定傳輸速度,不能實現10/100/1000M自適應。千兆網卡多用於服務器,以便提供服務器與交換機之間的高速連
PCI千兆網卡和PCI Express千兆網卡
之間 性能 2.0 很快 程序 解碼 alt ext nag 千兆網卡按總線接口標準分為PCI千兆網卡和PCI Express千兆網卡。 PCI網卡,即PCI插槽的網卡。是工作在數據鏈路層的網路組件,是局域網中連接計算機和傳輸介質的接口,不僅能實現與局域網傳輸介質之間的物理
intel芯片雙口千兆網卡
bubuko 虛擬機 rss 網絡連接 多個 連接 qos功能 分享圖片 包括 intel芯片雙口千兆網卡 飛邁瑞克(femrice)可提供intel芯片千兆網卡,千兆網卡最大傳輸速度能達到1000Mbit秒,多用於服務器,提供服務器與交換機之間的高速連接,提高網絡傳輸速度
Spark入門實戰系列--2.Spark編譯與部署(中)--Hadoop編譯安裝
二進制包 1.10 不能 mapr 修復 att 機器 mave end 【註】該系列文章以及使用到安裝包/測試數據 能夠在《[傾情大奉送–Spark入門實戰系列] (http://blog.csdn.net/yirenboy/article/deta
用C寫一個UDP傳送和接收程式
1、UDP網路程式設計主要流程 UDP協議的程式設計框架,客戶端和伺服器之間的差別在於伺服器必須使用bind()函式來繫結偵聽的本地UDP埠,而客戶端則可以不進行繫結,直接傳送到伺服器地址的某個埠地址。框圖如圖1.3所示 UDP協議的伺服器端流程 伺服器流程主要分為下述6個部分,即建立套
【linux c】簡單UDP應用,資料傳送與接收
主要函式: 接收recvfrom() ssize_t recvfrom (int sockfd, void *buf, size_t len, int flags, stru
Python TCP伺服器/客戶端+UDP傳送端/接收端
''' socketserver ''' import time import socket import socketserver class RequestHandler(socketserver.StreamRequestHandler): def handle(self):
通過UDP傳送和接收資料包
傳送端: package net.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.Da
網絡卡如何傳送和接收資料包
IP報文可以看作一個包。 Linux網絡卡驅動程式,將IP包新增14位元組的MAC包頭,構成MAC包。 MAC包中含有傳送端和接收端的MAC地址資訊。既然是驅動程式建立的MAC包頭資訊,當然可以隨便輸入地址資訊的,主機偽裝就是這麼實現的。
STM32 HAL庫學習(四) SPI查詢傳送與接收
又是花了兩天時間調SPI......細心細心還是需要細心啊,還是用的上次的SPI Flash晶片mx25l04600E,主要是測試晶片的初始化和讀取晶片ID是否成功。 STM32F070晶片只有一個SPI,但可用作SPI訊號管腳的引腳卻不只一組,建議通訊前先連線MOSI和MISO測試自發自收是否
RabbitMQ的學習(二):簡單的java demo實現RabbitMQ的傳送與接收
通過第一章已經很輕鬆地實現了RabbitMQ的安裝和啟動,第二章開始最簡單的java demo學習,一層一層深入瞭解RabbitMQ的牛逼之處,期間肯定也會碰到很多問題,這些問題,將會收集起來,最後面去解決同時也會寫相關的文章。 一、專案相關jar包匯入: 新建一個maven工程,p
JSON傳送與接收(java)
var xmlHttp;function createXMLHttpRequest() { if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else if(window.ActiveXObject) {
JSON傳送與接收
var xmlHttp;function createXMLHttpRequest() { if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else if(window.ActiveXObject) {