最近在做以太网方面的开发工作,在Github中发现一个优秀的Verilog以太网项目,670+ star,整个项目实现了UDP协议栈,代码质量很高,且独立实现了axis fifio等基本功能模块,每一个模块都有独立的仿真文件,仿真采用cocotb和myhdl平台,使用python来编写测试文件, 使用iverilog来进行编译,用gtkwave来查看波形,值得阅读与学习,项目链接如下:
https://github.com/alexforencich/verilog-ethernet
此外该开发者还有其他的如PCIE,NIC项目,其首页链接如下:
https://github.com/alexforencich
很敬佩该开发者能够有精力和时间来维护这么优秀的开源项目。
整个项目文件如下:
在example中有如下目录文件
以上为该以太网项目在各开发板上的具体实现,DE2-115为友晶的开发板,采用Cyclone E FPGA芯片,Arty为Xilinx FPGA开发板,使用A7 FPGA芯片等等。这些示例,需要使用对应文件中的makefile文件进行编译来生成工程文件,现在不做介绍。
下面看到lib文件夹
进入子文件夹rtl
实现了axis接口的仲裁器,多路选择器,fifo等各种基本功能模块。在tb文件夹下有python编写的测试文件和对应模块的顶层文件
返回主目录,在rtl文件夹有以太网各模块,包括udp层,ip层,mac层,mii接口,gmii接口,rgmii接口等。
在tb文件中是对应的模块的测试文件。
先看一下一个基本功能模块的axis_fifo模块的仿真过程,在ubuntu中安装要求的工具,进入lib->axis->tb文件夹
使用python运行对应的测试文件
运行后会显示仿真过程
运行结束后,会产生test_axis_fifo.lxt文件
使用gtkwave查看该.lxt文件
添加波形
当然,也可以在quartus 或者vivado中进行编译,并自定义仿真文件。后面将介绍这些模块的实现,仿真与移植。