0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCP和UDP协议的实现方法

FPGA之家 来源:FPGA之家 2023-08-30 10:46 次阅读

目前TCP协议大多由cpu跑代码实现, 这次用FPGA的纯逻辑实现 , System Verilog编写,下面给大家粗略讲一下我的实现方法,下面是工程的示意图.

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

这个工程由几部分组成, 外部使用了88e1111千兆以太网phy。FPGA内部有几个大的模块,

顶层模块:

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

//// ////

////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

);

。。。。

(由于微信字数限制,此处省去200多行代码,可以点击阅读原文查看)

1. 与外部phy芯片通信的模块,simple_mac模块。

主要功能是通过mdio配置phy, 给发送帧打包(加入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

);

(由于微信字数限制,此处省去200多行代码,可以点击阅读原文查看)

2. mac_config

这个模块主要是配置phy芯片寄存器的。

3. Rx Path

这个模块负责从simple_mac接收数据,然后提交给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。

中间一段用来从一帧中提取数据并提供给eth_fsm 。

下面是配置ip地址和收发端口号的。

4. Tx Path

这个模块从eth_fsm取得数据和各种header,并发送给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是发送的字节数除以4 。

fifo_rdreq和fifo_q是从eth_fsm来的数据。

5. eth_fsm

这是整个工程的核心, 是处理协议的状态机和控制数据的流动,下面是接口

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

由于这个模块过于复杂,就不介绍了。

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接口,分别用来写和读内部的发送FIFO和接收FIFO.

目前实现情况

目前udp协议可以基本全速运行,但是有丢包的情况,需要有个确认机制。

tcp协议只实现了最基本的功能,能够通信。窗口管理和慢启动,拥塞避免等特性还在完善中,速度只能达到200多M。

对这个工程的介绍就到这里了,希望对大家有用。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593193
  • 千兆以太网
    +关注

    关注

    0

    文章

    64

    浏览量

    13809
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1271

    浏览量

    78290
  • UDP
    UDP
    +关注

    关注

    0

    文章

    311

    浏览量

    33615
  • TCP协议
    +关注

    关注

    1

    文章

    83

    浏览量

    12004

原文标题:千兆以太网 TCP, UDP协议, FPGA实现

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TCP协议UDP协议对比 UDP协议的原理及应用

    对延时或抖动要求很高的情景下并不适用。为此,UDP(User Datagram Protocol,用户数据报协议)被提出。UDP虽然应用较为广泛,比如DNS查询等,但一直不是重要的角色。自从WebRTC被提出以来,它可以使浏览器
    的头像 发表于 10-26 15:05 3113次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>和<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>对比 <b class='flag-5'>UDP</b><b class='flag-5'>协议</b>的原理及应用

    TCP协议UDP协议的区别有哪些

    无法实现;(3)TCP 协议有效载荷小于 UDP 协议(基于 MSS 计算),UDP 性能高于
    发表于 08-06 08:43

    TCPUDP协议简析

    一、前言TCPUDP协议TCP/IP协议的核心。TCP (Transmission Cont
    发表于 12-15 08:13

    通讯协议TCPUDP协议使用方法

    通讯协议TCPUDP协议UDP会把数据一股脑儿地发送出去,并不会在意是否全部收到,适用于广播类型多对多通讯类型,缺点是具有一定的丢包率
    发表于 01-21 14:53

    tcpudp协议的异同

    UDP 校验和则是包含 UDP 首部和数据在内的校验结果。 TCP协议 TCP协议基于网络层的
    的头像 发表于 11-12 14:45 3639次阅读
    <b class='flag-5'>tcp</b>和<b class='flag-5'>udp</b><b class='flag-5'>协议</b>的异同

    TCP协议UDP协议的区别和相同点有哪些 一文看懂TCP协议UDP协议的优缺点

    首先咱们弄清楚,TCP协议和UCP协议TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP
    的头像 发表于 05-26 14:35 8380次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>与<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>的区别和相同点有哪些 一文看懂<b class='flag-5'>TCP</b><b class='flag-5'>协议</b>与<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>的优缺点

    TCP协议UDP协议的区别

    TCP/IP协议中有两个具有代表性的传输层协议,分别是TCP协议UDP
    的头像 发表于 03-21 10:39 860次阅读

    一文搞明白TCP协议UDP协议(上)

    网络编程有三个要素,分别是IP地址、端口号和通信协议,那本文主要讲述的是TCPUDP这两种通信协议,以及编程的实现。 首先,我们需要
    的头像 发表于 05-18 17:17 493次阅读
    一文搞明白<b class='flag-5'>TCP</b><b class='flag-5'>协议</b>与<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>(上)

    一文搞明白TCP协议UDP协议(下)

    网络编程有三个要素,分别是IP地址、端口号和通信协议,那本文主要讲述的是TCPUDP这两种通信协议,以及编程的实现。 首先,我们需要
    的头像 发表于 05-18 17:17 467次阅读
    一文搞明白<b class='flag-5'>TCP</b><b class='flag-5'>协议</b>与<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>(下)

    基于Socket的UDPTCP编程解析 2

    TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信
    的头像 发表于 05-18 17:22 463次阅读
    基于Socket的<b class='flag-5'>UDP</b>和<b class='flag-5'>TCP</b>编程解析 2

    TCP协议UDP协议最核心的区别是什么?

    对于TCP协议UDP协议,大家应该都有所耳闻。TCP协议
    发表于 06-15 09:37 349次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>和<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>最核心的区别是什么?

    UDP能否像TCP一样实现可靠传输?

    连接的协议,基于字节流的传输方式。它通过确认和重传等机制来保证数据的完整性和顺序性,实现数据包的可靠传输。UDPTCP的主要区别但在某些运用场景下,使用
    的头像 发表于 06-08 14:50 627次阅读
    <b class='flag-5'>UDP</b>能否像<b class='flag-5'>TCP</b>一样<b class='flag-5'>实现</b>可靠传输?

    udp是什么协议 TCPUDP的区别

    TCP协议提供可靠的数据传输,UDP协议提供尽量高效的数据传输。TCP协议通过使用序列号、确认应
    的头像 发表于 06-26 17:47 7080次阅读

    TCP/IP协议进阶课程:5、UDP协议

    电子发烧友网站提供《TCP/IP协议进阶课程:5、UDP协议.pdf》资料免费下载
    发表于 07-31 11:48 0次下载
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>进阶课程:5、<b class='flag-5'>UDP</b><b class='flag-5'>协议</b>

    UDPTCP的主要区别 UDP能否像TCP一样实现可靠传输?

    UDPTCP的主要区别 UDP能否像TCP一样实现可靠传输?TCP如何
    的头像 发表于 01-22 16:10 186次阅读