一.功能:从rgmii接口(物理芯片)接收数据(4位),并通过gmii转rgmii接口(fpga)把数据转化为8位,验证udp帧的正确性,并把用户数据提取出来(去掉帧头帧尾)存储。
二.接收过程(gmii):
①分段判断:
Ⅰ.前导码;
Ⅱ.mac帧头:mac地址和以太网类型(IP还是arp);
Ⅲ.ip帧头:IP地址和上层协议类型(udp还是TCP);
以上要素都正确则接收帧,有一个出错则舍弃帧。
②技巧:
Ⅰ.存下ip首部长度,用以判断ip帧头是否接受完(因为ip帧头长度不固定,有可填充字段);
Ⅱ.存下udp帧长度,用以确定用户数据的长度。(用户数据长度 = udp帧长度 - udp帧头长度);
Ⅲ.依旧是用计数器来接收数据,每个时钟上升沿到来接收一次数据,(因此接收数据的速率是固定的)。
三.实现(gmii):三段式状态机(3个always块)
①根据udp帧数据的分段定义出几个状态;

②定义接收正确和接收错误的跳变信号;

③定义两个状态寄存器

第一个always块:用时序逻辑时刻更新状态寄存器;

第二个always块:用组合逻辑根据跳变信号判断是否要实现状态跳变:

第三个always块:用时序逻辑根据当前接收的数据设定跳变信号的值:


本文介绍了一种从RGMII接口接收数据并将其转换为8位数据的方法,通过gmii接口验证UDP帧的正确性并提取用户数据。文章详细描述了gmii接收过程中的分段判断技巧及三段式状态机实现方式,还讲解了gmii到rgmii接口转换的设计难点,包括双沿采样、信号延迟方法等。
最低0.47元/天 解锁文章
799





