Github_以太网开源项目verilog-ethernet代码阅读与移植(四)

实验背景
在前面的系列分享中介绍了Github开源项目verilog-ethernet的基本信息以及构建工程的方法,现在开始介绍简单的移植过程与关键代码阅读,该过程不会一蹴而就,会分为多篇来介绍,会涉及以太网相关的知识。由于笔者知识有限,相关知识的表述可能不太准确,有错误的地方请指正,也可自行查阅专业书籍与资料。
实验内容
查看项目中的示例工程,了解示例工程RTL视图,提出移植目的与思路,对MII接口等模块进行仿真。
实验步骤
以项目中的DE2-115 Quartus示例工程为例,构建工程方法参考如下:
https://blog.csdn.net/sinat_25428663/article/details/142532752?spm=1001.2014.3001.5502
打开工程,查看RTL视图
在这里插入图片描述
整个工程,分为pll模块,复位模块,按键消抖模块,以及fpga core模块,进入 fpga core 模块
在这里插入图片描述
与以太网相关的模块结构图整理如下,该图以数据流向为画图依据,有的信号和模块没有画出,并不是与实际模块一一对应,这里需要注意。画该模块的目的是,了解数据的流向与层级关系,可以看出该示例实现的功能是数据回环。在接收方向,PHY将数据向上传输给MAC层,然后将数据一层一层的解析,最后得到udp 有效数据(payload data);在发送方向,将udp有效数据向下一层一层封装,最后通过PHY发送。如果我们自己需要移植,可以参考这个层级关系,找到对应的模块,自下向上进行顶层模块的构建。
在这里插入图片描述
在本次移植时,我们要实现的主要功能是:
在FPGA中实现UDP协议栈通过外部PHY芯片发送数据。
由于笔者现在手头的板子上只有RTL8210,所以接口选择MII接口。
如果需要移植GMII接口或者RGMII接口则找到对应的verilog模块文件进行移植即可。对应文件在如下目录:
在这里插入图片描述
在进行移植时,我们需要了解每个模块的基本功能,鉴于这个目的,我们需要对每个模块进行仿真。
下面开始PHY接口部分的分析,在示例工程中,该部分结构如下:

在这里插入图片描述
其中包括PHY 接口模块, eth_mac_1g由两个模块组成,如下:
在这里插入图片描述这两个模块分别负责发送和接收数据的转换(frame <-> axis data),依据以上示例,MII接口模块移植如下:
在这里插入图片描述
对应的verilog文件如下:
在这里插入图片描述
这里需要说明一下的是,eth_mac_1g这个模块是兼容mii, rgmii,与gmii接口的,模块部分接口如下:
在这里插入图片描述
在这里插入图片描述
如果需要兼容mii接口,则对应的控制位需要进行设置,如下:
在这里插入图片描述
需要说明的是,eth_mac_mii.v模块包含了多个子模块,需要添加对应的verilog文件。
下面对eth_mac_mii.v文件进行仿真,如下:
在这里插入图片描述
由于MII接口的tx时钟和rx时钟均为25MHz(时钟周期为40 ns),且均为输入信号,这一点需要注意,可参考如下文章:

https://zhuanlan.zhihu.com/p/338288019

在这里插入图片描述
在这里插入图片描述
参数设置,使能填充功能,最小帧长度为64字节。
仿真部分代码如下:
在这里插入图片描述
在这里插入图片描述
仿真的主要过程是向eth_mac_mii模块发送50字节的数据,观察mii_tx接口上的数据信号,以及crc校验值是否正确。波形如下:
数据发送部分波形
在这里插入图片描述
mii_txd波形
在这里插入图片描述
前导码和帧分隔码正确
在传输完50字节数据后,填充数据使整个帧达到64字节,波形如下:
在这里插入图片描述以太网帧结构如下:
在这里插入图片描述
在这里插入图片描述
状态信号如下:在这里插入图片描述
至此,MII 接口mac层输出数据基本功能仿真完成,后面将介绍数据的缓存以及网络层相关的模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值