Menu Close

以太网模块(IP核) RISCV接口封装

当我们学习过以太网的相关知识,学习了以太网模块IP核在FPGA 中的应用, 就可以将以太网IP 封装成RISCV cpu 所需要的IP 模块。 重新封装的模块将对之前的以太网模块进行改造。 主要是去掉UDP层, IP 层, 这些层的功能之后会在软件层面实现(软件层面的协议栈不光实现UDP,IP, 还有其他的协议需要支持),所以重新封装的模块只要保留mac 层就可以了, 同时设计好和RISCV cup 的总线接口。

改造后的以太网模块框图:

ethernet verilog code structure

图1

其中eth_core.v  内部框图为图2所示:

ethernet verilog module flow chart

 

图2

cpu 端的接口:

接收端:设计以太网cpu 端的接口为 双端口, (IP_RX_DRAM)   ,双端口的深度为4096 bytes ,分为乒乓buffer。由于接口为32bit, 所以每个buffer的深度为512。

发送端:设计为双端口(MAC_TX_DRAM),双端口的深度为4096 bytes ,分为乒乓buffer。 接口为32bit, 每个buffer的深度为512。

接收,发送的双端口 控制字节定义:cpu 端的 bit[31]  为控制字, bit[27:16] 为接收到的以太网数据的字节(bytes)数量(length)。

mac_rx_web:        cpu 写信号, 当得到完整的数据包后, 清除当前buffer时,使用。

mac_rx_addrb:   cpu 地址总线, 用于指示读写双端口地址

mac_rx_doutb[31:0]: 双端口中的读数据通道, 连接到cpu 的 读数据总线上。

 

mac_tx_wea:  cpu 写信号, 用于将软件的数据写入到双端口中。

mac_tx_addra: cpu 地址总线,指示双端口的地址。

mac_tx_dina[31:0] 写入双端口的 cpu 数据写 通道

mac_tx_douta[31:0] 读双端口到 cpu 读数据通道。

 

mdio 控制接口:

phy_addr[4:0] : 设置以太网phy mdio 的物理地址

smi_data[24:0]: 一组mdio 命令接口, 包括 start of frame +  读/写 OpCode  + mdio register addr + write_data[15:0]。 (如果是读命令, write_data[15:0] 的内容不会被fpga 使用) {st_op, phy_reg, phy_reg_val_w} <= smi_data;

smi_en: 命令有效信号, 一个时钟宽度。

smi_dout[15:0] : 读命令发送后, 当smi_done == 1 时,得到的从phy 芯片返回的 寄存器 内容。

smi_done: 表示当前的命令操作结束。

smi_err: 当前的命令发生错误。

 

CPU寄存器接口:

ethernet verilog code register manual

图3

在cpu 设计中,我们将:

以太网的寄存器组分配物理地址:0xd000_0000 — 0xd000_7ff 空间。

将以太网发送buffer 分配空间为:0xd000_8000 — 0xd000_8fff

将以太网接收buffer 分配空间为:0xd000_c000 — 0xd000_cfff

 

0xd000_0000 ETH版本寄存器 R :

指示当前以太网IP 核的版本号。 只读寄存器。

0xD000_0004 ETH控制寄存器 R/W:

控制寄存器,用于启动以太网IP核,是否硬件添加padding, 是否计算CRC等。

0xD000_0008 ETH状态寄存器 R:

以太网状态寄存器,指示接收到的包是否有错误,以太网phy 是否有中断,当前以太网phy状态等。

0xD000_0014 Eth mac 寄存器 h R/W:

0xD000_0018 Eth mac 寄存器 l R/W:

以太网MAC地址寄存器

0xD000_001c Eth ip寄存器 R/W:

以太网IP 地址寄存器,表示当前设备的IP地址。

0xD000_0020 Eth mdio寄存器 R/W:

SMI (mdio)控制寄存器

0xD000_0024 Eth mask寄存器 R/W:

0xD000_0028 Eth IRQ enable R/W:

0xD000_002c Eth IRQ STAT R:

以太网中断寄存器, 中断屏蔽寄存器,中断状态寄存器。 指示以太网mac 层的接收错误; 以太网phy 相关中断;smi 错误等。

寄存器的具体信息,请参照RISC-V Address Map 3.09版

 

CPU接口verilog 代码:


 

关于RISCV 以太网框架部分的详细信息,请参照视频讲解。

Posted in FPGA, FPGA 教材教案, Verilog, 教材与教案, 文章