为您推荐:
精华内容
最热下载
问答
  • 高速FPGA串并收发器SERDES实现ADS6445的AD转换 在使用TI公司四通道、14Bit、最大速率125M的ADS6445。利用Xilinx V5系列器件的串行收发控制器ISERDES的原语来实现数据的接收。 (1)ADS6445基础知识和配置 ADS6445是...

    高速FPGA串并收发器SERDES实现ADS6445的AD转换

    在使用TI公司四通道、14Bit、最大速率125M的ADS6445。利用Xilinx V5系列器件的串行收发控制器ISERDES的原语来实现数据的接收。

    (1)ADS6445基础知识和配置

    ADS6445是一款很强大的AD转换芯片。最高支持125M采样速率,共有四个采样通道,模拟输入支持LVCMOS, LVPECL, LVDS时钟输入。芯片输入差分时钟作为芯片的主时钟。通过芯片内部PLL进行倍频输出数据时钟和帧时钟。模拟参考电压VCM作为模数转换的基准。
    芯片的结构框图如下图所示。
    在这里插入图片描述

    ADS6445有多种输出模式,需要对芯片寄存器进行配置。根据系统需要我配置为DDR输出2-Wire Interface 16×Serialization模式输出。配置寄存器如下图所示。

    在这里插入图片描述

    由于单个芯片需要八路串转并,并且单路输入位宽为8位,所有每路需要2个ISERDES并联使用组成一个8位位宽的串并转换,并且四路模拟信号需要同步,因此实现ADS6445芯片的数据采集需要充分的了解ISERDES。

    (2)SERDES原语的基础知识

    SERDES是高速串行转换器。分为ISERDES和OSERDES。下面以ISERDES原语为例进行说明。

    genvar i ;

    generate for(i=0;i<8;i=i+1)begin:iserdes_data

    ISERDES #(

    .BITSLIP_ENABLE(“TRUE”), // “TRUE”/“FALSE”
    to enable bitslip controller

                             // Must be"FALSE" if INTERFACE_TYPE set to "MEMORY"
    

    .DATA_RATE(“DDR”), // Specify data rate of “DDR” or"SDR"

    .DATA_WIDTH(8), // Specify data width - for DDR 4,6,8, or 10

    // for SDR 2,3,4,5,6,7, or 8

    .INTERFACE_TYPE(“NETWORKING”), //Use model-“MEMORY"or"NETWORKING”

    .IOBDELAY(“NONE”), // Specify outputs where delay chain will be applied
    // “NONE”, “IBUF”, “IFD”, or “BOTH”

    .IOBDELAY_TYPE(“DEFAULT”), //Set tap delay"DEFAULT", “FIXED”, or “VARIABLE”

    .IOBDELAY_VALUE(0), // Set initial tap delay to an integer from 0 to 63

    .NUM_CE(2), // Define number or clock enables to an integer of 1 or 2

    .SERDES_MODE(“MASTER”) // Set SERDES mode to “MASTER” or “SLAVE”

    )
    

    ISERDES_a_master (

      .O(),    // 1-bit combinatorial output
    

    .Q1(data_chan_l[8*i+0]), // 1-bit registered output

    .Q2(data_chan_l[8*i+1]), // 1-bit registered output

    .Q3(data_chan_l[8*i+2]), // 1-bit registered output

    .Q4(data_chan_l[8*i+3]), // 1-bit registered output

    .Q5(data_chan_l[8*i+4]), // 1-bit registered output

    .Q6(data_chan_l[8*i+5]), // 1-bit registered output

    .SHIFTOUT1(shiftout1[i]), // 1-bit carry output

    .SHIFTOUT2(shiftout2[i]), // 1-bit carry output

    .BITSLIP(data_bit_slip), // 1-bit Bitslip input

    .CE1(1’b1), // 1-bit clockenable input

    .CE2(1’b1), // 1-bit clock enable input

    .CLK(data_clk_buf), //1-bit clock input

    .CLKDIV(clk_div), // 1-bitdivided clock input

    .D(data_pin[i]), // 1-bit serial data input

    .DLYCE(1’b0), // 1-bit delay chain enable input

    .DLYINC(1’b0), // 1-bit delay increment/decrement input

    .DLYRST(1’b0), // 1-bit delay chain reset input

    .OCLK(1’b0), // 1-bit high-speed clock input

    .REV(1’b0), // Must be tied to logic zero

    .SHIFTIN1(1’b0), // 1-bit carry input

    .SHIFTIN2(1’b0), // 1-bit carry input

    .SR(~cfg_done_r) // 1-bit set/reset input

    );
    

    ISERDES #(

    .BITSLIP_ENABLE(“TRUE”), // “TRUE”/“FALSE” to enable bitslip controller

                              //Must be"FALSE"if INTERFACE_TYPE set to "MEMORY"
    

    .DATA_RATE(“DDR”), // Specify data rate of “DDR” or"SDR"

    .DATA_WIDTH(8), // Specify data width - for DDR 4,6,8, or 10

    // for SDR 2,3,4,5,6,7, or 8

    .INTERFACE_TYPE(“NETWORKING”), // Use model -“MEMORY” or “NETWORKING”

    .IOBDELAY(“NONE”), // Specify outputs where delay chain will be applied

                         //    "NONE", "IBUF", "IFD", or "BOTH"
    

    .IOBDELAY_TYPE(“DEFAULT”), // Set tap delay
    “DEFAULT”, “FIXED”, or “VARIABLE”

    .IOBDELAY_VALUE(0), // Set initial tap delay to an integer from 0 to 63

      .NUM_CE(2), // Define number or clock enables to an integer of 1 or 2
    

    .SERDES_MODE(“SLAVE”) // Set SERDES mode to “MASTER” or “SLAVE”

    )
    

    ISERDES_a_slave (

      .O(),    // 1-bit combinatorial output
    

    .Q1(), // 1-bit registered output

      .Q2(),  // 1-bit registered output
    

    .Q3(data_chan_l[8*i+6]), // 1-bit registered output

    .Q4(data_chan_l[8*i+7]), // 1-bit registered output

    .Q5(), // 1-bit registered output

    .Q6(), // 1-bit registered output

    .SHIFTOUT1(), // 1-bit carry output

    .SHIFTOUT2(), // 1-bit carry output

    .BITSLIP(data_bit_slip), // 1-bit Bitslip input

    .CE1(1’b1), // 1-bit clock enable input

    .CE2(1’b1), // 1-bit clock enable input

    .CLK(data_clk_buf), //1-bit clock input

    .CLKDIV(clk_div), // 1-bit divided clock input

      .D(),            // 1-bit serial data input
    

    .DLYCE(1’b0), // 1-bit delay chain enable input

    .DLYINC(1’b0), // 1-bit delay increment/decrement input

    .DLYRST(1’b0), // 1-bit delay chain reset input

    .OCLK(1’b0), // 1-bit high-speed clock input

    .REV(1’b0), // Must be tied to logic zero

    .SHIFTIN1(shiftout1[i]), // 1-bit carry input

    .SHIFTIN2(shiftout2[i]), // 1-bit carry input

    .SR(~cfg_done_r) // 1-bit set/reset input

    );
    

    end

    endgenerate

    两块ISERDES进行级联时原语使用如上面代码。而ISERDES基元框图如下图所示:
    在这里插入图片描述

    ISERDES属性列表如下图
    在这里插入图片描述

    ISERDES各个端口如下表所示
    在这里插入图片描述

    在了解了这些基础的ISERDES结构和各个端口的含义后需要特别注意的就是ISERDES的时钟输入和输出处理。ADS6445的时钟输出分为帧时钟和数据时钟,输出时序如下图:

    在这里插入图片描述

    利用FPGA的差分IO作为时钟的输入端,这里利用输入的数据时钟通过IBUFDS把差分时钟转为单端时钟输出,然后利用缓冲BUFIO来对输入时钟进行一级缓冲,然后作为作为ISERDES的CLK时钟,由于ADS6445输出的帧时钟与数据时钟存在着相位差,因此利用数据时钟通过BUFR来4分频作为CLKDIV的时钟,CLK和CLKDIV的输入相位必须是严格对齐的,CLK和OCLK之间不要求相位关系。这样一片ADC的四路模拟信号的16个ISERDES模块就有了相同的时钟。

    在这里插入图片描述

    由于采用4路模拟信号同时进行采用,这里ISERDES并行使用种需要做到同步,数据同步调整是通过Bitslip位来进行的,若超过N次Bitslip依然同步失败,则表示数据异常。而Bitslip位同步是利用ADS6445输出的帧时钟来进行的。把帧时钟作为ISERDES的数据输入,通过判断输出是否为8’hf0来判断信号是否同步,如果同步置Bitslip位为0,如果不同步置Bitslip位1,若超过N次Bitslip依然同步失败,则表示数据异常。然后通过复位ADS6445芯片的时钟,重新配置芯片,然后继续配置同步,直至同步为止。

    展开全文
    qq_40052606 2020-08-20 10:10:47
  • 387KB weixin_38629391 2021-01-20 01:00:46
  • 1.16MB weixin_38682953 2021-07-07 03:36:25
  • 其中PMA子层包含高速串并转换(PISO)、预/后加重、接收均衡、时钟发生及时钟恢复等电路。PCS子层包含8B/10B编解码、缓冲区、通道绑定和时钟修正等电路。   GTX发送端处理流程 :首先用户逻辑数据经过8B/10B...

    目录

    本文主要对xilinx的GTX核的使用手册进行阅读,UG476,可以对照着原文再看我的博文。

    Ch1.Transceiver and Tool Overview

    Ch2.Shared Features

    2.1Reference Clock Input Structure

    2.2Reference Clock Selection and Distribution

    2.3Reset and Initialization

    2.3.1Reset Modes

    2.3.2CPLL Reset

    2.3.3QPLL Reset

    2.3.4TX Initialization and Reset

    2.3.5GTX/GTH Transceiver TX Reset in Response to Completion of Configuration

    2.3.6GTX/GTH Transceiver TX Reset in Response to GTTXRESET Pulse

    2.3.7GTX/GTH Transceiver TX Component Reset

    2.3.8RX Initialization and Reset

    2.3.9GTX/GTH Transceiver RX Reset in Response to Completion of Configuration

    2.3.10GTX/GTH Transceiver RX Reset in Response to GTRXRESET Pulse

    2.3.11GTH Transceiver RX PMA Reset

    2.3.12GTX/GTH Transceiver RX Component Resets

    2.4Power Down

    2.5Loopback

    2.6DRP:Dynamic Reconfiguration Port

    2.7Digital Monitor

    发射端:GTX高速收发器Transceiver之发射端Transmitter(UG476)


    Ch1.Transceiver and Tool Overview

    xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器,可以支持多种协议如PCI Express,SATA,JESD204B

    四种收发器主要区别是支持的线速率不同,图一可以说明在7系列里面器件类型和支持的收发器类型以及最大的收发器数量[1]。

    https://img-blog.csdn.net/20161017104313635?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    图1

    GTXE2_CHANNEL/GTHE2_CHANNEL代表一个GTX/GTH transceiver channel。

    GTXE2_COMMON/GTHE2_COMMON代表一个QPLL。

     

    a) Xilinx的7系列FPGA随着集成度的提高,其高速串行收发器不再独占一个单独的参考时钟,而是以Quad来对串行高速收发器进行分组;

    b)一个Quad包括四个GTX/GTH transceiver channel、一个QPLL组成,两个差分输入参考时钟接口;

    c)每一个串行高速收发器称为一个Channel,其主要由channel PLL 、TX和RX组成。

    以XC7K325T为例,GTX在FPGA内部如图二所示:

    https://img-blog.csdn.net/20161017104718169

    图2

    对于每一个Quad的结构图如图三:

    https://img-blog.csdn.net/20161017104806185

    图3

    对于每一个串行高速收发器,其包含了发送部分和接收部分,内部结构图4:

    图4

    发送端和接收端功能独立,均由PMA(Physical Media Attachment,物理媒介适配层)和PCS(Physical Coding Sublayer,物理编码子层)两个子层组成。

    其中PMA子层包含高速串并转换(PISO)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS子层包含8B/10B编解码、缓冲区、通道绑定和时钟修正等电路。

     

    GTX发送端处理流程:首先用户逻辑数据经过8B/10B编码后,进入一个发送缓存区Phase Adjust FIFO,该缓冲区主要是PMA子层和PCS子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速Serdes进行并串转换(PISO parallel-in serial-out),有必要的话,可以进行预加重、后加重(Pre/Post Emp)。值得一提的是,如果在PCB设计时不慎将TXP和TXN差分引脚交叉连接,则可以通过极性控制来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是RX接收端的弹性缓冲区(RX Elastic Buffer),其具有时钟纠正和通道绑定功能。

     

    Ch2.Shared Features

    2.1Reference Clock Input Structure

    2.2Reference Clock Selection and Distribution

    1.参考时钟整体架构

    每个Quad的时钟结构如图所示[1]:

    https://img-blog.csdn.net/20161017104806185

    红色方框表示两个外部差分参考时钟源。

    绿色方框是来自其他Quad的参考时钟输入,7系列FPGA支持使用相邻(南北方向)Quad的参考时钟作为当前Quad的参考时钟。

    多路参考时钟源经过一个选择器之后,分两路进入QPLL和CPLL,其中蓝色方框是QPLL,黄色方框是CPLL。

     

    CPLL与QPLL的区别

    对于每个GTX Channel来说,可以独立选择参考时钟,可以选择QPLL或者CPLL,区别在于两者支持的线速率不同,QPLL支持的线速率高于CPLL。 CPLL支持的线速率1.6GHz到3.3GHZ之间;QPLL来说,GTX支持的线速率分两档,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz,对于GTH则不分档位,支持的线速率为8.0GHz~13.1GHz。

    2.Quad或Channel时钟选择

    因为每一个Quad有两个外部参考时钟,因此对于每一个Quad来说,可以选择两个不同的参考时钟,每一个CHANNEL的接收端和发送端都可以独立选择参考时钟,如图所示:

    https://img-blog.csdn.net/20161017104937420

     

    如果用户需要使用其他Quad的参考时钟源来作为当前Quad的参考时钟,在满足下面三个条件的情况下可以使用:

            1.       只能使用当前Quad上方的Quad的参考时钟;

            2.       只能使用当前Quad下方的Quad的参考时钟;

            3.       一个Quad的参考时钟源不能驱动超过3个Quad的收发器(只能驱动当前Quad和上下方相邻两个Quad);

            满足上面的条件,就可以把其他Quad的参考时钟配置成当前Quad的参考时钟,如图九所示,注意图中红色方框表示相邻的Quad:

    https://img-blog.csdn.net/20161017104952128

     

    3.各参考时钟介绍

    (1)红色方框部分是两个差分参考时钟输入,每个外部参考时钟的输入必须经过IBUFDS_GTE2源语之后才能使用。IBUFDS_GTE2 软件原语对应外部输入参考时钟缓冲器,对输入参考时钟进行处理。

    原语使用例如:

      IBUFDS_GTE2  tx_ref_inst(

        .I       (tx_ref_clk_p),        //双极性输入

        .IB      (tx_ref_clk_n),

        .CEB    (1'b0),                   //1就关闭此缓冲器

        .ODIV2  (),                         //二分频输出

        .O      (tx_ref_clk)             //正常输出

     );

     

    (2)CPLL

    CPLL的输入参考时钟选择:

     

    CPLL内部框图:

     

     

    (3)QPLL

     

     

    对于CPLL和QPLL:

    手册还给出了多种协议下特定通道速率的参数设置。相关参数设置,端口描述与属性 就不写了。

    使用模式:可以动态改变的CPLL或者QPLL的配置,也可以动态的在CPLL和QPLL之间切换,具体怎么换手册给出了步骤(P54/P60)。

    2.3Reset and Initialization

    TX和RX初始化顺序:

    1.初始化PLL

    2.初始化数据路径PMA+PCS

    顺序框图:

     

    两种复位类型:

    1.初始化时的复位:设备上电时,复位以进行初始化

    2.模块复位,单独部分的复位

     

    复位信号都是高电平有效。

     

    2.3.1Reset Modes

    两种复位模式:

    1. Sequential mode:随着复位状态机顺序复位各个部分。

    RESETDONE上升沿标志复位完成。

    2. Single mode:仅复位单个部分。

    GTX/GTH收发信机初始化复位必须使用顺序模式。除TX复位外,所有组件复位均可在顺序模式或单模式下操作,TX复位只能在顺序模式下操作。

    2.3.2CPLL Reset

    CPLL在参考时钟有效前must be powered down using the CPLLPD port。然后对每个通道的CPLL复位。

    有三个接口控制,

     

    2.3.3QPLL Reset

    完全与CPLL相同。

    2.3.4TX Initialization and Reset

    分为TX PMA和TX PCS两个复位区域。TX初始化和复位只能在顺序模式下操作。

    使用复位状态机

    (图中,GTTXRESET High到WAIT Until GTTXRESET From High to Low 的意思就是要等待一个GTTXRESET脉冲电平就进入复位过程)

    2.3.5GTX/GTH Transceiver TX Reset in Response to Completion of Configuration

    进行TX复位前需要满足一定的条件,本节主要讲要满足条件中关于 配置的 部分。

    满足:

    1. GTRESETSEL must be Low to use sequential mode.
    2. GTTXRESET must be used.
    3. TXPMARESET and TXPCSRESET must be constantly driven Low during the entire
    reset process before TXRESETDONE is detected High.
    4. GTTXRESET cannot be driven Low until the associated PLL is locked.

     

    如果在配置时重置模式默认为顺序模式,那么在配置完成后等待至少500 ns后,才可以进行复位C/QPLLRESET和GTTXRESET。

     

     

    建议使用CPLL或QPLL中的PLLLOCK信号来释放GTTXRESET从高到低,已启动TX复位过程。如图2-16所示,需要注意的是,PCS的复位需要在TXUSERRDY为高电平的时候才能复位。

    TXUSERRDY为高电平要满足一定的条件:

    1. All clocks used by the application including TXUSRCLK/TXUSRCLK2 are shown as
    stable or locked when the PLL or MMCM is used.
    2. The user interface is ready to transmit data to the GTX/GTH transceiver.

    2.3.6GTX/GTH Transceiver TX Reset in Response to GTTXRESET Pulse

    进行TX复位前需要满足一定的条件,本节主要讲要满足条件中关于 GTTXRESET脉冲 部分。

    TXPMARESET_TIME和TXPCSRESET_TIME可以通过DRP端口静态设置或重新编程设置,在应用GTTXRESET之前调整所需的复位时间。

     

    使用GTTXRESET时必须满足以下条件:

    1. GTRESETSEL must be driven Low to use sequential mode.
    2. TXPMARESET and TXPCSRESET must be driven constantly Low during the entire
    reset process before TXRESETDONE is detected High.
    3. The associated PLL must indicate locked.
    4. The guideline for this asynchronous GTTXRESET pulse width is one period of the
    reference clock.

     

    2.3.7GTX/GTH Transceiver TX Component Reset

    TX PMA和TX PCS可以单独复位。在TXPMARESET或TXPCSRESET过程中,GTTXRESET必须在复位完成之前持续低电平。

    生成一个TXPMARESET脉冲以启动PMA复位,状态机在PMA复位后会接着复位PCS。

    生成一个TXPCSRESET脉冲以启动PCS复位。状态机只复位PCS。

     

    接着讲了GTTXRESET、TXPMARESET、TXPCSRESET都能复位哪些发射机组件:表2-26。

    表2-27讲了在一些情况下建议进行什么样的复位。

     

    2.3.8RX Initialization and Reset

    RX复位可以工作在2种模式。顺序与单模式。

    1.顺序模式

    与TX的情况相同,使用状态机,状态机可以从头触发,也可以从中间某一个状态触发。

    2.单模式

    RX的各个模块可以单独触发相应信号以单独复位。

     

    复位状态机(复位过程同样是需要有信号先变高在变低即产生一个脉冲来启动复位);单模式复位情况下,以下图红圈里的为例,产生一个RXPMARESET脉冲仅仅复位PMA,并不会复位后面的模块。

     

    2.3.9GTX/GTH Transceiver RX Reset in Response to Completion of Configuration

    和TX相同,都需要满足一些条件,然后进行整个RX复位过程

    It is recommended to use the associated PLLLOCK from either the CPLL or QPLL to release GTRXRESET from High to Low as shown in Figure 2-21.

    上图是GTX/GTH Receiver after FPGA Configuration,此外还描述了仅在GTH的收发器的情况,具体就不细说了。

     

    2.3.10GTX/GTH Transceiver RX Reset in Response to GTRXRESET Pulse

    和TX相同,在产生GTRXRESET脉冲前 都需要满足一些条件,在这里就不罗列了。

    这个异步GTRXRESET脉冲宽度的准则是参考时钟的一个周期。

    同上一小节一样,除了适用GTX/GTH的,还有只有在GTH的情况。

     

    2.3.11GTH Transceiver RX PMA Reset

    当用户希望进行RXPMARESET时,应该满足的条件(针对GTH)。

    2.3.12GTX/GTH Transceiver RX Component Resets

    内容安排与TX类似。

    表2-30和表2-31还总结了GTX/GTH收发器RX可用的所有复位以及顺序模式和单模式下受相应影响的组件。这些重置都是异步的。

    表2-32列出了在一些情况下建议进行什么样的复位。

    表我就不放了。

     

    2.4Power Down

     

    GTX/GTH收发机提供不同级别的功率控制。

    每个方向的每个通道都可以使用TXPD和RXPD分别关闭。

    CPLLPD端口直接影响CPLL,QPLLPD端口直接影响QPLL。

     

    表2-33定义了power-down ports.

    表2-34定义了power-down属性.设置power-down的时间等。

    PLL Power Down

    在初始配置和通电期间,CPLL在参考时钟有效之前必须使用CPLLPD端口断电。如果参考时钟停止,CPLL应该关闭电源。用CPLL时可以把QPLL Power Down,。用QPLL 时,在配置完成后至少500 ns后才能Power Down,然后等待参考时钟有效在开启QPLL。

     

    从Power Down状态恢复,意味着PLL LOCK高电平时,相应的PLL才有效。

     

    TX and RX Power Down

     

    当TX和RX功率控制信号在非PCI Express实现中使用时,TXPD和RXPD可以单独使用。同样,当这些接口在non中使用时PCI Express应用程序只支持两种电源状态,如表2-36所示。当使用这种断电机制时,确保如下:

    • TXPD[1] and TXPD[0] are connected together.
    • RXPD[1] and RXPD[0] are connected together.
    • TXDETECTRX must be strapped Low.
    • TXELECIDLE must be strapped to TXPD[1] and TXPD[0].

     

    2.5Loopback

    环回模式是收发器数据路径的特殊配置,数据流发出去又发回来。通常,传输特定的数据内容,然后进行比较以检查错误。图2-26演示了具有四种不同环回模式的环回测试配置。

    分为近端和远端,

    环回测试可以在开发过程中使用,也可以在部署的设备中用于故障隔离。所使用的流量模式可以是应用程序流量模式,也可以是专用的伪随机位序列。每个GTX/GTH收发器都有一个内置的PRBS生成器和检查器。

    并分别讲了四种模式需要注意的一些设置,

    Near-End PCS Loopback (path 1 in Figure 2-26)

    Near-End PMA Loopback (path 2 in Figure 2-26)

    Far-End PMA Loopback (path 3 in Figure 2-26)

    Far-End PCS Loopback (path 4 in Figure 2-26)

     

     

    2.6DRP:Dynamic Reconfiguration Port

    DRP动态重新配置端口是用来动态改变GTXE2_CHANNEL/GTHE2_CHANNEL

    和GTXE2_COMMON/ GTHE2_COMMON原语的。

    包括地址总线DRPADDR,有用于读取(DRPDO)和写(DRPDI)配置数据到原语的分离数据总线。

    表2-38显示了GTXE2_CHANNEL/GTHE2_CHANNEL的DRP相关端口。

    表2-39显示了GTXE2_COMMON/GTHE2_COMMON的DRP相关端口。和2-38基本一样。

     

    Usage Model

    分别给出了读操作写操作的时序。

     

    2.7Digital Monitor

    这部分是指RX的两种均衡器模式,LPM和DFE的观测

    Power-efficient adaptive linear equalizer mode called the low-power mode (LPM)

    低功耗自适应线性均衡器模式

    5-tap decision feedback equalization(DFE)

    5-tap决策反馈均衡器

     

    输出端口DMONITOROUT包含所选循环的当前代码。

    讲了相关的端口以及属性,以及如何捕获数字监视器输出数据DMONITOROUT,并对输出数据进行解释。

     

    参考文献:

    1. Xilinx-7Series-FPGA高速收发器使用学习—概述与参考时钟篇https://blog.csdn.net/ladywn/article/details/52836818
    2. UG476-Xilinx-7Series-FPGA高速收发器使用学习—TX发送端 https://blog.csdn.net/ningjinghai11/article/details/80677620
    3. Xilinx-7Series-FPGA高速收发器使用学习—TX发送端介绍https://blog.csdn.net/ladywn/article/details/52985461
    4. ug476_7Series_Transceivers.

     

    展开全文
    qq_34070723 2019-03-28 17:08:09
  • xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器,四种收发器主要区别是支持的线速率不同,图一可以说明在7系列里面器件类型和支持的收发器类型以及最大的收发器数量。

    xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器,四种收发器主要区别是支持的线速率不同,图一可以说明在7系列里面器件类型和支持的收发器类型以及最大的收发器数量。

     

    图一

            Xilinx的7系列FPGA随着集成度的提高,其高速串行收发器不再独占一个单独的参考时钟,而是以Quad来对串行高速收发器进行分组,四个串行高速收发器和一个COMMOM(QPLL)组成一个Quad,每一个串行高速收发器称为一个Channel,以XC7K325T为例,GTX在FPGA内部如图二所示:


    图二

              对于每一个串行高速收发器,其包含了发送部分和接收部分,内部结构图三:

    图三

            发送端和接收端功能独立,均由PMA(Physical Media Attachment,物理媒介适配层)和PCS(PhysicalCoding Sublayer,物理编码子层)两个子层组成。其中PMA子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS子层包含8B/10B编解码、缓冲区、通道绑定和时钟修正等电路。

    GTX发送端处理流程:首先用户逻辑数据经过8B/10B编码后,进入一个发送缓存区,该缓冲区主要是PMA子层和PCS子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速Serdes进行并串转换,有必要的话,可以进行预加重、后加重。值得一提的是,如果在PCB设计时不慎将TXP和TXN差分引脚交叉连接,则可以通过极性控制来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是RX接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。

    上面是GTX的性能和结构功能概述,下面详细分析GTX的时钟结构。

    以7系列的GTX来说,每个Quad有两个外部差分参考时钟源,其中一个Quad的时钟结构如图四所示:

    图四

            红色方框部分是两个差分参考时钟输入,每个外部参考时钟的输入必须经过IBUFDS_GTE2源语之后才能使用。绿色方框是来自其他Quad的参考时钟输入,7系列FPGA支持使用相邻(南北方向)Quad的参考时钟作为当前Quad的参考时钟,多路参考时钟源经过一个选择器之后,分两路进入QPLL和CPLL,如图五和图六,其中蓝色方框是QPLL,黄色方框是CPLL,对于一个GTX Channel来说,可以独立选择参考时钟,可以选择QPLL,也可以选择CPLL,QPLL和CPLL的区别在于两者支持的线速率不同,QPLL支持的线速率高于CPLL,图七是外部参考时钟模型的详细结构,红色箭头表示QPLL通路,黄色箭头表示CPLL通路。


    图五

    图六

    图七

            因为每一个Quad有两个外部参考时钟,因此对于每一个Quad来说,可以选择两个不同的参考时钟,每一个CHANNEL的接收端和发送端都可以独立选择参考时钟,如图八所示:

    图八

            如果用户需要使用其他Quad的参考时钟源来作为当前Quad的参考时钟,在满足下面三个条件的情况下可以使用:

            1.       只能使用当前Quad上方的Quad的参考时钟;

            2.       只能使用当前Quad下方的Quad的参考时钟;

            3.       一个Quad的参考时钟源不能驱动超过3个Quad的收发器(只能驱动当前Quad和上下方相邻两个Quad);

            满足上面的条件,就可以把其他Quad的参考时钟配置成当前Quad的参考时钟,如图九所示,注意图中红色方框表示相邻的Quad:

    图九

            QPLL和CPLL的区别,在于两者支持的线速率不同,对于CPLL来说,支持的线速率位1.6GHz到3.3GHZ之间,而对于QPLL来说,GTX支持的线速率分两档,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz,对于GTH则不分档位,支持的线速率为8.0GHz~13.1GHz。

    展开全文
    ladywn 2016-10-17 10:43:14
  • 本来写了一篇关于高速收发器的初步调试方案的介绍,给出一些遇到问题时初步的调试建议。但是发现其中涉及到很多概念。逐一解释会导致文章过于冗长。所以单独写一篇基本概念的介绍,基于Xilinx 7系列的GTX。 需要...

     

    本来写了一篇关于高速收发器的初步调试方案的介绍,给出一些遇到问题时初步的调试建议。但是发现其中涉及到很多概念。逐一解释会导致文章过于冗长。所以单独写一篇基本概念的介绍,基于Xilinx 7系列的GTX。

    需要说明,文本只是初步介绍基本概念,会尽量使用通俗浅显的描述而避免使用专业词汇,也只会描述一些基本的、常用的内容,不能保证全面型。所以从专业角度看,可能部分用词和原厂文档有出入,同时覆盖面不够,请见谅。

    GTP、GTX、GTH和GTZ:

    这四个是Xilinx 7系列FPGA全系所支持的GT,GT的意思是Gigabyte Transceiver,G比特收发器。通常称呼为Serdes、高速收发器,GT,或者用具体型号(例如GTX)来称呼。

    7系列中,按支持的最高线速率排序,GTP是最低的,GTZ是最高的。GTP被用于A7系列,GTZ被用于少数V7系列。从K7到V7,最常见的是GTX和GTH。GTH的最高线速率比GTX稍微高一点点。

    GTX和GTH的文档都是UG476。从这里就能看出来,这两个GT的基本结构大同小异。所以掌握一个,另一个基本也就熟悉了。

    UG476文档链接:http://link.zhihu.com/?target=https%3A//www.xilinx.com/support/documenta...

    TX和RX:

    严格说TX应该是Transmitter,表示发送部分。GTX的TX部分结构图如下:

    图片来自UG476

    RX的全称是Receiver,结构图如下

    图片来自UG476

    图片来自UG476

    后面的内容会用到这两张图,可以翻看一下。

    PMA,PCS

    从TX和RX的结构图可以看到一个共同点:结构图主体分为两个部分,左边一个小框图,右边一个大框图。

    左边小框图的部分就是PMA,右边大框图的部分是PCS。

    为了便于理解,PMA的功能可以简单描述为:

    1.串并转换(图中的SIPO和PISO);

    2.模拟部分;

    由此可以反推出来,PCS中的功能,都是并行的数字电路处理。

    理论上说GTX的最小必要单元就是PMA,其主要原因就是核心的模拟部分。而PCS理论上可以全部由FPGA普通逻辑来实现。当然作为硬核提供的PCS功能更多、性能更好、使用更方便。

    Elastic Buffer

    一般称为弹性buffer,基本结构是一个FIFO,常用于处理buffer两边的跨时钟问题。不过其实有更多的用途,比如Clock Correction或者Channel Bonding。

    另外还有一种不用Elastic Buffer的模式,一般称为buffer bypass模式,算是一种高级应用。有兴趣的童鞋可以参考文档研究一下。

    8b10b

    通常说8b10b是一个编码方式。在这里还指GTX PCS中的一个模块。

    作为编码,8b10b有平衡电平,防止连续1/0的功能。编码分为正负码和特殊K码。最常用的K码应该是k28.5。8b10b最大的优势在于自带错误检测。当出现8b10b错误的时候,大概率是链路质量有问题。8b10b最大的劣势是效率比较低,有20%的额外开销,所以常用于低于8G的场景,最常见的、使用8b10b、同时又高于8G线速率的似乎是CPRI Rate7,线速率9.8G左右。

    作为GTX的一个模块,发送端提供了方便使用的编码接口,接收端提供了方便使用的输出指示,直接使用即可。

    另外,GTX还提供了Gearbox。除了8b10b之外,还有其他很多编码方式,比如64b66b,Gearbox就是为这一类编码做准备的。

    PRBS

    PRBS是伪随机序列码,GTX自带了PRBS的生成器(在TX内部)和PRBS接收/检查模块(在RX内部)。ibert中的误码率检查就是基于内置的PRBS模块。

    从结构图可以看到,PRBS和8b10b没有项目连接的直接关系,所以ibert的测试中没有使用8b10b编码(也没有使用其他编码)。同时内部的PRBS也不支持使用其他编码。所以如果想在GTX外部使用PRBS信号源,可以另外单独做PRBS的生成器和校验模块。Xilinx似乎是有相关参考设计的。

    ibert

    ibert是Xilinx提供的一个用于GT辅助调试的IP。

    首先明确一下,这是一个IP。所以ibert有两种用法:

    1.直接使用example design进行独立使用;

    2.集成到某个工程中进行使用;

    ibert最常用的两个用途是:

    1.基于PRBS模块的误码率检查;

    2.基于眼图扫描模块的测量近端眼图;

    另外,ibert中可以方便的设置GTX的所有参数。是个不错的参数测试平台。

    通常可以尝试几个参数的调整来查看对GTX的误码率/眼图是否有帮助,这几个参数是TX部分的预加重。而接收端的设置是均衡模式,由于均衡的原理较为复杂,而且多为自动调整,所以不会有简单的几个参数就能看出变化。

    GTX的分布

    7系列FPGA通常按照bank来分,对于GTX的bank,一般称为一个Quad,原因是一个bank中有4个独立的GTX通道。每个通道称呼为Channel。所以在GTX的代码中可以看到Channel这个底层原语。

    每个Quad拥有两个参考时钟Pin,也可以从上下两个Quad中获取参考时钟(如果上下有GTX Quad的话)。

    QPLL和CPLL

    已经知道四个GTX为一组,称呼为Quad,每个GTX称呼为Channel,就很容易理解QPLL和CPLL了。QPLL是一个Quad共用的PLL,GTX一个Quad只有一个QPLL。CPLL是每个Channel独有的PLL。

    从底层角度看,由于CPLL是每个Channel独有的,所以CPLL的所有接口都在Channel这个底层模块中。而QPLL是另外使用了一个叫common的底层模块。

    GTX中QPLL和CPLL,除了数目(一个Quad一个QPLL四个CPLL)和归属(QPLL属于common,CPLL属于Channel)不同之外,最大的不同在于支持的最高线速率频率不同。CPLL最高只有6.xG,而QPLL可以超过10G(具体数值要根据器件的速度等级来查询DataSheet)。

    即使QPLL工作在很高的线速率下,Channel也可以工作在较低的线速率下。具体的实现方案就是1.使用Channel自带的CPLL而不用QPLL;2.Channel可以将QPLL的速率按2的倍数进行降低;这样同一个参考时钟下,一个Quad的不同GTX有机会跑在不同的线速率下。当然这一需求需要更多的操作,IP本身无法实现。

    Clock Correction

    这个功能必须使用Elastic Buffer。

    原理是指定一个关键字段(类似于k28.5的二进制数),发送端定期发送这个关键字段,接收端收到这个关键字段时,会检查这个字段在FIFO中的位置,并通过插入 无效数据/删除数据 的方法来调整,使这个字段尽可能保持在FIFO的中心部分,防止FIFO溢出。

    这个功能的作用是来解决不同时钟会导致FIFO溢出的问题。

    Channel Bonding

    这个功能必须使用Elastic Buffer。

    原理是指定一个关键字段(类似于k28.5的数字)。当多个GTX都收到这一字段时,会按照配置进行相互校准,来保证并行数据同步输出。

    这个功能的作用是在多个GTX之间进行同步化处理。

    GTX IP及Example Design

    GTX的IP是7 Series FPGAs Transceivers Wizard。是一个 非常有用的工具。

    关于具体的配置,需要依据具体应用来设置。这里主要说两点

    1.Protocol

    图片来自GT IP GUI

    在IP配置界面的第二个标签页下有一个Protocol的选项,通常默认是Start from scratch,代表没有任何预设值。当熟悉GTX并熟悉应用的需求后,可以用这个设置进行逐项调整。其他选择都多少加入了一些预设值。在不熟悉GTX或者应用需求时,可以先使用预设配置进行学习/测试。

    2.Shared Logic

    单独的GTX通常是无法直接工作的,而最主要的原因就是GTX的复位流程。GTX有严格的复位流程。如果自行设计,费时费力。万幸,Xilinx提供了参考设计——Shared Logic。

    通常使用Example Design来作为最终系统集成的GTX IP。这样做的原因就是包含了需要的复位控制等辅助设计,并且接口变得更加简单易用。默认这部分是包含在Example Design中,而IP可以选择将这部分重新打包,放入IP Core中。这样最终的IP不仅仅有GTX的硬核,也有大量Shared Logic这样用普通可编程逻辑实现的功能模块。

    图片来自GT IP GUI

    配置好GTX IP之后,另一个非常有用的功能就是Example Design。Vivado的一个优点就是几乎所有的IP都可以非常便捷的生成独立完整的Example Design(比如需要独立使用ibert的时候)。

    GTX IP是提供源代码的,最底层就是GTX的Channel和common模块。用户可以通过代码来查看相关的参数值和端口连接。

    GTX的DRP端口

    通常一个内部模块要进行重配置,使用的是两种做法:端口控制和配置参数控制。

    端口控制就是提供一个控制端口作为开关。比如BRAM端口中的EN和WE,提供高低电平就可以进行功能的改变(EN控制是否使用,WE控制读写)。

    配置参数控制,就是有一个配置参数表,每一个参数拥有一个唯一地址和对应的数据内容。通过改写对应地址的数据内容来进行功能的改变。

    GTX同时使用了这两种方式。所以GTX Channel和Common不仅有大量的端口(当然大部分端口都是功能端口而不是仅仅作为配置功能),还拥有一张地址表(参考UG476的附录)。通过DRP端口可以读写地址表中的相关地址,达到获取数据/改变配置的功能。

    一个常见的应用就是线速率切换。这时候就需要利用DRP端口来调整部分参数的值,然后复位GTX,来使GTX工作在不同的线速率下。

    另一个用到DRP的应用就是眼图扫描。希望扫描出GTX的眼图,除了使用ibert,还可以在设计中加入眼图扫描模块来进行实时扫描,这时候就需要使用DRP端口。

    使用DRP端口的时候,有一个地方需要注意,就是DRP端口的时序。UG476似乎没有提供接口时序。这部分请参考XADC的文档手册——UG480。

    图片来自UG480

    环回

    图片来自UG476,左边为接收端,右边为发送端

    GTX提供了四种环回模式,结合上图可以看到,环回路径分别是1、2、3、4。

    1,2是近端环回,用于测试GTX本身。3,4是远端环回,用于辅助测试对端GTX。

    具体的细节请参考UG476。这里需要说明的是,用的比较多的是2,近端PMA环回;用的最少的大概是1,近端PCS环回,基本没有什么实际作用(可以想想为什么)。远端环回需要修改部分参数才能使用,具体参考文档。

    关于GTX的一些基础概念就介绍完毕,更多细节,还请参考UG476文档。

     

    文章转载自: https://zhuanlan.zhihu.com/p/46052855

    展开全文
    woshiyuzhoushizhe 2019-04-21 21:07:05
  • weixin_33955681 2018-10-08 14:12:00
  • qq_40147893 2020-10-30 16:04:00
  • ladywn 2016-10-31 19:38:38
  • Rosa_zz 2019-12-19 14:38:42
  • hhpingyear 2018-09-08 10:53:49
  • weixin_34324081 2017-12-31 19:47:00
  • weiweiliulu 2019-07-02 15:57:22
  • gslscyx 2020-06-01 21:09:48
  • dadaozhijian22 2019-11-21 14:14:56
  • gslscyx 2020-05-25 21:48:10
  • 1.37MB weixin_38670391 2021-01-26 21:12:08
  • jasonwoodlee 2011-08-17 00:43:01
  • Times_poem 2018-08-01 10:34:57

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 730
精华内容 292
关键字:

串并转换收发器