0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TCP和UDP協(xié)議的實現(xiàn)方法

FPGA之家 ? 來源:FPGA之家 ? 2023-08-30 10:46 ? 次閱讀

目前TCP協(xié)議大多由cpu跑代碼實現(xiàn), 這次用FPGA的純邏輯實現(xiàn) , System Verilog編寫,下面給大家粗略講一下我的實現(xiàn)方法,下面是工程的示意圖.

720501b6-46db-11ee-a2ef-92fbcf53809c.jpg

這個工程由幾部分組成, 外部使用了88e1111千兆以太網(wǎng)phy。FPGA內(nèi)部有幾個大的模塊,

頂層模塊:

//////////////////////////////////////////////////////////////////////

//// ////

////tcpip_hw ////

//// ////

////Description ////

//// top module ////

//// ////

////Author(s): ////

//// - bin qiu, qiubin@opencores.org orchat1@126.com ////

//// ////

//// Copyright (C) 2015 ////

//////////////////////////////////////////////////////////////////////

`include "tcpip_hw_defines.sv"

module tcpip_hw(

input clk,

input rst_n,

output mdc,

inoutmdio,

output phy_rst_n,

output is_link_up,

input [7:0] rx_data,

output logic [7:0] tx_data,

input rx_clk,

input rx_data_valid,

output logic gtx_clk,

inputtx_clk,

output logic tx_en,

//user interface

input [7:0] wr_data,

input wr_clk,

input wr_en,

output wr_full,

output [7:0] rd_data,

input rd_clk,

input rd_en,

output rd_empty

);

。。。。

(由于微信字?jǐn)?shù)限制,此處省去200多行代碼,可以點擊閱讀原文查看)

1. 與外部phy芯片通信的模塊,simple_mac模塊。

主要功能是通過mdio配置phy, 給發(fā)送幀打包(加入preamble,padding和crc32),和接收幀解包。下面是頂層代碼:

//////////////////////////////////////////////////////////////////////

//// ////

////simple_mac_top ////

//// ////

////Description ////

//// top module of simple mac ////

//// ////

////Author(s): ////

//// - bin qiu, qiubin@opencores.org orchat1@126.com ////

//// ////

//// Copyright (C) 2015 ////

//////////////////////////////////////////////////////////////////////

module simple_mac_top(

input clk,

input rst_n,

output mdc,

inputmdio_in,

output mdio_out,

output mdio_oe,

output phy_rst_n,

input [7:0] rx_data,

output logic [7:0] tx_data,

input eth_mode,

input rx_clk,

input tx_clk,

input clk125out,

output tx_en,

inputrx_data_valid,

input [7:0] reg_addr,

input reg_wr,

input [31:0] reg_wr_data,

input reg_rd,

output [31:0] reg_rd_data,

output reg_busy,

inputff_rx_clk,

output [31:0] ff_rx_data,

output ff_rx_eop,

output ff_rx_sop,

output rx_err,

output ff_rx_dval,

inputff_rx_rdy,

input ff_tx_clk,

input [31:0] ff_tx_data,

input ff_tx_eop,

input ff_tx_sop,

input ff_tx_wren,

output ff_tx_rdy

);

(由于微信字?jǐn)?shù)限制,此處省去200多行代碼,可以點擊閱讀原文查看)

2. mac_config

這個模塊主要是配置phy芯片寄存器的。

3. Rx Path

這個模塊負責(zé)從simple_mac接收數(shù)據(jù),然后提交給eth_fsm的。下面是接口列表.

input rst_n,

ff_rx_if.s if_rx,

headers_if if_headers_rx,

output frame_type_t rx_type,

output logic rx_done,

output logic [31:0] data_recv,

output logic data_recv_start,

output logic data_recv_valid,

output logic [15:0] data_recv_len,

output u32_t cur_ripaddr,

output u16_t cur_rport,

input rx_done_clear,

input [31:0] local_ipaddr,

input [31:0] remote_port_local_port

接口列表里有2個interface,

if_rx是與simple_mac連接的接口。

if_headers_rx是保存各種header并提供給eth_fsm的,如mac_header, arp_header,ip_header,udp_header,tcp_header。

rx_done是一幀接收完的信號并提供給eth_fsm。

中間一段用來從一幀中提取數(shù)據(jù)并提供給eth_fsm 。

下面是配置ip地址和收發(fā)端口號的。

4. Tx Path

這個模塊從eth_fsm取得數(shù)據(jù)和各種header,并發(fā)送給simple_mac, 下面是接口

input rst_n,

ff_tx_if.s if_tx,

headers_if if_headers_tx,

input frame_type_t tx_type,

input tx_start,

input [13:0] tx_dword_count,

output logic fifo_rdreq,

input [31:0] fifo_q

其中if_tx是與simple_mac的接口, if_headers_tx是從eth_fsm來的各種header,

tx_type是幀的類型,目前支持ARP, ICMP,TCP,UDP。

tx_start是一幀傳輸開始的信號。

tx_dword_count是發(fā)送的字節(jié)數(shù)除以4 。

fifo_rdreq和fifo_q是從eth_fsm來的數(shù)據(jù)。

5. eth_fsm

這是整個工程的核心, 是處理協(xié)議的狀態(tài)機和控制數(shù)據(jù)的流動,下面是接口

input clk,

input rst_n,

input is_link_up,

headers_if if_headers_rx,

input frame_type_t rx_type,

input rx_done,

headers_if if_headers_tx,

output frame_type_t tx_type,

output logic tx_start,

input [31:0] data_recv,

input [15:0] data_recv_len,

input data_recv_valid,

input data_recv_start,

output logic rx_done_clear,

input u32_t cur_ripaddr,

input u16_t cur_rport,

rx_ram_in_if.m if_rx_ram_in,

tx_ram_out_if.m if_tx_ram_out,

input [31:0] remote_port_local_port,

input [31:0] local_ipaddr,

input fifo_rdreq,

output [31:0] fifo_q,

input pkt_send_eop,

output logic [13:0]tx_dword_count,

output logic init_done

由于這個模塊過于復(fù)雜,就不介紹了。

6. data_source

這個模塊提供了與用戶模塊的接口

input rst_n,

input init_done,

input [7:0] wr_data,

input wr_clk,

input wr_en,

output wr_full,

output [7:0] rd_data,

input rd_clk,

input rd_en,

output rd_empty,

tx_ram_in_if.m if_tx_ram_in,

rx_ram_out_if.s if_rx_ram_out

其中wr開頭和rd開頭的都是對外提供的fifo接口,分別用來寫和讀內(nèi)部的發(fā)送FIFO和接收FIFO.

目前實現(xiàn)情況

目前udp協(xié)議可以基本全速運行,但是有丟包的情況,需要有個確認機制。

tcp協(xié)議只實現(xiàn)了最基本的功能,能夠通信。窗口管理和慢啟動,擁塞避免等特性還在完善中,速度只能達到200多M。

對這個工程的介紹就到這里了,希望對大家有用。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21538

    瀏覽量

    600449
  • 千兆以太網(wǎng)
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    13842
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1335

    瀏覽量

    78861
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    317

    瀏覽量

    33829
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    90

    瀏覽量

    12050

原文標(biāo)題:千兆以太網(wǎng) TCP, UDP協(xié)議, FPGA實現(xiàn)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    TCP協(xié)議UDP協(xié)議對比 UDP協(xié)議的原理及應(yīng)用

    對延時或抖動要求很高的情景下并不適用。為此,UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)被提出。UDP雖然應(yīng)用較為廣泛,比如DNS查詢等,但一直不是重要的角色。自從WebRTC被提出以來,它可以使瀏覽器
    的頭像 發(fā)表于 10-26 15:05 ?3347次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>和<b class='flag-5'>UDP</b><b class='flag-5'>協(xié)議</b>對比 <b class='flag-5'>UDP</b><b class='flag-5'>協(xié)議</b>的原理及應(yīng)用

    TCP協(xié)議UDP協(xié)議的區(qū)別有哪些

    無法實現(xiàn);(3)TCP 協(xié)議有效載荷小于 UDP 協(xié)議(基于 MSS 計算),UDP 性能高于
    發(fā)表于 08-06 08:43

    TCPUDP協(xié)議簡析

    一、前言TCPUDP協(xié)議TCP/IP協(xié)議的核心。TCP (Transmission Cont
    發(fā)表于 12-15 08:13

    通訊協(xié)議TCPUDP協(xié)議使用方法

    通訊協(xié)議TCPUDP協(xié)議UDP會把數(shù)據(jù)一股腦兒地發(fā)送出去,并不會在意是否全部收到,適用于廣播類型多對多通訊類型,缺點是具有一定的丟包率
    發(fā)表于 01-21 14:53

    TCPUDP的區(qū)別分析

      傳輸層協(xié)議主要有TCPUDP。UDP提供無連接的通信,不能保證數(shù)據(jù)包被發(fā)送到目標(biāo)地址,典型的即時傳輸少量數(shù)據(jù)的應(yīng)用程序通常使用UDP。
    發(fā)表于 09-18 10:29 ?2次下載

    (WiFi干貨)WiFi模塊的TCPUDP協(xié)議

    TCP/UDP協(xié)議的WiFi模塊目前SKYLAB的做主的WIFI模塊,大部分都可以實現(xiàn)TCPUDP
    的頭像 發(fā)表于 09-11 09:02 ?3w次閱讀

    tcpudp協(xié)議的異同

    。UDP 校驗和則是包含 UDP 首部和數(shù)據(jù)在內(nèi)的校驗結(jié)果。 TCP協(xié)議 TCP協(xié)議基于網(wǎng)絡(luò)層的
    的頭像 發(fā)表于 11-12 14:45 ?3899次閱讀
    <b class='flag-5'>tcp</b>和<b class='flag-5'>udp</b><b class='flag-5'>協(xié)議</b>的異同

    TCP協(xié)議UDP協(xié)議的區(qū)別和相同點有哪些 一文看懂TCP協(xié)議UDP協(xié)議的優(yōu)缺點

    首先咱們弄清楚,TCP協(xié)議和UCP協(xié)議TCP/IP協(xié)議的聯(lián)系,很多人犯糊涂了,一直都是說TCP
    的頭像 發(fā)表于 05-26 14:35 ?9377次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>與<b class='flag-5'>UDP</b><b class='flag-5'>協(xié)議</b>的區(qū)別和相同點有哪些 一文看懂<b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>與<b class='flag-5'>UDP</b><b class='flag-5'>協(xié)議</b>的優(yōu)缺點

    TCPUDP協(xié)議的區(qū)別

    最近重新認知了一下TCPUDP的原理以及區(qū)別,做一個簡單的總結(jié)。
    發(fā)表于 11-03 10:25 ?845次閱讀

    TCP協(xié)議UDP協(xié)議的區(qū)別

    TCP/IP協(xié)議中有兩個具有代表性的傳輸層協(xié)議,分別是TCP協(xié)議UDP
    的頭像 發(fā)表于 03-21 10:39 ?1118次閱讀

    TCP協(xié)議UDP協(xié)議最核心的區(qū)別是什么?

    對于TCP協(xié)議UDP協(xié)議,大家應(yīng)該都有所耳聞。TCP協(xié)議
    發(fā)表于 06-15 09:37 ?614次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>和<b class='flag-5'>UDP</b><b class='flag-5'>協(xié)議</b>最核心的區(qū)別是什么?

    UDP能否像TCP一樣實現(xiàn)可靠傳輸?

    連接的協(xié)議,基于字節(jié)流的傳輸方式。它通過確認和重傳等機制來保證數(shù)據(jù)的完整性和順序性,實現(xiàn)數(shù)據(jù)包的可靠傳輸。UDPTCP的主要區(qū)別但在某些運用場景下,使用
    的頭像 發(fā)表于 06-08 14:50 ?850次閱讀
    <b class='flag-5'>UDP</b>能否像<b class='flag-5'>TCP</b>一樣<b class='flag-5'>實現(xiàn)</b>可靠傳輸?

    udp是什么協(xié)議 TCPUDP的區(qū)別

    TCP協(xié)議提供可靠的數(shù)據(jù)傳輸,UDP協(xié)議提供盡量高效的數(shù)據(jù)傳輸。TCP協(xié)議通過使用序列號、確認應(yīng)
    的頭像 發(fā)表于 06-26 17:47 ?1.1w次閱讀

    TCP/IP協(xié)議進階課程:5、UDP協(xié)議

    電子發(fā)燒友網(wǎng)站提供《TCP/IP協(xié)議進階課程:5、UDP協(xié)議.pdf》資料免費下載
    發(fā)表于 07-31 11:48 ?0次下載
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>協(xié)議</b>進階課程:5、<b class='flag-5'>UDP</b><b class='flag-5'>協(xié)議</b>

    UDPTCP的主要區(qū)別 UDP能否像TCP一樣實現(xiàn)可靠傳輸?

    UDPTCP的主要區(qū)別 UDP能否像TCP一樣實現(xiàn)可靠傳輸?TCP如何
    的頭像 發(fā)表于 01-22 16:10 ?669次閱讀