浅析Xilinx 三速以太网MAC IP核
之前在使用Altera的三速以太网MAC IP的基础上,完成了UDP协议数据传输。此次为了将设计移植到xilinx FPGA上,需要用到xilinx的三速以太网MAC IP核,当然也可以自己用HDL编写,但必须对数据链路层协议有非常清晰的认识。以下是在使用xilinx 三速以太网MAC过程中的一些记录和总结。
在使用IP核传输数据之前要对MAC层功能有个了解。MAC层功能用一个词概括就是“成帧解帧”,具体来讲TX方向对用户侧发送来的MAC帧添加前导码和帧尾校验和,对长度过短帧会在帧尾填充0直至最小帧长,此外流控模块可以根据需要发送pause帧。RX方向过滤掉不符合规范的数据帧并移除填充域,只有目的MAC地址与自身相符且帧尾校验和正确的数据帧才为有效数据帧,去除前导码和校验域后即发送给用户侧。接收端也会根据可能收到的pause帧做出暂停发送处理。
认识以太网帧结构同样非常重要,目前常见的是Ethernet II和IEEE802.3两种格式,总体可以归纳为:目的MAC地址 源MAC地址 长度/类型 有效负荷(可能有填充) 帧校验,长度依次是6byte、6byte、2byte、46~1500byte、4byte。区别在于Ethernet II帧长度/类型域解释为上层协议类型,而IEEE802.3同样位置是长度字段。区分两者的标准是:当该字段值小于等于1500(十六进制的0x05DC)时,为IEEE802.3格式;当字段值大于等于1536(或者十六进制的0x0600)时,帧使用的是Ethernet II格式。其中Ethernet II最为常见。
IP核的配置很简单,根据自己的需求设置即可。重点关注第二页,这里选择使用GMII作为物理层接口,并选择三速模式,可以通过接口改动传输速率。
IP核配置生成输出文件后,和其他较为复杂的IP核一样要熟读文档和分析example design的结构和功能。资料主要参考PG051.我们直接打开example design顶层文件对工程有个整体的认识:
// --------------------------------------------------
// | EXAMPLE DESIGN WRAPPER |
// | |
// | |
// | ------------------- ------------------- |
// | | | | | |
// | | Clocking | | Resets | |
// | | | | | |
// | ------------------- ------------------- |
// | -------------------------------------|
// | |FIFO BLOCK WRAPPER |
// | | |
// | | |
// | | ----------------------|
// | | | SUPPORT LEVEL |
// | -------- | | |
// | | | | | |
// | | AXI |->|------------->| |
// | | LITE | | | |
// | | SM | | | |
// | | |<-|<-------------| |
// | | | | | |
// | -------- | | |
// | | | |
// | -------- | ---------- | |
// | | | | | | | |
// | | |->|->| |->| |
// | | PAT | | | | | |
// | | GEN | | | | | |
// | |(ADDR | | | AXI-S | | |
// | | SWAP)| | | FIFO | | |
// | | | | | | | |
// | | | | | | | |
// | | | | | | | |
// | | |<-|<-| |<-| |
// | | | | | | | |
// | -------- | ---------- | |
// | | | |
// | | ----------------------|
// | -------------------------------------|
// -------------------------------------------------- //------------------------------------------------------
上边是官方提供的注释,非常清晰地给出了工程结构:
example_clocks: 时钟模块,提供工程中用到的所有时钟信号;
example_resets: 复位模块,产生所有子模块的复位信号;
axi_lite_controller: 控制模块,内部通过状态机对MAC和PHY芯片进行初始化和相应配置工作。
basic_pat_gen_inst: 包测试模块,有两种模式:发送固定样式测试数据包和将收到数据包环回送出给PHY。
trimac_fifo_block: AXI-S接口异步FIFO和MAC IP核。
MAC IP核包含的主要接口类型及作用是:
GMII接口--PHY数据通道 MDIO接口--PHY芯片配置管理 AXI-Stream接口--用户数据通道 AXI-Lite接口--用户控制管理
初步需要掌握的是用户数据接口,实际上AXI-Stream也无需过多关注,只要理解FIFO用户侧接口即可。以发送方向为例:
tx_axis_fifo_tdata 8位数据,tx_axis_fifo_tvalid 数据有效指示,tx_axis_fifo_tready MAC发送准备信号,tx_axis_fifo_tlast 数据包尾指示。接下来使用示例工程的testbench查看仿真波形,对用户接口时序有一个直观的认识。官方testbench demo_tb文件中会持续分别以10M 100M 1000M速率向example design RX方向GMII端口发送5个不同数据帧。先来看千兆网波形,在千兆模式下TX时钟为由FPGA提供的125MHz信号gtx_clk_bufg,RX时钟由PHY通过时钟恢复得到125MHz时钟信号。
数据的流向为:gmii_rx_xx --> rx_axis_mac_xx --> rx_axis_fifo_xx --> tx_axis_fifo_xx --> tx_axis_mac_xx --> gmii_tx_xx。此时example design中basic_pat_gen_inst模块设置为环回模式,会将MAC接收的数据环回到发送通道。由于第三个帧错误指示信号gmii_rx_er拉高,而第5个帧MAC地址不匹配,因此这两个数据帧被滤除掉。
上图看出第三个数据帧带有错误指示信号,FIFO模块才会将其丢弃。第五个数据包MAC地址不符,在MAC核内部被丢弃。以第四个数据包为例观察时序:
包尾指示和数据在MAC核收到FCS并检测完毕后才输出有效。
该帧目的MAC地址是48'hda_02_03_04_05_06 源MAC地址是48'h5a_02_03_04_05_06 长度/类型域是16'h00_03,因此是解释为帧长度为3字节,负荷是01 02 03。环回后目的MAC地址和源MAC地址被basic_pat_gen_inst模块交换,TX方向用户数据包为:
我们看下MAC核TX方向实际的用户接口时序,FIFO模块屏蔽了用户侧与MAC核之间的握手应答机制,缓存至少一个数据帧即开始数据传输,从而简化了接口时序。
当数据发送到物理层接口,由于数据包小于最小长度,因此发送到gmii接口上再次被填充至最小帧长。此外添加上前导码和校验和。
再来看看百兆网,速率为100M时TX和RX方向时钟信号均由PHY芯片提供。第四数据帧TX方向用户接口波形:
FIFO提供的用户侧接口时序上与千兆网没有差别,时钟频率是125MHz,位宽依然是8bit,那么又是如何实现百兆速率的呢?
MAC核用户接口时钟为25MHz,位宽为8bit,MAC核提供的tready信号每两周期拉高一周期,速率为25M*8/2 = 100M,因此100M速率是通过tready信号限流实现的。综上,对100M和1000M速率下全双工以太网概念和帧结构、MAC IP核配置以及核心用户接口时序功能均进行了阐述,本人也在学习中,希望对大家有帮助。
浅析Xilinx 三速以太网MAC IP核的更多相关文章
- 使用FDATOOL生成xilinx中FIR滤波器IP核的系数
1.在MATLAB命令窗口输入fdatool后回车,打开“Filter Designer & Analysis Tool”工具界面: 2.点击左下角的Set quantization para ...
- 转:基于 xilinx vivado 的PCIE ip核设置与例程代码详解
连接:https://blog.csdn.net/u014586651/article/details/103826967#comments
- FPGA设计千兆以太网MAC(2)——以太网协议及设计规划
上篇该系列博文中通过MDIO接口实现了PHY芯片的状态检测,验证其已处于1000M 全双工工作模式.在设计MAC逻辑之前,要先清楚MAC与PHY之间的接口以及以太网协议细节,这样才能保证网络的兼容性. ...
- Altera三速以太网IP核快速仿真与使用(上篇)
对于比较高级的ip核,altera一般都会提供仿真案例,网上有关于这个IP核的各种仿真方法,但都比较繁琐,前几日,朋友跟我分享了一个比较快速高效的仿真方法,这个方法也是他摸索折腾了一段时间才总结出来的 ...
- IP核之初——FIFO添加以太网MAC头部
本文设计思路源自明德扬至简设计法.在之前的几篇博文中,由于设计比较简单,所有的功能都是用verilogHDL代码编写实现的.我们要学会站在巨人的肩膀上,这时候就该IP核登场了! 说白了,IP核就是别人 ...
- Altera三速以太网IP核使用(下篇)--- 百兆网接口设计与使用
MAC IP核的主要作用是:实现数据链路层协议,分为TX方向与RX方向,TX方向实现的是在原包文的前面加上7个55和1个D5,RX方向则相反.在使用这个 MAC IP核之前,首先确认下自己使用的网卡是 ...
- 【重新发布,代码开源】FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片
原创博客,转载请注明出处:[重新发布,代码开源]FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片 - 没落骑士 - 博客园 https://www.cnblogs.com/m ...
- FIFO IP核
转载: 说白了,IP核就是别人做好了的硬件模块,提供完整的用户接口和说明文档,更复杂的还有示例工程,你只要能用好这个IP核,设计已经完成一半了.说起来容易,从冗长的英文文档和网上各个非标准教程中汲取所 ...
- 自定义AXI总线形式SPI接口IP核,点亮OLED
一.前言 最近花费很多精力在算法仿真和实现上,外设接口的调试略有生疏.本文以FPGA控制OLED中的SPI接口为例,重新夯实下基础.重点内容为SPI时序的RTL设计以及AXI-Lite总线分析.当然做 ...
随机推荐
- Generator函数异步应用
转载请注明出处: Generator函数异步应用 上一篇文章详细的介绍了Generator函数的语法,这篇文章来说一下如何使用Generator函数来实现异步编程. 或许用Generator函数来实现 ...
- iOS钉钉远程打卡助手(支持越狱和非越狱)
前言:本文主要讲述使用hook方式实现钉钉远程打卡功能,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法) 你是不是像小编一样每个 ...
- Linux chmod命令及权限含义
对于一条权限赋值命令:sudo chmod -R 764 ×××:我们必须了解其含义: (1)各字段含义:sudo chmod -R(更改文件夹及其子文件夹) ...
- 栏目class导航
<div id="index_nav"> <div class="index_nav"> <ul> <!-- 调用栏目 ...
- sqlite效率探测
在编译后当然就是使用sqlite,贸贸然去测试了一下创建数据库,插入数据,仅几条数据,发现,真不错的数据库,后来把数据量提高到10000的 时候,发现,怎么这么慢,后来自己都受不了,网上一查,原来是如 ...
- Excel的列编号 例如:A对应1,Z对应26,AA对应27,AZ对应52的JavaScript怎么写?
今天碰到的题目,当时不会.回来想了一会,调试了一下,然后想上网对答案,发现竟然没有!!! function str(num){ if(num<=0){ alert("excel表格貌似 ...
- postgres的initdb解析——从一次插件升级失败说起
我们公司基于postgres开发了一款数据库产品,不用说我们对OSS的源码做了改动,并且也集成和自己编写了一些插件.因此,当postgresql和相关插件升级时,我们也需要将升级反应到自己的产品中去, ...
- int指令
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- what is yaml ?
what is yaml ? when I fist time meeting it is in java projects she as a system config file to my e ...
- JAVA中比较两个文件夹不同的方法
JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同.具体例子如下: public class TestFo ...