本文设计思想采用明德扬至简设计法。上一篇博文中定制了自定义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)//位宽不能改动
(