fpga-以太网通信实验学习日记1-以太网通讯规则以及MAC与PHY之间的通讯

一下内容基本摘自正点原子所给的教程
使用以太网进行通讯,首先要了解以太网通讯的规则
在不同设备间进行通讯时,需要按照上面图片的规则发送数据,我以及将其整理为思维导图,发图片出来估计也是看不清的,附上文件链接链接:https://pan.baidu.com/s/1rurFMoBO9W0OdA4vO2W-Cg
提取码:rb27
不方便下载的同学可以看下面的文字哈

前导码7byte
		前导码( Preamble) : 为了实现底层数据的正确阐述,物理层使用7个字节同步码( 0和1
		交替( 55-55-55-55-55-55-55))实现数据的同步。
SFD(1byte)
		帧起始界定符( SFD, Start Frame Delimiter):使用1个字节的SFD(固定值为0xd5)来
		表示一帧的开始,即后面紧跟着传输的就是以太网的帧头。
以太网帧头(14byte)
		目的MAC地址(6byte)
				接收端MAC地址,占用6个字节
		源MAC地址(6byte)
				即发送端物理MAC地址,占用6个字节
		长度/类型(2byte)
数据段(46-1500byte)
		IP首部(20byte)
				前20个字节和紧跟其后的可选字段是IP数据报的首部,前20个字节是固定的, 后面可选字段是可有可无的首	
				部的每一行以32位( 4个字节)为单位。
		版本: 4位IP版本号( Version),这个值设置为二进制的0100时表示IPv4,设置为0110时表示IPv6,目前使用比	
				较多的IP协议版本号是4。
		首部长度: 4位首部长度( IHL, Internet Header Length),表示IP首部一共有多少个32位( 4个字节) 。 在没	
				有可选字段时, IP首部长度为20个字节, 因此首部长度的值为5。
		服务类型: 8位服务类型( TOS, Type of service),该字段被划分成两个子字段: 3位优先级字段(现在已经基	\					本忽略掉了)和4位TOS字段,最后一位固定为0。服务类型为0时表示一般服务(全设置为0就好)
		总长度: 16位IP数据报总长度( Total Length),包括IP首部和IP数据部分,以字节为单位。我们利用IP首部长度	
				和IP	数据报总长度,就可以知道IP数据报中数据内容的起始位置和长度。
		标识字段: 16位标识( Identification)字段,用来标识主机发送的每一份数据报。通常每发送一份报文它的值就会	
				加1
		标志字段: 3位标志( Flags)字段,第1位为保留位;第2位表示禁止分片( 1表示不分片0:允许分片);第3位	
				标识更		
		多分片(除了数据报的最后一个分片外,其它分片都为1)
		片偏移: 13位片偏移( Fragment Offset),在接收方进行数据报重组时用来标识分片的顺序
		生存时间: 8位生存时间字段, TTL( Time To Live)域防止丢失的数据包在无休止的传播,一般被设置为64或者	
				128。
		协议: 8位协议( Protocol)类型,表示此数据报所携带上层数据使用的协议类型, ICMP为1, TCP为6, UDP为	
				17。
		首部校验和: 16位首部校验和( Header Checksum),该字段只校验数据报的首部,不包含数据部分;校验IP数	
				据报头部是否被破坏、篡改和丢失等。
				其计算步骤如下:
					1、 将16位检验和字段置为0,然后将IP首部按照16位分成多个单元;
					2、 对各个单元采用反码加法运算(即高位溢出位会加到低位,最后取反,通常的补码运算是直接丢掉溢出
					的高位) ;
					3、 此时仍然可能出现进位的情况, 将得到的和再次分成高16位和低16位进行累加;
					4、 最后将得到的和的反码填入校验和字段。
		源IP地址: 32位源IP地址( Source Address),即发送端的IP地址, 如192.168.1.123。
		目的IP地址: 32位目的IP地址( Destination Address) , 即接收端的IP地址, 如192.168.1.102
		可选字段:是数据报中的一个可变长度的可选信息,选项字段以32bit为界,不足时插入值为0的填充字节,保证IP	
				首部始终是32bit的整数倍。
		数据段(26-1480byte)
				UDP首部(8byte)
						源端口号: 16位发送端端口号,用于区分不同服务的端口,端口号的范围从0到65535。
						目的端口号: 16位接收端端口号。
						UDP长度: 16位UDP长度,包含UDP首部长度+数据长度, 单位是字节( byte)
						UDP校验和: 16位UDP校验和。在大多数使用场景中接收端并不检测UDP校验和,因此这里不做过多介	
								绍。
用户数据(18-1472byte)

了解了以太网数据包格式之后,还要知道网口是如何与FPGA以及电脑进行通讯的
不同的MAC层之间,一般是通过PHY层连接,对phy来说,他不在乎接收到的是什么,只会将接收到的数据传输出去在这里插入图片描述
PHY层与FPGA或者说上位机PC的连接如图片所示,两个时钟信号RXC喝TXC都为PHY提供,并不需要FPGA对其提供时钟信号
ETH_RXC:接收数据参考时钟, 100Mbps速率下,时钟频率为25MHz; 10Mbps速率下,时钟
频率为2.5MHz, RX_CLK由PHY侧提供。
ETH_RXDV:接收数据有效信号,只有在ETH_RXDV为高电平时接收到的数据才有效。
ETH_RXD:四位并行的接收数据线。
ETH_TXC:发送参考时钟, 100Mbps速率下,时钟频率为25MHz; 10Mbps速率下,时钟频率
为2.5MHz, TX_CLK由PHY侧提供。
ETH_TXEN:发送数据有效信号,只有在ETH_TXEN为高电平时发送的数据才有效。
ETH_RESET:芯片复位信号,低电平有效
ETH_MDC:数据管理时钟( Management Data Clock),该引脚对ETH_MDIO信号提供了一
个同步的时钟。
ETH_RXC:接收数据参考时钟, 100Mbps速率下,时钟频率为25MHz; 10Mbps速率下,时钟
频率为2.5MHz, RX_CLK由PHY侧提供。
ETH_RXDV:接收数据有效信号,只有在ETH_RXDV为高电平时接收到的数据才有效。
ETH_RXD:四位并行的接收数据线。
ETH_TXC:发送参考时钟, 100Mbps速率下,时钟频率为25MHz; 10Mbps速率下,时钟频率
为2.5MHz, TX_CLK由PHY侧提供。
ETH_TXEN:发送数据有效信号,只有在ETH_TXEN为高电平时发送的数据才有效。
ETH_RESET:芯片复位信号,低电平有效
ETH_MDC:数据管理时钟( Management Data Clock),该引脚对ETH_MDIO信号提供了一
个同步的时钟。
MII发送和接收时序图如下图所示, 数据传输时先发送字节的低4位, 再发送字节的高4位。
在这里插入图片描述

正式开始Verilog的编写,此时对于时序还不是很明白,于是搭建好top和rxd之后,上signaltap2抓取rxdv和rxd之间的关系(一定记得先拉高areset_n)
抓取的信号

结论:数据和rxdv都在时钟下降沿改变,可放心大胆的在rxdv变化后的第一个上升沿接收数据.
另外对于先发送低四位再发送高四位,是每八个bit分为高4bit和高4bit,如第十五个时钟的上升沿对应的数据0101,实际上是SFD=8’b11010101的低四位,第十六个时钟上升沿的数据刚好是1101,也就是对于每一个byte,发送是从低到高的,比如SFD=1101 0101 对应MSB[3] MSB[2] MSB[1] MSB[0] LSB[3] LSB[2] LSB[1] LSB[0]

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值