重觅旧恋--寻找早已消逝的情人 当前位置:首页>重觅旧恋--寻找早已消逝的情人>正文

重觅旧恋--寻找早已消逝的情人

发布时间:2019-03-21

原标题:浅析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核配置以及核心用户接口时序功能均进行了阐述,本人也在学习中,希望对大家有帮助。

编辑:帝顺文石

发布:2019-03-21 02:46:50

当前文章:http://dehangcd.com/list/sf3xdmi26y.html

有氧运动之父--肯尼斯·库珀 罗李华大师教您如何选个好日子 花博士教你:男女之间的风水很重要!这不是迷信! 她是热播剧中女一号,被黑得惨不忍睹,结局却如此励志 为什么说大部分人的勤奋是完全无效的 老婆怀上了二胎,已经作为奶爸的你要还是不要? 被失恋了,咋办? 为了合群,我们究竟浪费了多少时间

72792 57837 42311 65527 98321 48312 35433 59269 17017 98600 74311 86361 30223 63179 72401 52789 16694 99741 90567 84827

责任编辑:卓辛密