当前位置:   article > 正文

10G_Ethernet_03 Example Design_xilinx官方的example design

xilinx官方的example design

由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/article/details/110180317   《10G_Ethernet_01 万兆以太网设计引言

目录

1 Example Design 简介

2 Example Design 详解

2.1 AXI-Lite Control State Machine

2.2 Basic Pattern generator and checker

2.2.1 address_swap

2.2.2 Pattern generator

2.2.3 Pattern checker

2.3  Ethernet FIFO

2.3.1 RX FIFO

2.3.2 TX FIFO

3 Test Bench

3.1  Test Bench 简介

3.2  DEMO 模式

3.3 BIST 模式

4 Example Design 的仿真

4.1 DEMO 模式下的仿真

4.2 BIST 模式下的仿真


1 Example Design 简介


    Xilinx 官方为了使用户能快速将 IP 应用到设计中,会提供示例设计( Example Design), 通过学习示例设计能快速掌握 IP 的设计方法, 同时示例设计可以在完全不进行任何修改的情况, 配合官方开发板可达到快速验证的目的,或许后续的应用开发也只
需要在示例设计上进行修改, 加快应用开发的速度。本章内容也会同时给出非官方板卡在使用示例设计时的验证方法, 示例设计还有一个功能就是可以快速的验证硬件电路的正确性, 示例设计结构如下图所示:

                                                示例设计
示例有以下组成部分:
AXI_Lite 控制状态机(AXI-Lite Control State Machine)、模式生成器和检查器(Pattern generator and checker) 、时钟生成模块( AXI-Lite Clock generation) 、 以太网FIFO(Ethernet FIFO)、 10G 以太网子系统(10G Etehernet Subsystem) ;

 

  • AXI_Lite 控制状态机(AXI-Lite Control State Machine) : 通过 AXI_Lite 接口配置PCS/PAM 和 MAC,以允许基本帧的传输;
  • 模式生成器和检查器(Pattern generator and checker) :该模块除了为示例设计提供多样的测试模式, 还包含了一个帧生成器和帧检查器; 帧生成器在适合的板卡上可生成数据包,帧检查器可检查任何接收的数据

              该模块可以给示例提供三种操作模式:
          (1) 由帧生成器生成的帧直接插入 TX_FIFO, 数据在串行链路上传输;
          (2) FIFO 侧环回,将来自 RX FIFO 的帧插入 TX_FIFO,数据在串行链路上传输;
          (3) PCS 环回, 帧生成器生成帧插入 TX_FIFO,然后通过 PCS 直接环回, 串行链路上没有数据。
             这三种模式的控制信号,可通过外部简单的控制信号来改变示例设计所使用的模式, 可通过相关信号的直接赋值,或映射到电路外围的DIP 开关或上下拉电阻上。

  • 时钟生成模块(AXI-Lite Clock generation): AXI_Lite 总线所需要的时钟;
  • 以太网 FIFO(Ethernet FIFO):用户发送和接受带有 AXI4-Stream 接口的 FIFO;

2 Example Design 详解


2.1 AXI-Lite Control State Machine


        AXI-Lite 状态机提供初始化 PHY 和 MAC 的基本访问, 访问流程如下:

                       AXI4-Lite状态机
        复位后, 内部复位的建立时间完成,状态机首先写入 MAC 启用 MDIO 并配置MDIO 时钟(假设 s_axi_aclk 运行在 125 MHz,默认情况下从示例设计和 demo_tb 提供)。
        然后配置 MAC 的 RX 和 TX 侧。
        接着,可以使用示例设计的输入信号 pcs_loopback 可以将 PHY 设置为两种模式:PCS 环回(数据在 10GBASE-R 或 10GBASE-KR 内回送)或默认发送/接收模式,将相应的寄存器值写入 PHY MDIO 寄存器。然后在状态寄存器上执行 MDIO 读取以验
证编程模式。(1) 如果是 PCS 环回模式 PHY 配置已完成,并且允许通过启用码型发生器来启动帧传输。(2) 如果选择了默认发送/接收模式,则从中读取第二个状态寄存器,指示 PHY 是否已复位并且已建立块锁定。如果未建立块锁定,将轮询此 MDIO 状
态寄存器,直到检测到块锁定。一旦成功,就配置 PHY,并且可以通过启用码型发生器来启动帧传输。该状态的退出条件被重置或启用 PCS 环回。

2.2 Basic Pattern generator and checker


模式生成器在一下文件中描述:

  • <component_name> _gen_check_wrapper.v
  • <component_name> _axi_pat_gen.v
  • <component_name> _axi_pat_check.v
  • <component_name> _axi_mux.v
  • <component_name> _address_swap.v

gen_check_wrapper 有两个主要的功能模式:发生器模式和环回模式,由示例设计的输入信号 enable_pat_gen 配置。
在环回中,来自 RX FIFO 的数据被传递到地址交换模块(address_swap) 并从那里传递到 TX FIFO。
在发生器模式中, TX FIFO 数据由码型发生器提供, RX FIFO 数据可选择由模式检查器检查, 由示例设计的输入信号 enable_pat_check 配置。


2.2.1 address_swap


在环回路径上可启用地址交换模块, 默认地址交换功能被绕过。
在环回模式下,当启用地址交换时,地址交换模块将等待,直到接收到目标地址(DA)和源地址(SA)字段,然后才开始将数据发送到 TX FIFO, 然后模块将交换每帧的 DA和 SA。这确保了输出帧 DA 与链路另一端的设备的 SA 匹配。禁用时, DA 和 SA 字段保持不变。


2.2.2 Pattern generator


        可以使用示例设计的 enable_pat_gen 信号输入来启用/禁用模式生成器。启用后,刷新来自 RX FIFO 的数据,并且 pat_gen 模块驱动 address_swap 模块输入。模式生成器使用向量来允许用户修改目标地址和源地址,插入自定义前导码和 VLAN 字段以及控制最小帧大小和最大帧大小。启用后,它将以配置的最小帧大小开始,并在每帧之后发送,增加帧大小,直到达到最大值; 然后它以最小帧尺寸再次开始。

       示例设计输入提供对自定义前导码和 VLAN 字段插入的直接控制。如果针对合适的电路板,这些配置输入可以连接到 DIP 开关。在所有情况下,模式生成器框架的构造如下:

  • 客户前导数据(如果已启用), DA, SA 和 VLAN 字段(如果已启用)值由示例设计中模块实例化时指定的向量值提供;
  • 类型/长度字段根据数据包大小设置;
  • 帧数据是从类型/长度字段中的值开始的递减计数。这应该意味着所有帧中的最终数据字节是 0x01 或 0x00;

        在环回场景中(使用第二个目标板作为环回),两个板上的振荡器之间的 ppm 差异可能导致较慢板中数据溢出,从而导致错误。这通常是在较慢的电路板工作时观察到的。为了避免这个问题,模式生成器提供的数据速率被限制到恰好低于所选的线速率。pat_gen 模块具有直接由控制误差插入功能, 示例设计的输入信号 insert_error(可以连接到开发板合适的按钮上)。
        模式生成器还提供简单的活动监视器。 翻转 gen_active_flash 信号输出,该输出可以连接到电路板合适的 LED 上, 闪烁以指示正在传输数据;


2.2.3 Pattern checker


        pat_check 模块对正被接收的数据提供了一个简单的完整性检查。 它使用与 pat_gen模块相同的输入数据和控制向量,因此需要相同的帧内容和帧大小增量。由于帧数据可能交换或不交换 DA 和 SA,因此模式检查器允许这两个值交换位置。
        使能示例设计的 enable_pat_check 信号输入时,将监视 RX_FIFO 的输出。 第一步是确定数据序列在框架的位置,通过捕获的第一个完整帧的类型/长度字段中的值来完成的, 完成此操作后,就可以预计下一帧的长度将逐渐增大(除非位于最大长度的切换点)。
        如果检测到错误,则在不匹配的字节或字节上引发错误标志,并且错误条件被采样并输出到示例设计的 输出信号 frame_error上(可以使用开发板上合适的 LED 显示)。模式检查器状态机然后重新同步到输入数据, 示例设计的 reset_error 信号输入如果被
使能,将清除 frame_error 信号,从而能够感觉到错误的频率(如果有的话)。
        模式检查器还提供简单的活动监视器。 示例设计的 check_active_flash 输出信号将被翻转输出,可连接到开发板上合适的 LED。 可以指示正在正确接收 RX 数据。 这确保了错误检测不仅仅是因为帧被丢弃而导致的。

2.3  Ethernet FIFO


        以太网 FIFO 在以下文件中描述:

  • <component_name> _xgmac_fifo.v
  •  <component_name> _axi_fifo.v(为每个 RX 和 TX FIFO 实例化两次)

        以太网 FIFO 包含的实例 tx_client_fifo 连接到 TX AXI4-Stream,和实例 rx_client_fifo连接到 RX AXI4- Stream。发送和接收 FIFO 组件都实现了 AXI4-Stream 用户接口,通过该用户接口可以发送和接收数据帧。


2.3.1 RX FIFO


        rx_client_fifo 是由一个双口 RAM 构建而成,可存储 16384bytes 个字节。 存储深度由本地参数 FIFO_SIZE 设置,默认设置值为 1024。接收 FIFO 从子系统接收帧数据,如果帧没有错误,则该帧在 AXI4-Stream FIFO 接口上显示以供读取(本例中由帧检查
器模块读取)。如果帧出错,则接收 FIFO 将丢弃该帧。
        如果接收 FIFO 存储器溢出,则当前正在接收的帧将被丢弃, 此时无论它是好帧还是坏帧,信号 rx_overflow 被断言。内存可能溢出的情况如下:

  • FIFO_SIZE 参数设置的 FIFO 大小限制了它可以无误地存储的帧大小。如果帧大于参数大小(以字节为单位), FIFO 可能会溢出,然后数据丢失。因此,对于大于FIFO_SIZE 参数指定的字节数的帧,建议不要将示例设计与巨型帧模式的 MAC 解决方案一起使用。
  • 如果数据写入数据的速度比读取数据的速度快, FIFO 最终会溢出。例如,如果环回路径从 RX FIFO 设置为 TX FIFO,则如果接收器时钟以比发送器时钟更快的速率运行,或者如果接收帧之间的数据包间间隔小于发送帧之间的数据包间隙。如果是这种情况, TX FIFO 无法像接收到的那样快速地从 RX FIFO 读取数据。

2.3.2 TX FIFO


        tx_client_fifo 是由一个双口 RAM 构建而成,可存储 16384bytes 个字节。 存储深度由本地参数 FIFO_SIZE 设置,默认设置值为 1024。 当全帧已写入发送 FIFO 时,FIFO 将数据提供给 MAC 发送器。 MAC 使用 tx_axis_mac_tready 来限制数据,直到它控制介质为止。如果 FIFO 存储器填满,则 tx_axis_fifo_tready 信号用于停止AXI4-Stream 接口写入数据,直到 FIFO 中的空间可用。如果 FIFO 存储器已满,但没有可用于传输的完整帧。例如,如果一个帧大于参数的字节数,那么 FIFO 声明tx_overflow 信号并继续接收来自连接逻辑的帧的其余部分; 但是,这个大的溢出帧将被 RX FIFO 丢弃。这样可确保 AXI4-Stream FIFO 接口不会被锁定。

3 Test Bench


3.1  Test Bench 简介


        PG157 中将 Test Bench 作为及单独一章进行描述, 但实际内容属于 Example Design的一部分,把它放到这一章进行讲解, Test Bench 的实现框图如下:

                                                  Test Bench
Test Bench 是一个简单的程序,用于演示示例设计和子系统本身。它有两种操作模式, DEMO 和内置自测(BIST), DEMO 是默认模式。 Test Bench 包括以下内容:

  • 时钟发生器(Clock Management)
  • DEMO - 帧激励模块,经过适当编码和加扰,可连接到示例设计的串行接收器接口。
  • DEMO - 帧监视器块,用于检查通过串行发送器接口返回的数据(在适当的解扰和解码之后)。
  • 激励和监视器块使用 CRC 引擎(未示出)。
  • BIST - 可以从串行发送器接口连接到串行接收器接口,构建简单环回路径(未示出)。


3.2  DEMO 模式


        DEMO 模式下 Test Bench 执行以下任务:

  • 生成输入时钟信号;
  • 启用地址交换; 码型发生器和检查器被禁用;
  • 接收数据 通过 AXI_Stream 接口环回到发送路径上;
  • 对子系统进行复位重置;
  • 等待 PCS / PMA 块锁定建立;
  • 4 个帧被推入串行接收器接口

         (1)第一帧是最小长度帧。
         (2)第二帧是类型框架。
         (3)第三是错误帧。
         (4)第四帧是填充帧。帧

  • 当每个帧被推入接收器接口时, CRC 将在适用的帧字段上计算并附加到帧的末尾;
  • 然后对帧进行 64b / 66b 编码,然后进行加扰;
  • 在串行发送器接口接收的帧被解扰和解码;
  • 然后帧被传递到监视进程,该进程在观察帧并计算 CRC。然后,它通过将自己计算的CRC 值与帧的最后四个字节进行比较来检查 CRC 的有效性;
  • 计算传输的帧数。


3.3 BIST 模式


        BIST 模式下 Test Bench 执行以下任务:

  • 生成输入时钟信号;
  • 对子系统进行复位重置;
  • 等待 PCS / PMA 块锁定建立;
  • 启用码型发生器和检查器;
  • 对串行发送器接口处接收的帧进行解扰和解码;
  • 然后帧被传递到监视器进程,该进程在观察帧并计算 CRC。然后,它通过将自己计算的 CRC 值与帧的最后四个字节进行比较来检查 CRC 的有效性;
  • 计算发送的帧数;
  • 串行接收器链路连接到发送器链路,以便将发送的帧环回到子系统的接收器路径;
  • 从 RX FIFO 读出的帧由示例设计中的检查器模块检查。测试台监视检查器模块检测到的任何错误。

4 Example Design 的仿真


        对 Example Design 进行仿真, 并观察仿真结果可以帮助用户更好的了解 ExampleDesign 的功能特性。


4.1 DEMO 模式下的仿真


        DEMO 模式下的仿真流程见 3.2 DEMO 模式所描述的流程;


         该测试模式可将 Example Design 理解为一个输入输出的黑盒, Test Bench 产生激励测试数据,经过 Example Design 环回, 并在 Test Bench 中对环回的数据进行检查,以验证子系统的正常工作;



4.2 BIST 模式下的仿真


        BIST 模式下的仿真流程见 3.3 BIST 模式所描述的流程;


        该测试模式可将 Example Design 理解为一个自身产生数据激励, 并自身进行检测的方式(自环回),以验证子系统的正常工作;

5 设计资源传送门

         到这里,产生了该系列博客的第一个设计资源,传送门在此: https://download.csdn.net/download/qq_33486907/13196358   《基于FPGA的万兆以太网示例设计 》,通过该示例可完成仿真验证。同样该系列博客的下一篇文章将讲解示例工程的上板验证。

下一篇传送门在此:https://blog.csdn.net/qq_33486907/article/details/110429232 10G Ethernet Subsystem IP 的快速验证

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/700379
推荐阅读
相关标签
  

闽ICP备14008679号