Menu Close

网络综合实验 Verilog工程(top.v及ETH_CORE.v)

top.v 是整个网络综合实验工程的顶层模块,如图1所示。在这个模块里例化了PLL时钟模块IP核,和网络综合实验的核心模块ETH_CORE.v。

图1 top.v模块

代码如下:


 

注意从top.v传递了很多参数到下层模块:

parameter MAC_TX_CRC_EN = 1,             // 0: MAC DON’T CALC CRC; 1: MAC CALC CRC

parameter [47:0] TX_MAC_SRC = 48’h46_72_61_73_65_73,     //源MAC地址
parameter [47:0] TX_MAC_DES = 48’hff_ff_ff_ff_ff_ff,               //目的MAC地址

//发送相关参数

parameter [31:0] TX_IP_SRC = 32’hc0a8003e,                                //源IP地址(这里指FPGA)
parameter [31:0] TX_IP_DES = 32’hc0a8002e,                                //目的IP地址(这里指主机)
parameter [15:0] UDP_TX_SRC_PORT = 10000,                            //源端口(这里指FPGA)
parameter [15:0] UDP_TX_DES_PORT = 10000,                           //目的端口(这里指主机)
parameter UDP_TX_CHECKSUM_EN = 1,             // 0: UDP checksum = 16’h0000; 1: calc checksum

//接收相关参数

parameter [31:0] RX_IP_SRC = 32’hc0a8002e,                             //源IP地址(这里指主机)
parameter RX_IP_SRC_EN = 1,                     // 0: don’t check src ip address; 1: check src ip address
parameter [31:0] RX_IP_DES = 32’hc0a8003e,                              //目的IP地址(这里指FPGA)
parameter RX_IP_DES_EN = 1,                    // 0: don’t check des ip address; 1: check des ip address

parameter [15:0] UDP_RX_SRC_PORT = 10000,                          //源端口(这里指主机)
parameter UDP_RX_SRC_PORT_EN = 1,                // 0: don’t check udp src port; 1: check udp src port
parameter [15:0] UDP_RX_DES_PORT = 10000,                            //目的端口(这里指FPGA)
parameter UDP_RX_DES_PORT_EN = 1,                // 0: don’t check udp des port; 1: check udp des port

parameter MAIN_CLK = 125,                                       //时钟主频,单位是MHz
parameter PHY_SPEED = “AUTO”                  // “AUTO”, “1G”, “100M”, “10M”

 

ETH_CORE.v是网络综合实验的核心模块,如图2所示。例化了ETH_UDP.v,ETH_IP.v,ETH_MAC.v 和eth_phy_core.v四个模块。其代码如下:

图2 ETH_CORE.v模块


 

 

在ETH_CORE.v模块中也有一些参数传递给下层的子模块,如下所示:

localparam IP_BUF_SIZE = 10;
localparam IP_IDX_BIT = 1;

localparam MAC_TXBUF_SIZE = IP_BUF_SIZE + 1;
localparam MAC_TXIDX_BIT = IP_IDX_BIT;

这些参数主要用来参数化IP和MAC层使用的A/B Buffer和FIFO,提高模块的通用性。

 

Posted in FPGA, FPGA 教材教案, Verilog, Vivado, Vivado, 开发工具, 开发工具, 开发语言, 教材与教案, 文章, 编程语言