说到MAC,全名叫做Media Access Control, 媒体访问控制
一般认为有线网的MAC具备以下几大功能【摘自《计算机网络,自顶向下方法》】:
(1)提供对物理层和对上层的接口。
(2)Framing, 成帧。
(3)差错检测和纠正。
xge_mac自带一个简单的spec。spec最开始有一个框图介绍了这个设计的结构。
可以看到这个MAC设计是XGMII接口,只设计到了802.3协议的MAC层。对外是要连接XGMII接口的PHY。
简单概括下,可以粗略看成4条通路,后面计划对每个模块进行详细分析
Fault 状态机:
连接TX和RX。用来产生Local Fault或者响应Remote Fault从而建立以太网链路。关于Fault状态机的具体定义可以参考802.3/第六章。
TX:
数据从pkt_tx_data读入,通过TX_EnQ转换成TX Data FIFO能够接收的数据格式,存入TX DataFIFO。 TX DeQ模块从Data FIFO取数据,从Hold FIFO(Control FIFO)中存取数据(进行插入PREM,计算CRC,等一系列操作),组成以太网frame,通过xgmii接口发送给物理层。
RX:
从物理层接收frame,通过RX_EnQ、RX Data FIFO 和RX Hold FIFO解析、暂存。RX Data FIFO中的数据通过RX_DeQ
Control/Status(Wishbone):
负责控制发送,存储MAC的状态/产生中断等等。
这个框图比较粗略,可以结合EDA工具生成的原理图进行分析。比如可以将code导入vivado查看elaborate之后的结构。