一.功能:在FPGA开发板上,用户数据存于FIFO,经过UDP,IP,MAC封装,通过RGMII接口发送出去。完整的以太网应该包括收发功能,这里介绍发送模块。

二.实现:序列机

三.过程:发送顺序:    MAC帧头——IP包头——UDP包头——用户数据——FCS校验字段

   封装顺序: UDP层封装——IP层封装——MAC层封装  

①UDP层封装

源端口号和目的端口号:已知,

UDP长度 = fifo中的data_counter+报头长度

UDP校验计算复杂,可以置零(能成功发送)

UDP数据即用户数据,存于FIFO中。

②IP层封装

IP报头校验和:用一个模块来计算即可

可以小兵以太网工具设置数据。

③MAC层封装

难点在于FCS校验:

①4位crc32校验(MII):无论是目的/源mac,长度类型,还是数据段,每个字节都要先输出低4位,再输出高四位,进入crc32模块进行计算。输出的crc32值可能与软件计算结果是翻高低位转的,由计算程序决定。此外,在网站上获得的crc32计算程序,需要修改:输入计算模块后高低位翻转,再计算,结果再翻转。

②8位crc32校验(GMII):直接按顺序输出即可,不用先输出低4位再输出高4位。输入计算模块后高低位翻转,再计算,结果再翻转。

四.系统模型:

模块udp_gmii_tx:使用计数器实现序列机发送帧,在发送用户数据时一直停在一个计数值直到把所有用户数据发送出去,利用fifo中的empty信号跳出这个计数值,继续发送FCS校验值。本模块包括crc32自动计算,IP报头校验自动计算,输入输出数据为8位宽。

模块GMII转RGMII:这个模块是难点,把8位宽的数据转变为4位宽,利用双沿采样实现,在Xilinx中例化原语和altera例化IP核,可以较快实现。理解如下:(Xilinx原语的介绍见ug471)

转换代码:

module rgmii_tx(//GMII发送端口input              gmii_tx_clk , //GMII发送时钟    input              gmii_tx_en  , //GMII输出数据有效信号input       [7:0]  gmii_txd    , //GMII输出数据        //RGMII发送端口output             rgmii_txc   , //RGMII发送数据时钟    output             rgmii_tx_ctl, //RGMII输出数据有效信号output      [3:0]  rgmii_txd     //RGMII输出数据     );//*****************************************************
//**                    main code
//*****************************************************assign rgmii_txc = gmii_tx_clk;//输出双沿采样寄存器 (rgmii_tx_ctl)
ODDR #(.DDR_CLK_EDGE  ("SAME_EDGE"),  // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT          (1'b0),         // Initial value of Q: 1'b0 or 1'b1.SRTYPE        ("SYNC")        // Set/Reset type: "SYNC" or "ASYNC"
) ODDR_inst (.Q             (rgmii_tx_ctl), // 1-bit DDR output.C             (gmii_tx_clk),  // 1-bit clock input.CE            (1'b1),         // 1-bit clock enable input.D1            (gmii_tx_en),   // 1-bit data input (positive edge).D2            (gmii_tx_en),   // 1-bit data input (negative edge).R             (1'b0),         // 1-bit reset.S             (1'b0)          // 1-bit set
); genvar i;
generate for (i=0; i<4; i=i+1)begin : txdata_bus//输出双沿采样寄存器 (rgmii_txd)ODDR #(.DDR_CLK_EDGE  ("SAME_EDGE"),  // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT          (1'b0),         // Initial value of Q: 1'b0 or 1'b1.SRTYPE        ("SYNC")        // Set/Reset type: "SYNC" or "ASYNC" ) ODDR_inst (.Q             (rgmii_txd[i]), // 1-bit DDR output.C             (gmii_tx_clk),  // 1-bit clock input.CE            (1'b1),         // 1-bit clock enable input.D1            (gmii_txd[i]),  // 1-bit data input (positive edge).D2            (gmii_txd[4+i]),// 1-bit data input (negative edge).R             (1'b0),         // 1-bit reset.S             (1'b0)          // 1-bit set);        end
endgenerateendmodule

五.仿真结果:gmii_2_rgmii

千兆以太网_发送模块设计_udp_rgmii_tx相关推荐

  1. 千兆以太网_基础知识

    基础知识: 1.网络结构:计算机网络的层次结构如图所示. 协议:传输层则包含UDP协议,TCP协议,网络层有arp协议和IP协议,数据链路层封装MAC帧,通过物理层的PHY物理收发芯片传输数据.用户数 ...

  2. 基于FPGA的数据采集、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计及程序验证)

    本文主要介绍了学生期间自己做的一个小项目,便于学习初期对fpga的整体把握,涉及了很多常见.常用.常考和面试常问的知识点. 可以作为入门后的拓展学习和应对一些找工作的项目面试. 下面对硬件及软件代码进 ...

  3. 千兆以太网工程模块划分总结与分析

    很多朋友在工程模块划分的时候总会遇到很多问题,比如不知道如何下手.模块划分不合理等:我开始也是这样的,在学习了明德扬的几项工程以后,按照老师分享的思路,也对模块划分有了一定的小经验,今天通过案例的方式 ...

  4. 基于FPGA的千兆以太网设计

    今天给大侠带来基于FPGA的千兆以太网设计,话不多说,上货. 一.设计概述 由于设计比较复杂,本篇带来设计流程以及设计思路,仅供各位大侠参考. 本篇通过管理数据输入输出MDIO配置PHY寄存器,使其工 ...

  5. 千兆通信中发送链路的 CRC 模块和 ODDR 模块实现

    设计任务: 使用 FPGA 来构建 MAC 层和 UDP 组包,完成从板卡到主机的数据包传递链路. 项目目的: 通过学习以太网的 UDP 帧协议,完成包的构建和使用网络抓包工具抓包分析数据包是否正确. ...

  6. 迅为IMX6开发板支持全网通4G模块丨GPS模块丨WIFI蓝牙丨千兆以太网

    迅为i.MX6开发板丨迅为i.MX6Q开发板丨四核imx6开发板丨Cortec-A9开发板丨资料介绍: 特点: 处理器:Freescale Cortex-A9四核i.MX6Q主频1GHz 核心板配置: ...

  7. 简谈基于FPGA的千兆以太网设计

    简谈基于FPGA的千兆以太网设计 今天给大侠带来简谈基于FPGA的千兆以太网设计,话不多说,上货. 今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较高级的内容了,有些大侠肯定会感觉以太网学 ...

  8. 千兆以太网(3):发送——组建以太网心跳包

    心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包.心跳包在GPRS通信和CDMA通信的应用方面使用非常广泛.数据网关会定时清理 ...

  9. 基于亚信AX88179A芯片的USB 3.2转千兆以太网设计

    发布日期: 2023/1/4 透过已被广泛使用于各种消费电子产品的USB接口,亚信电子AX88179A USB 3.2 Gen1转千兆以太网芯片解决方案,可以为轻薄短小的笔记本电脑.智能手机.平板电脑 ...

最新文章

  1. 武汉约100所中小学将试点人工智能课,现面向社会遴选教材
  2. 配置IIS Silverlight运行环境
  3. 【错误记录】Git 使用报错 ( git branch -a 仍能查询到已经删除的远程分支 )
  4. Python数据结构与算法—基本概念
  5. vue学习:v-text,v-html, v-model, {{}}之间的异同
  6. [云炬创业基础笔记]第十章企业的利润计划测试6
  7. 看懂堆排序——堆与堆排序(三)
  8. linux电视改安卓,mstar安卓智能电视方案源代码常用修改
  9. Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)
  10. 区块链的有趣应用:买彩票、云养鸡、查茅台
  11. Python使用爬山算法寻找序列“最大值”
  12. Linux 搭建SVN服务器
  13. mysql可视化创建外键说明_关于使用可视化图形工具navicat for mysql来创建外键的步骤...
  14. 仿百度的输入提示功能
  15. PHP最彻底的退出登录,清除session、cookie的代码
  16. Win7安装IE10或IE11 离线安装注意问题
  17. cortana 无法使用_如何使用Cortana创建和编辑列表(并将它们与Wunderlist同步)
  18. 看完这20部电影,你可以去全球任何一家公司做董事长或总经理
  19. 统计学复习笔记(二)—— 常见的概率分布卡方分布,t分布,F分布和中心极限定理
  20. 用c语言向无盘符分区拷文件,用GHOST软件将PC硬盘上C分区制作成映象文件﹡.gho的步骤...

热门文章

  1. 计算机cpu风扇的结构,“电脑专家”教你如何拆cpu风扇【图文教程】
  2. 如何确保有效的软件质量管理流程
  3. 三星手机电池循环清零代码_巅峰对决申真谞离奇“滑标” 三星杯决赛首局柯洁轻松告捷...
  4. Qt学习1——Hello World程序
  5. 2022年信息安全工程师考试知识点:无线网络安全
  6. 《工业APP白皮书》发布,鼎捷软件ERP,MES等系统方案获专业推荐
  7. 《ERP原理》期末复习——第三章 erp为企业带来的效益
  8. MySQL --- 常用函数 - 字符串函数
  9. 【优化算法】细菌粒子群优化算法【含Matlab源码 1195期】
  10. 网上查询个人征信教程