首页 理论教育 FPGA系统设计案例:以太网数据帧的发送

FPGA系统设计案例:以太网数据帧的发送

时间:2023-10-20 理论教育 版权反馈
【摘要】:例17.32:这个例子我们研究一下以太网的数据帧结构以及如何用FPGA发送一个以太网的数据帧。表17.3是以太网数据帧结构的基本形式:表17.3以太网数据帧结构的基本形式如果数据帧不超过64个字节,则需要在填充部分填满,使得数据帧达到至少64个字节。下面这段源代码描述了一个64字节的以太网数据帧的传送。

FPGA系统设计案例:以太网数据帧的发送

例17.32:这个例子我们研究一下以太网的数据帧结构以及如何用FPGA发送一个以太网的数据帧。

以太网帧格式,指的是以太网的串行数据包里,划分为各个功能域,每个域也称为字段,每个字段有其特定的名称和目的。这些功能域,包括以太网帧头、帧尾、源地址、目的地址等。

最早的以太网帧格式版本是Ethernet V1(1980),这是最原始的一种格式。这种格式最初是由施乐公司提出的以太网标准的封装格式,后来在1980年的时候由数字设备公司(DEC)、英特尔(Intel)和施乐公司(Xerox)推动标准化,从而形成Ethernet V1标准。

1982年,DEC、Intel和Xerox更改了Ethernet V1的电气特性和物理接口,同时在帧格式上并未做任何变化,形成了新的标准,这就是Ethernet V2版本的以太网数据帧格式。

1983年,Novell发布了划时代的Net ware/86网络套件,这个套件采用的是未公开标准化的私有以太网帧格式,实际上该格式是以当时尚未正式发布的802.3标准为基础。两年以后,IEEE正式发布802.3标准。但是,IEEE在802.3帧头中又加入了802.2 LLC(Logical Link Control)头,这使得Novell在1983年的以太网帧格式跟正式的IEEE 802.3标准互不兼容。通常把1983年Novell发布的这个以太网帧格式版本叫作RAW 802.3。

1985年,IEEE正式发布了802.3标准,该标准是由Ethernet V2发展而来。它将Ethernet V2帧头的协议类型字段替换为帧长度字段,因此丧失了与Ethernet V2的兼容性,并且导致它只能封装一种上层服务,即LLC;同时,该标准加入了802.2 LLC头用以标志上层协议。所以,通常把该标准称为IEEE802.3/802.2 LLC。

1985年,IEEE为保证在802.2 LLC上支持更多的上层协议,同时为更好的支持IP协议而发布了新的标准IEEE802.3/802.2 SNAP。与802.3/802.2 LLC一样,802.3/802.2 SNAP也带有LLC头,但是扩展了LLC属性,新添加了一个2Bytes的协议类型域,从而使其可以标识更多的上层协议类型;同时,另外添加了一个3Bytes的OUI字段用于代表不同的组织。

以太网帧格式有这么多种,这是由于历史上的各种纠缠不清的利益关系所造成的。实际使用的过程中,大多数TCP/IP应用都是使用Ethernet V2帧格式。IEEE802.3-1997改回了对这一格式的兼容。我们后面说到的以太网数据帧结构实际上默认指的就是Ethernet V2帧格式。

Ethernet V2帧格式包括如下一些功能域:前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度(2字节)、数据(46~1500字节)、帧校验序列(4字节)。

表17.3是以太网数据帧结构的基本形式:

表17.3 以太网数据帧结构的基本形式

(www.xing528.com)

如果数据帧不超过64个字节,则需要在填充部分填满,使得数据帧达到至少64个字节。接收端在接收到前导码与帧开始符之间的55~d5的跳变的时候,确定以太网数据帧的开始位置。表17.3的最后面四个字节FCS是CRC32校验码,占用4个字节。

下面这段源代码描述了一个64字节的以太网数据帧的传送。

这个以太网数据帧格式里,在payload净荷里装载了一个上层协议,即IP协议数据。具体的体现就是上面的源代码从tx_dat_defined[22]行到tx_dat_defined[49]行。

上面这个模块里,我们把要发送的64字节的以太网数据帧存储在一个数组里。工作时序是这样的:

首先发送端会先把rst_n置为0,tx_en置为0。在clk上升沿的触发下,模块进行初始化的设置,比如把发送寄存器tx_dat8和寄存器counter都置为0。

然后发送端会把rst_n置为1,tx_en置为1。在clk上升沿的触发下,模块就开始从数组的第一个单元开始读数并把读到的数依次往外传送,每来一个clk的上升沿就传送一个单元的数据。同时对计数器counter进行计数。

最后,当计数器计数到64时,计数器清零并把发送寄存器tx_dat8也清零。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈