FPGA网络通信——基础网络知识

1、以太网MAC

MAC即Media Access Control,即媒体访问控制子层协议。位于OSI七层协议中数据链路层的下半部分(另半部分就是LLC,逻辑链路控制子层),主要控制连接物理层的物理介质。
发送数据时,MAC层判断可以发送数据,给数据加上控制信号,然后将数据和控制信号以固定格式传输给物理层。
在这里插入图片描述
其中前导码为0x55(0101_0101b),SFD为0xD5 (1101_0101b),MAC地址为网卡物理地址,类型长度0x08 00 为UDP协议,0x08n 06表示为ARP协议包
接收数据时,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC层(由IEEE-802.3以太网标准定义)。所以,一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。
MAC从PCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte,最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示),最后还有一个DWORD(4Byte)的CRC码。
目的MAC地址是由APR协议中来的,第一次传送某个目的IP地址的数据的时候,以广播的形式发出一个ARP包,即所有主机都会收到这个APR包,这个数据包中的IP地址的主机收到这个ARP请求包后回复ARP响应,响应中就包含这个主机的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上,它们之间是通过MII之类的接口链接的。
MAC内部结构为:
在这里插入图片描述

2、MAC和PHY之间的接口

2.1 MII接口

MII是媒体独立接口,它包括一个数据接口,以及一个MAC和PHY之间的管理接口。

  1. 数据接口包括发送器和接收器的数据、时钟和控制信号,MII以4bit即半字节方式双向传送数据,时钟速率25MHz,其工作速率可达100Mb/s。数据接口与PHY芯片连接如下:
    在这里插入图片描述
  2. MII管理接口是个双信号接口,即SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的数据信号接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。
    MDIO是双向的,只支持一个MAC连接最多32个PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。
    MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写。MDC的时钟频率可以是DC-2.5MHz,即最小的时钟周期为400ns。

在这里插入图片描述

2.2 GMII接口

GMII采用8位接口数据,工作时钟125MHz,因此传输速率可达1000Mbps,同时兼容MII所规定的10/100 Mbps工作方式。
GMII接口数据结构符合IEEE以太网标准,该接口定义见IEEE 802.3-2000。
在这里插入图片描述
**注:**在千兆速率下,tx_clk为FPGA给PHY,TXD、TXEN和TXER信号与TX_CLK信号同步;百兆时为MII时钟,PHY给FPGA。

2.3 RGMII

RGMII(Reduced Gigabit Media Independant Interface),精简GMII接口。相对于GMII相比,RGMII具有如下特征:

  • 发送/接收数据线由8条改为4条
  • TX_ER和TX_EN复用,通过TX_CTL传送
  • RX_ER与RX_DV复用,通过RX_CTL传送
  • 1 Gbit/s速率下,时钟频率为125MHz
  • 100 Mbit/s速率下,时钟频率为25MHz
  • 10 Mbit/s速率下,时钟频率为2.5MHz
    由于RGMII数据线减少,并且时钟速率不变,所以RGMII采用的是双边沿采样,即DDR(double data rate)双倍速率传输。
信号名称描述方向
TX_CLK发送时钟MAC→PHY
TX_CTL发送数据控制MAC → PHY
TXD[3:0]发送数据4bitMAC → PHY
RX_CLK接收时钟PHY → MAC
RX_CTL接收数据控制PHY → MAC
RXD[3:0]接收数据4bitPHY → MAC
MDIO管理数据双向
MDC管理数据时钟MAC → PHY

PHY

PHY是物理接口收发器,按照OSI七层结构来看,MAC是在数据链路层,而PHY属于物理层。

在这里插入图片描述
PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说都是数据)然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去,收数据时的流程反之。
PHY还有个重要的功能就是实现CSMA/CD的部分功能,它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两个碰巧同时送出了数据,那样必将造成冲突,这时候冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。

PHY寄存器的地址空间为5位,从0到31最多可以定义32个寄存器(随着芯片功能不断增加,很多PHY芯片采用分页技术来扩展地址空间以定义更多的寄存器),IEEE802.3定义了地址为0-15这16个寄存器的功能,地址16-31的寄存器留给芯片制造商自由定义,如下表所示:
在这里插入图片描述

  • 注:
    1、上图B和E表示在特定接口下,寄存器是基本的还是扩展的,B为基本的,E为扩展的。例如:MII接口下只有0和1寄存器是基本的,其它的是扩展的。所为扩展是指留给IEEE以后的扩展特性用,不是给PHY厂商的扩展,PHY厂商自定义的只能是16~31号寄存器 。
    2、在IEEE标准文档及某些PHY手册中,某寄存器的比特(bit)用X.y表示,如0.15表示第0寄存器的第15位。

3、总体结构

在这里插入图片描述
在这里插入图片描述
在软件上对网口的操作通常分为下面几步:

  • 为数据收发分配内存;
  • 初始化MAC寄存器;
  • 初始化PHY寄存器(通过MIIM);
  • 启动收发。

reference

  • https://bbs.21ic.com/icview-2532600-1-1.html?ordertype=1&_dsign=8c288fac
  • https://www.cnblogs.com/kdurant/p/4310554.html
  • https://blog.csdn.net/sternlycore/article/details/89065789
  • https://blog.csdn.net/jasonchen_gbd/article/details/51628992
  • https://www.cnblogs.com/moluoqishi/p/9728344.html
  • https://www.cnblogs.com/jason-lu/articles/3196096.html
  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FPGA是一种可编程逻辑器件,可以通过编程实现各种功能。而Verilog是一种硬件描述语言,用于描述FPGA中的电路。Verilog基础语法包括模块定义、端口定义、信号定义、赋值语句、条件语句、循环语句等。模块定义是Verilog中最基本的语法,用于定义一个电路模块。端口定义用于定义模块的输入输出端口。信号定义用于定义模块内部的信号。赋值语句用于给信号赋值。条件语句用于根据条件执行不同的代码。循环语句用于重复执行一段代码。掌握Verilog基础语法是学习FPGA编程的基础。 ### 回答2: FPGA是一种可编程逻辑器件,它可以通过硬件描述语言来编写自定义的逻辑电路来实现各种功能。其中,Verilog是一种常用的硬件描述语言,有助于实现FPGA的功能。 Verilog语言主要由模块、端口、信号、语句和运算符五个基本部分组成。模块是Verilog中的最基本的语法单元,类似于传统程序语言中的函数,模块之间可以通过实例化进行连接。端口则是与外部世界进行通信的接口,可以分为输入端口(input)和输出端口(output)两种类型。信号是Verilog中表示数字信号的基本单元,可以是位向量、整数或实数。语句则是Verilog中描述操作和行为的语言,常用的语句包括赋值语句、分支语句和循环语句。运算符则是Verilog中用于进行操作的符号,包括算数运算符、逻辑运算符和位运算符。 在Verilog语言中,还有一些常用的结构体和命令可以帮助我们更方便地实现FPGA的功能。其中,常用的结构体包括always语句、case语句和module归档,常用的命令包括initial语句、wire语句和reg语句。always语句可以在指定的触发条件下执行某一段代码,case语句可以根据不同的条件执行不同的代码段,module归档则可以将多个模块合并为一个模块。initial语句可用于在仿真开始前初始化某些信号,wire语句则用于声明并连接信号,reg语句则用于声明并存储信号。 总体而言,了解FPGA和Verilog基础语法可以帮助我们更好地理解FPGA技术的应用和实现。然而,理论知识只有结合实际操作和实验才能更好地掌握。所以,我们还需要结合实际项目来进行练习和实践,从而更好地掌握FPGA和Verilog基础语法。 ### 回答3: FPGA(可编程门阵列)是一种可编程逻辑器件,可以用来创建定制的数字电路。Verilog是一种硬件描述语言,用于描述数字电路的结构和行为。 Verilog基础语法有以下几个部分: 1.模块定义:Verilog代码以模块的形式进行组织,每个模块都有一个名称和端口列表。模块定义以module关键字开始,以endmodule关键字结束。 2.端口声明:模块的端口是输入和输出连接到其他模块或FPGA芯片的引脚。端口可以是输入(input)、输出(output)或双向(inout)。端口声明在模块定义中。 3.信号声明:信号是描述数字电路中状态的变量。可以是单个位(wire)或多位(reg),在模块中声明。 4.赋值语句:用来为信号赋值,包括非阻塞赋值(<=)、阻塞赋值(=)和连续赋值(assign)。 5.条件分支语句:if, else if和else语句是用来控制程序流程,实现条件判断。 6.循环语句:Verilog支持for、while、do while和forever等类型的循环语句,可以在程序中实现迭代操作。 7.模块实例化:用来将其他模块作为子模块嵌入到当前模块中,从而实现复杂的数字电路。 除上述基本语法外,Verilog还有其他常用语法,如always块、initial块和function定义等。需要深入了解和使用Verilog,可以参考相关资料和教程。掌握了Verilog语法,可以使用FPGA搭建各种个性化的数字电路,用于嵌入式系统、数字信号处理、计算机网络等各种应用领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值