zoukankan      html  css  js  c++  java
  • 基于FPGA的以太网开发

      基于FPGA的以太网开发,在调试过的FPGA玩家开来,其实算不上很难的技术!但是如果只是菜鸟级别的选手,没有调试过的话,就有些头疼了!早在自己在实习的时候,就接触到XAUI(万兆以太网口)接口,但是由于某些原因没能参与调试,成为了自己的遗憾,这次在Altera平台下开发百兆以太网,想通过博文的方式记录自己的调试例程
       做网络开发,首先必须对以太网的层级结构有了解,否则,你很容易分不清每层的功能,而在自己到底要做什么上而找不到方向!这里,从802.3的协议上抓取一副图片说明问题:
      基于FPGA的以太网开发
     
       图中采用的是GMII(Gigabit Media Independent Interface)接口,可以看到PHY层,物理层基本不做逻辑上的处理,对于吉比特串行而言主要是是传输物理的数据信号编码(8B10B)和时钟信号回复(CDR)。FPGA提供的MAC IP核,若器件带高速收发器(GTX),那么我们就不需要外接PHY芯片,否则就需要外接PHY芯片,完成PHY层的功能。
       这里继续给出ISO协议提供的MAC帧格式:
     基于FPGA的以太网开发
     其中开始的7个字节放固定的帧同步码;1个字节的帧开始符;6个字节的源物理地址;6个字节的目的物理地址;接下来就是长度和帧类型。实际开发中,我们使用的IPv4的报文,类型号:
    ,接下来MAC层提供给用户的数据净荷大小是46-1500个字节(基本帧结构)。
       理清楚这个概念以后,在实际使用中MAC内的净荷是如何存放的,还需要知道网络协议的层次结构,这里贴出一张ISO七层协议到TCP/IP四层协议的对应关系图,然后说明实际底层开发,FPGA做封包处理,到底要干嘛。
      基于FPGA的以太网开发
          MAC帧封装的是MAC帧头+传输层的IP报文。
          FPGA通过纯迎硬件的方式开发网络功能,IP数据帧中的数据包:对应的传输层有TCP和UDP两种协议。由于TCP协议涉及到三次握手建立连接和四次挥手释放连接,以纯硬件的方式来开发,难度较大,但是有第三方的IP可以实现该功能,这里我们选用面向无连接的UDP协议。
         虽然选择了UDP协议,但是最后想FPGA发送的网络数据能够让上位机的应用软件接收到,我们需要给应用分配一个端口号。端口号就是为了区分上位机上不同的网络应用程序之间的数据的。比如,同时浏览网页和聊天,浏览器有个端口号接收自己的数据,聊天工具有个端口号接收自己的数据。
       讲了这么多的目的,是建立网路报文和层之间对应的基本概念。因为通过FPGA开发网络应用,我们需要自己在最底层,一个字节一个字节的拼出一个IP报文,从端口号开始到MAC帧,FPGA开发者都必须掌握这些概念。不然,不知道自己到底用什么拼一个数据包出来给FPGA的MAC核。
        其实FPGA的MAC核在我们看来完成了加前导码、帧定界符、FCS的功能。实际使用以太网给PC发送数据的时候,基本是用网络进行点对点通信,没涉及到CSMA/CD功能。如果真的涉及到PC机侧和多个外部设别通信,在组包的时候,需要注意MAC地址、IP地址、端口号,合理规范,避免冲突。
       
      
     
     
     
     
  • 相关阅读:
    归并排序(Merge Sort)
    AtCoder AGC035D Add and Remove (状压DP)
    AtCoder AGC034D Manhattan Max Matching (费用流)
    AtCoder AGC033F Adding Edges (图论)
    AtCoder AGC031F Walk on Graph (图论、数论)
    AtCoder AGC031E Snuke the Phantom Thief (费用流)
    AtCoder AGC029F Construction of a Tree (二分图匹配)
    AtCoder AGC029E Wandering TKHS
    AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
    AtCoder AGC035E Develop (DP、图论、计数)
  • 原文地址:https://www.cnblogs.com/JustDoFPGA/p/8412732.html
Copyright © 2011-2022 走看看