跳转到主要内容

FPGA设计

FPGA设计干净的代码是程序员的核心技能

judy /

一个项目看上去很简单,精心设置了架构,结果越做发现冲突越多,直到整个逻辑完全混乱。本来一天可以的完成的事不知道怎么搞的一个星期还没有完成;本来只需要做一行更改,结果却涉及到N个模块;出现了一个非常小的BUG打了一个补丁

FPGA设计千兆以太网MAC(3)——数据缓存及位宽转换模块设计与验证

judy /

 本文设计思想采用明德扬至简设计法。上一篇博文中定制了自定义MAC IP的结构,在用户侧需要位宽转换及数据缓存。本文以TX方向为例,设计并验证发送缓存模块。这里定义该模块可缓存4个最大长度数据包,用户根据需求改动即可。

  该模块核心是利用异步FIFO进行跨时钟域处理,位宽转换由VerilogHDL实现。需要注意的是用户数据包位宽32bit,因此包尾可能有无效字节,而转换为8bit位宽数据帧后是要丢弃无效字节的。内部逻辑非常简单,直接上代码:
`timescale 1ns / 1ps

// Description: MAC IP TX方向用户数据缓存及位宽转换模块
// 整体功能:将TX方向用户32bit位宽的数据包转换成8bit位宽数据包
//用户侧时钟100MHZ,MAC侧125MHZ
//缓存深度:保证能缓存4个最长数据包,TX方向用户数据包包括
//目的MAC地址 源MAC地址 类型/长度 数据 最长1514byte

module tx_buffer#(parameter DATA_W = 32)//位宽不能改动
(

FPGA设计千兆以太网MAC(2)——以太网协议及设计规划

judy /

上篇该系列博文中通过MDIO接口实现了PHY芯片的状态检测,验证其已处于1000M 全双工工作模式。在设计MAC逻辑之前,要先清楚MAC与PHY之间的接口以及以太网协议细节,这样才能保证网络的兼容性。本文内容多来自Xilinx官方文档pg051 tri-mode-eth-mac.

<strong>1.GMII接口</strong>

  此处使用较简单的GMII接口,接口列表及说明如下:
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/blog/201810/13824-40356-…; width="670"></center>

FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片

judy /

<font color="#FF8000">作者:没落骑士</font>

<strong>一、前言</strong>  

  本文设计思想采用明德扬至简设计法。以太网这一高效实用的数据传输方式应用于各个领域,如网络交换设备,高速网络相机等。虽然各FPGA厂商都提供MAC IP核,但大多收费,有时无法破解。不同厂家之间无法移植,而且为了通用性考虑牺牲了效率,因此自己动手写一个以太网MAC是个不错的选择。

  本博文讨论通过MDIO接口管理PHY芯片来验证其正确工作,为在此基础上设计MAC逻辑开个头。PHY芯片采用RTL8211EGVB,选用GMII接口与MAC连接。下面我们来开始第一步,在此之前明确设计目的:检测PHY芯片是否完成自动协商 链路速率是否达到1000M。所以要从datasheet中了解到芯片引脚 寄存器地址 接口时序。

<strong>二、设计分析</strong>