FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(三)——接口与框架

这篇具有很好参考价值的文章主要介绍了FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(三)——接口与框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


学习不能稀里糊涂,要学会多思考,发散式学习以及总结:
  FPGA作为一种器件,只是实现目的的一种方法,过度追求实现的技术细节(用hdl还是hls,用啥芯片,用啥接口)容易只见树木不见森林。工具软件的用法也好,器件的架构也好,语言孰优孰劣的争论也罢。工程应用里大概更多应该去考虑适合的实现方式,现在software define network/flash/xxx,已然大势所趋,算法是纲,纲举目张。是因为在实现上需要有流水线,多路并行,快速部署的目的所以考虑使用FPGA,而不是为了使用而使用。
  不管实现目的的方法是FPGA还是DSP甚至是GPU,这些都是工具,工程师的核心竞争力除了在于熟练地掌握开发的技巧。更重要的在于信号与系统、数字信号处理、图像处理之类的让你了解算法、优化算法的基石;以及数字电路、微机原理、处理器体系结构这些让你了解为什么这些工具要这样设计,要这样发展的课程(系统学习一点体系结构,那么这些数据级并行、指令级并行、线程级并行的处理器就不再陌生了)工程师应该顶天(了解应用,了解算法)也应该立地(了解工具,掌握技巧)。
                   ——引用某个大佬的话,作为学习共勉
  简单来说就是:FPGA是工具用来搬砖,更多的知识在FPGA之外

一、 IP核接口介绍

  根据此系列的文章(一)以太网知识补给和文章(二)IP核配置,本次设计的逻辑框架如下,User Logic是需要我们编写代码,1G/2.5G Ethernet是我们配置的IP核,它们之间通过GMII接口通信;Transceiver也是IP核内部用来并转串的连接方式,最后GBIC or SFP为FPGA外部连接的PHY芯片,它们之间通过GT收发器接口通信(高速接口)。
FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(三)——接口与框架
  FPGA程序是我们着重编写的是User Logic这一块,IP核会用接口就行,本章将先讲一下我们在(二)中配置的IP核后生成的接口。

gig_ethernet_pcs_pma_0 your_instance_name (
  //GT高速收发器的差分时钟
  .gtrefclk_p(gt_clk_p),                          // input wire gtrefclk_p                125 MHz差分参考时钟。由外部直接接入,时钟质量高
  .gtrefclk_n(gt_clk_n),                          // input wire gtrefclk_n                125 MHz差分参考时钟。
  //以下两个IP输出的125Mhz参考时钟未用到
  .gtrefclk_out(),                                    // output wire gtrefclk_out                      
  .gtrefclk_bufg_out(),                               // output wire gtrefclk_bufg_out                       
  //GT高速收发器的接口,FPGA外接接口,与外部的光口SFP进行通信(IP核配置1000BASEX)
  .txn(o_txn),                                        // output wire txn                 差分串型高速GT收发器数据接口            
  .txp(o_txp),                                        // output wire txp                 从PMA到PMD的串行传输的差分               
  .rxn(i_rxn),                                        // input wire rxn                  从PMD到PMA的串行传输的差分               
  .rxp(i_rxp),                                        // input wire rxp                                  
  .independent_clock_bufg(i_independent_clock_bufg),  // input wire independent_clock_bufg 一个独立的时钟源,用作IDELAYCTRL(如果存在)和主GT收发器复位逻辑的参考时钟,200Mhz。
  //以下信号为IP核输出信号(选择性使用)
  .userclk_out(),                        // output wire userclk_out                        62.5Mhz                        
  .userclk2_out(o_userclk2_125),         // output wire userclk2_out                       用户时钟(125M),GMII接口的时钟源,IP配置的时候采用txoutclk,gmii的收发均采用此时钟,    
  .rxuserclk_out(),                    // output wire rxuserclk_out                        62.5Mhz
  .rxuserclk2_out(),                  // output wire rxuserclk2_out                        62.5Mhz。   IP配置的时候采用rxoutclk时,此接口输出125Mhz,例程的gmii收采用此时钟,发采用userclk2_out
  .resetdone(),                            // output wire resetdone                        最好使用同一个时钟源作为收发的时钟,所以IP的gmii时钟源采用txoutclk。
  .pma_reset_out(),                    // output wire pma_reset_out                    
  .mmcm_locked_out(),                // output wire mmcm_locked_out                         
  //用户端(客户端MAC层)接口,通过GMII接口与以太网IP核进行数据通信,从客户端(MAC层)发送给PMA
  .gmii_txd(i_gmii_txd),                              // input wire [7 : 0] gmii_txd        发送数据      
  .gmii_tx_en(i_gmii_tx_en),                          // input wire gmii_tx_en              发送数据使能 
  .gmii_tx_er(i_gmii_tx_er),                          // input wire gmii_tx_er              发送数据错误使能                       
  .gmii_rxd(o_gmii_rxd),                              // output wire [7 : 0] gmii_rxd       接收数据         
  .gmii_rx_dv(o_gmii_rx_dv),                          // output wire gmii_rx_dv             接收数据使能         
  .gmii_rx_er(o_gmii_rx_er),                          // output wire gmii_rx_er             接收数据错误使能                          
  .gmii_isolate(),                      // output wire gmii_isolate                         不需要                    
  .configuration_vector(5'b00010),      // input wire [4 : 0]                               用于配置IP核状态,00010为内循环(仿真使用),00000为正常外接(与其他设备通信使用)
  .status_vector(o_status_vector),                    // output wire [15 : 0] status_vector 最低位判断链路状态,0位为1表示以太网链路建立,为0则未建立建立链路
  .reset(i_sys_rst),                                    // input wire reset                 IP核的复位信号。高电平有效
  .signal_detect(1'b1),                    // input wire signal_detect                      逻辑1指示正确检测光学模块;直接拉高即可
  //一下两个为gt引出来PLL产生的时钟,不需要用
  .gt0_qplloutclk_out(),                              // output wire gt0_qplloutclk_out                                   
  .gt0_qplloutrefclk_out()                            // output wire gt0_qplloutrefclk_out                           
    );

以上是设置完IP后生成的接口以及注释。
简单总结下学习IP核时候的要点:
   1、 通过对应IP的文档进行接口学习,如何找到相应的文档,可以参考以下文章:
vivado的DocNav学习;FPGA芯片外挂DDR个数_FPGA_青年的博客-CSDN博客
   2、 还可以通过打开IP核的官方列子进行学习,例子中用到的接口讲解也有帮助:

   3、 输入(input)接口必须需要接入信号,输出(output)接口选择性的使用,在使用接口的时候,多关注这几个信号:数据,使能,时钟,复位,以及配置(回环测试还是外接)和状态(链路状态)这些接口。

二、 框架搭建

FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(三)——接口与框架

   本次设计我们只做仿真,因此需要配置回环模式即将configuration_vector接口配置为(5’b00010),相当于将TXP与RXP相连,TXN和RXN相连。
   数据发送:将产生的数据,使能在同一时钟下发送出去;
   写FIFO:数据产生用的是一个时钟,将数据发送给以太网IP核,采用的是GMII接口,因此需要使用GMII的时钟,才能将数据送入IP核,再做并转串通过GT收发器送出数据给外部。FIFO的作用:异步时钟,不同位数间转换。
   以太网IP:将数据链路层(MAC层)组帧的数据,通过GMII接口发送给PMA层(属于PHY层中一层),再通过内部并转串的方式,将数据通过GT高速收发器进行数据收发。
   数据接收和读FIFO同理。
   我们之前看到的都是MAC->PHY->RJ45,采用的不是高速接口(例如Tri Mode Ethernet MAC IP核),它的MAC层就是FPGA。但是在这里使用的1G/2.5G Ethernet以太网IP核采用的是GT高速收发器是串型接口,它是将PHY层中的PMA层放在FPGA中,此时的FPGA相当于是MAC层+PMA层。关于这部分知识,大家可以参考以下文章:
添加链接描FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(二)——IP学习使用_FPGA_青年的博客-CSDN博客述
FPGA平台以太网学习:MAC与PHY间通信_FPGA_青年的博客-CSDN博客

下一节,将会做实例仿真。

记录美好学习,从总结开始;💪文章来源地址https://www.toymoban.com/news/detail-484262.html

到了这里,关于FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(三)——接口与框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA之以太网详解

    以太网(Ethernet)是当今局域网采用的最通用的局域网标准。它规定了包括物理层的连线,电子信号和介质访问协议的内容。它具有成本低,通信速率快,抗干扰性强的特点。 以太网主要分为: 标准以太网:10Mbit/s 快速以太网:100Mbit/s 千兆以太网:1000Mbit/s 以太网的接口主要

    2024年02月09日
    浏览(33)
  • 在FPGA上快速搭建以太网

    在本文中,我们将介绍如何在FPGA上快速搭建以太网 (LWIP )。为此,我们将使用 MicroBlaze 作为主 CPU 运行其应用程序。 LWIP 是使用裸机设计以太网的良好起点,在此基础上我们可以轻松调整软件应用程序以提供更详细的应用程序。LWIP Echo 服务器的使用首先使我们能够确定底层

    2024年02月09日
    浏览(45)
  • FPGA - 以太网UDP通信(一)

    ​以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。 ​ 以太网是现实世界中最普遍的一种计算机网络。以太网有两类:第一类是经典以太网,第二类是交换式以太网,使用了一

    2024年04月18日
    浏览(45)
  • 基于FPGA的以太网相关文章导航

      首先需要了解以太网的一些接口协议标准,常见的MII、GMII、RGMII时序,便于后续开发。     【必读】从MII到RGMII,一文了解以太网PHY芯片不同传输接口信号时序!   介绍一款比较老的以太网PHY芯片88E1518,具有RGMII接口,分析该芯片的原理图和内部寄存器的配置方式

    2024年04月14日
    浏览(33)
  • FPGA 以太网传输ov5640视频

    使用 DFZU4EV MPSoC 开发板及双目 OV5640 摄像头其中一个摄像头实现图像采集,并通过开发板上的以太网接口发送给上位机实时显示。 时钟模块用于为 I2C 驱动模块、以太网顶层模块和开始传输控制模块提供驱动时钟;I2C 驱动模块和 I2C 配置模块用于初始化 OV5640 图像传感器;摄像

    2024年04月10日
    浏览(43)
  • 基于UDP协议的千兆以太网传输(FPGA)

    @[TOC]基于UDP协议的千兆以太网传输(FPGA) UDP协议是一种基于无连接协议,即发送端发送数据无需确认接收端是否存在;接收端收到数据后也无需给发送端反馈是否收到,所以UDP在数据发送过程中允许丢失一两包数据。用于对丢包不严格的场合,比如视频流,偶有一两帧的丢

    2024年02月12日
    浏览(59)
  • 以太网——MDIO(SMI)接口的FPGA实现

      在 MAC 与 PHY 之间,有一个配置接口,即 MDIO(也称 SMI,Serial Management Interface),可以配置 PHY 的工作模式、获取 PHY 芯片的工作状态等。本文以 PHY 芯片 B50610 为例,实现 MDIO 接口,以实现对传输速度、接口类型的自协商。   MDIO 包含 2 根信号线: MDC,由 MAC 侧提供给

    2024年02月16日
    浏览(42)
  • FPGA实现千兆/百兆自适应以太网UDP传输

    笔者最近在项目中需要使用到ZYNQ中PL端做以太网UDP传输并且需要支持100M/1000M自适应切换。使用的PHY型号为RTL8211。以下分享的主要为利用已有的1000M协议栈修改为100M并且实现二者自适应切换,IP核主要实现以下功能 1、实现100M/1000M自适应 2、回环测试 PS:完整的IP核文件下载地

    2024年01月21日
    浏览(44)
  • FPGA优质开源项目 - UDP RGMII千兆以太网

    本文介绍一个FPGA开源项目:UDP RGMII千兆以太网通信。该项目在我之前的工作中主要是用于FPGA和电脑端之间进行图像数据传输。本文简要介绍一下该项目的千兆以太网通信方案、以太网IP核的使用以及Vivado工程源代码结构。 Vivado 的 Tri Mode Ethernet MAC IP核需要付费才能使用,因

    2024年02月14日
    浏览(55)
  • FPGA——三速自适应以太网设计(1)基本模块

    每层都嵌套在上层的数据字段 以太网帧长: 64B~1518B IP层 ARP层 UDP层 ICMP层 要双端口ram读写缓存帧的数据和FIFO配合存储帧长度和类型 类型是0800就是IP 0806就是ARP,进行分流操作 两个数据流都加个FIFO,以帧为单位,先输出A,A输出完成后再输出B。还要进行流控:要切换通道输出

    2024年03月14日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包