隆太威电子网欢迎您!
新闻资讯

基于XILINX Vivado平台的GTX收发器的开发

作者:    发布时间:2026-03-11 17:01:25    浏览量:

1. GTX IP核的创建

此选项根据你所用的FPGA型号确定GT类型,我所用的是7k325t系列,故GT类型为GTX

9c4c3b4e-147c-11f1-90a1-92fbcf53809c.png

接下来,开始配置IP

9caca22c-147c-11f1-90a1-92fbcf53809c.png

首先,这里的时钟频率是连接FPGA高速bank上的差分时钟,根据自己项目实际需求进行配置即可

再者,强调一下,因为我的项目中对应的是光纤收发,线速率根据实际光口的不同进行适配选择即可!

还有,估计有和我当时一样的初学者看本篇文章,所以我就本着我当时初学时复杂且全是问号?的心情补充一下。开始废话(高手跳过):我这里是两个高速收发器,亦就是两路光纤收发,怎么来的呢,当然是选的,怎么选的呢,好问题,用你的鼠标选中左侧灰色的收发器框图,然后点击选择我用小红框标记的选项“Use GTX X0Y6”,然后框图从灰色变成黄色了,这个时候神奇的事情就发生了,艾~突然就又增加了一个,聪明的你就以此类推了,哈哈哈哈,这个框图你得对照你项目中实际原理图看仔细,你用的高速收发器是在哪个FPGAbank上的哪个坐标就行,不过也没关系,就算这里你选错了,到时候你约束引脚约束对了就可以了,不影响的。

好了,接着选

这里就开始配置收发器了,外部数据宽度,也就是咱们逻辑里面最终要用到的数据位宽,这里我用的是32位,根据你项目需求用就行了,就算其他位宽的,你用异步fifo转不就行了,这能难倒咱们逻辑工程师吗?开玩笑呢!好,编码一般8B/10B,内部数据位宽就得注意了,这个地方还与最终咱们使用的userclk有关,在ug476手册里面第100页有具体讲解(广子:上xianyu搜麻酱就烧饼,获取xilinx全系列文档手册),可以自己查查,我就简单赘述两句: TXUSRCLK Rate=Line Rate/Internal Datapath Width,如果这里你的内部位宽是20的时候,你最终的TXUSERCLK2=TXUSERCLK/2,具体细节深耕数据手册!

然后就是本页其他配置都是默认的,不用管(如果有特殊需求除外)

9d17888a-147c-11f1-90a1-92fbcf53809c.png9d7f34d0-147c-11f1-90a1-92fbcf53809c.png

接着选,Comma Value我用的K28.5(BC码),具体看我源码中如何使用,其他配置默认!

9dde60cc-147c-11f1-90a1-92fbcf53809c.png9e4a5bf6-147c-11f1-90a1-92fbcf53809c.png

接着来,不用管,继续默认

9eb00104-147c-11f1-90a1-92fbcf53809c.png9f0b05ea-147c-11f1-90a1-92fbcf53809c.png

继续来,勾选USE CLOCK CORRECTION,其余默认

9f6f12ec-147c-11f1-90a1-92fbcf53809c.png

最后检查所配置结束的IP参数,强调:最后我们在逻辑里面发送用的时钟域是TXUSRCLK2,以此类推,接收用RXUSRCLK2!!!

9fddc75a-147c-11f1-90a1-92fbcf53809c.png

2. 搭建工程且编码

好了,咱们开始爆改啊啊啊啊啊啊啊!

生成例程,完了只需修改例程顶层模块gtx_aurora_x2_exdes.v文件即可

a0411738-147c-11f1-90a1-92fbcf53809c.png

工程结构:

我在编码模块中用到了状态机,而在解码模块中没有用到,原则是:怎么简明怎么来

a09d0fde-147c-11f1-90a1-92fbcf53809c.png

顶层:

描述:顶层当中的sys_on_sim在实际使用时换成sys_on即可!

`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////////Company: //Engineer: FPGA NXH////Create Date: 2025/06/09 10:56:46//Design Name: //Module Name: SFP_TR//Project Name: //Target Devices: //Tool Versions: //Description: ////Dependencies: ////Revision://Revision 0.01 - File Created//Additional Comments:////////////////////////////////////////////////////////////////////////////////////module SFP_TR(   input          CLK_i,   input          SFP_CLK_IN_P,   input          SFP_CLK_IN_N,   input  [1:0]      SFP_2X_IN_P,   input  [1:0]      SFP_2X_IN_N,   output [1:0]      SFP_2X_OUT_P,   output [1:0]      SFP_2X_OUT_N,   output [3:0]      state_led );  //---------------clkand reset-----------------  wire          sys_clk;   wire          sys_rstn;  //---------------userrx-----------------------  wire          user_rx0_clk;   wire  [31:0]     user_rx0_data;   wire  [3:0]      user_rx0_kdata;   wire          user_rx0_link;   wire          user_rx1_clk;   wire  [31:0]     user_rx1_data;   wire  [3:0]      user_rx1_kdata;   wire          user_rx1_link;   wire  [31:0]     rX0_data;   wire          rX0_data_vld;   wire  [31:0]     rX1_data;   wire          rX1_data_vld;  //---------------usertx-----------------------  wire          user_tx0_clk;   wire  [31:0]     tx0_data;   wire  [3:0]      tx0_kdata;   wire          user_tx0_link;   wire          user_tx1_clk;   wire  [31:0]     tx1_data;   wire  [3:0]      tx1_kdata;   wire          user_tx1_link;  //---------------vio-------------------------------  wire          sys_on_sim;   wire          soft_vld;   wire          soft_rst_tx_vio;   wire          soft_rst_rx_vio;   wire  [2:0]      gt_loopback_vio;   wire          soft_rst_tx_vio_r;   wire          soft_rst_rx_vio_r;   wire  [2:0]      gt_loopback_vio_r;     vio_1 INST_gt_soft(     .clk        (sys_clk      ),        //input wire clk    .probe_out0(soft_vld      ), //output wire [0 : 0] probe_out0    .probe_out1(soft_rst_tx_vio_r ), //output wire [0 : 0] probe_out1    .probe_out2(soft_rst_rx_vio_r ), //output wire [0 : 0] probe_out2    .probe_out3(gt_loopback_vio_r ), //output wire [2 : 0] probe_out3    .probe_out4(sys_on_sim     )//output wire [0 : 0] probe_out4   );   assign soft_rst_tx_vio = soft_vld ? soft_rst_tx_vio_r : 'h0;   assign soft_rst_rx_vio = soft_vld ? soft_rst_rx_vio_r : 'h0;   assign gt_loopback_vio = soft_vld ? gt_loopback_vio_r : 'h0;  //-------------------sys_on-----------------------------  wire          sys_on;   reg  [4:0]      user_tx0_link_r='h0;   reg  [4:0]      user_tx1_link_r='h0;   always @(posedge user_tx0_clk)user_tx0_link_r <= {user_tx0_link_r[3:0], user_tx0_link};     always @ (posedge user_tx1_clk) user_tx1_link_r <= {user_tx1_link_r[3:0], user_tx1_link};      assign  sys_on = (user_tx0_link_r[4] && user_tx1_link_r[4]) ? 'h1 : 'h0;    //-------------------CLK--------------------------------     clk_wiz_0 INST_clk_wiz_0(         // Clock out ports         .clk_out1                       (sys_clk),     // output clk_out1        // Status and control signals        .reset(1'b0),        // input reset        .locked(sys_rstn),    // output locked        // Clock in ports                    .clk_in1(CLK_i)// input clk_in1     );      //-----------------USER RX------------------------------     user_gtx_rx #(         .DATA_WIDTH    (32),        .KCHAR_WIDTH(4)     )      INST_user_gtx_rx (         .clk                            (sys_clk),        .rstn(sys_rstn),        .rx0_clk(user_rx0_clk),        .rx0_link(user_rx0_link),        .rx0_data(user_rx0_data),        .rx0_kdata(user_rx0_kdata),        .rx1_clk(user_rx1_clk),        .rx1_link(user_rx1_link),        .rx1_data(user_rx1_data),        .rx1_kdata(user_rx1_kdata),        .user_rx0_data(rx0_data),        .user_rx0_data_vld(rx0_data_vld),        .user_rx1_data(rx1_data),        .user_rx1_data_vld(rx1_data_vld)     );    //-----------------USER TX------------------------------     user_gtx_tx #(         .DATA_WIDTH    (32),        .KCHAR_WIDTH(4)     )     INST_user_gtx_tx(         .clk                            (sys_clk),        .rstn(sys_rstn),        .sys_on(sys_on_sim),        .tx0_clk(user_tx0_clk),        .tx0_link(user_tx0_link),        .tx0_data(tx0_data),        .tx0_kdata(tx0_kdata),        .tx1_clk(user_tx1_clk),        .tx1_link(user_tx1_link),        .tx1_data(tx1_data),        .tx1_kdata(tx1_kdata)     );    //-----------------GTX-----------------------------------     gtx_aurora_x2_exdes INST_gtx_aurora_x2_exdes(         .Q1_CLK1_GTREFCLK_PAD_N_IN      (SFP_CLK_IN_N),        .Q1_CLK1_GTREFCLK_PAD_P_IN(SFP_CLK_IN_P),        .DRP_CLK_IN(sys_clk),        .RXN_IN(SFP_2X_IN_N),        .RXP_IN(SFP_2X_IN_P),        .TXN_OUT(SFP_2X_OUT_N),        .TXP_OUT(SFP_2X_OUT_P),        //-------------user interface-------------------------.soft_rst_tx(soft_rst_tx_vio),        .soft_rst_rx(soft_rst_rx_vio),        .gt_loopback(gt_loopback_vio_r),        .user_rx0_clk(user_rx0_clk),        .user_rx0_data(user_rx0_data),        .user_rx0_kdata(user_rx0_kdata),        .user_rx0_link(user_rx0_link),        .user_rx1_clk(user_rx1_clk),        .user_rx1_data(user_rx1_data),        .user_rx1_kdata(user_rx1_kdata),        .user_rx1_link(user_rx1_link),        .user_tx0_clk(user_tx0_clk),        .user_tx0_data(tx0_data),        .user_tx0_kdata(tx0_kdata),        .user_tx0_link(user_tx0_link),        .user_tx1_clk(user_tx1_clk),        .user_tx1_data(tx1_data),        .user_tx1_kdata(tx1_kdata),        .user_tx1_link(user_tx1_link)     );    //-----------------PORT-----------------------------------     assign  state_led = {user_tx0_link, user_tx1_link, user_rx0_link, user_rx1_link};    //-----------------DEBUG-----------------------------------endmodule

打包编码:

编码选用8b/10b,comma值用k28.5(BC码),有同学就好奇,k28.5为啥就是BC码,好吧,我当时也不懂艾,好在去取经了,现在就给你道来:0XBC=0B1011 1100,好,重点来了,0D28=0B11100,0D5=0B101,聪明的你已经发现了,BC=5和28相结合,K28.5分别把28和5换成二进制,然后放一起,再重新组合,低三位101放前面,高五位放后面,那不就成8‘b10111100即8’hBC了吗,以此类推,其他的k码怎么算你就知道了。关于k码换算,你得去看文章,我这里只是让你简单了解一下,别迷糊了,BC是怎么来的不知道!!!

我的编码顺序:

1.等待有效数据的到来,这个过程一直向链路发送空闲码,训练链路

2.等有效数据来了发送帧头,进行编码

3.开始发送有效数据(此项目我发送的是顺序数据,但是我在代码中预留了关键握手信号vld和rdy,有需要的同学后期自己在我的代码上面改就行了)

4.有效数据发送完成,进行编码

5.发送帧尾进行编码

6.接着发送空闲码进行编码

`timescale1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer: FPGA NXH//// Create Date: 2025/06/09 1110// Design Name:// Module Name: user_gtx_tx// Project Name:// Target Devices:// Tool Versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////////moduleuser_gtx_tx#   (  parameter DATA_WIDTH  =32,  parameter KCHAR_WIDTH  =4  ) (  input               clk,  input               rstn,  input               sys_on,  input               tx0_clk,  input               tx0_link,  output [DATA_WIDTH-1:0]      tx0_data,  output [KCHAR_WIDTH-1:0]      tx0_kdata,  input               tx1_clk,  input               tx1_link,  output [DATA_WIDTH-1:0]      tx1_data,  output [KCHAR_WIDTH-1:0]      tx1_kdata );  //------------parameter------------------------------localparamK_CHAR_VLD  =4'h0001;  localparamK_CHAR_NVLD =4'h0000;  localparamFRAM_IDLE  =32'h55_AA_00_BC;//空闲码localparamFRAM_SOF   =32'h55_AA_FF_BC;//帧头localparamFRAM_COM   =32'h55_AA_DD_BC;//有效数据发送完毕localparamFRAM_EOF   =32'h55_AA_EE_BC;//帧尾//------------register-------------------------------reg  [DATA_WIDTH-1:0]      cnt_data;  reg  [DATA_WIDTH-1:0]      cnt_data_r=16'h0;  reg                cnt_data_vld;  //-----------------预留------------------------------wire                rx_data_rdy;  reg                tx0_data_r_vld;  //---------------------------------------------------reg  [DATA_WIDTH-1:0]      tx0_data_r;  reg  [DATA_WIDTH-1:0]      tx1_data_r;  reg  [KCHAR_WIDTH-1:0]      tx0_kdata_r;  reg  [KCHAR_WIDTH-1:0]      tx1_kdata_r;  reg  [3:0]            tx0_link_r;  reg  [3:0]            tx1_link_r;    //------------status----------------------------------reg  [3:0]            state_cur;  reg  [3:0]            state_next;  //------------------link_r-----------------------------always@ (posedgetx0_clk) tx0_link_r <= {tx0_link_r[2:0], tx0_link};    always @ (posedge tx1_clk) tx1_link_r <= {tx1_link_r[2:0], tx1_link};    //---------------------预留-----------------------------assign  rx_data_rdy = (state_cur == 'h1|| state_cur == 'h2) ? 1'h1 : 1'h0;    //------------------------------------------------------always @ (posedge tx0_clk) beginif (!tx0_link_r[3]) begin             cnt_data        <= 'h0;             cnt_data_vld    <= 'h0;        endelseif ((state_cur == 'h1|| state_cur == 'h2) && state_next != 'h3 && cnt_data <= 32'h0000_00FF) begin             cnt_data        <= cnt_data + 'h1;             cnt_data_vld    <= 'h1;        endelsebegin             cnt_data        <= 'h0;             cnt_data_vld    <= 'h0;        endendalways @ (posedge tx0_clk) cnt_data_r <= cnt_data;    //------------------status------------------------------always @ (posedge tx0_clk) beginif (!tx0_link_r[3])             state_cur <= 'h0;          else             state_cur <= state_next;      endalways @ (*) begin         state_next = state_cur;        case (state_cur)          'h0 :   beginif (sys_on)                if (tx0_link_r[3])                     state_next = 'h1;                else                     state_next = 'h0;            else                  state_next = 'h0;        end'h1 :   state_next = 'h2;        'h2 :   beginif (cnt_data_vld) begin                 state_next = 'h2;            endelsebegin                 state_next = 'h3;            endend'h3 :   state_next = 'h4;        'h4 :   state_next = 'h0;        default :   state_next = 'h4;        endcaseendalways @ (posedge tx0_clk) beginif (!tx0_link_r[3]) begin             tx0_data_r  <= 'h0;             tx0_kdata_r <= 'h0;        endelsebegincase (state_cur)                'h0 :   begin                     tx0_data_r  <= FRAM_IDLE;           //发送空闲码                     tx0_kdata_r <= 4'b0001;                  end'h1 :   begin                        tx0_data_r  <= FRAM_SOF;            //发送帧头                     tx0_kdata_r <= K_CHAR_VLD;                  end'h2 :   beginif (cnt_data_vld) begin//发送有效数据包                         tx0_data_r  <= cnt_data_r;                         tx0_kdata_r <= K_CHAR_NVLD;                    endelsebegin                         tx0_data_r  <= FRAM_COM;        //有效数据包发送完毕                         tx0_kdata_r <= K_CHAR_VLD;                    endend'h3 :   begin                     tx0_data_r  <= FRAM_EOF;            //发送帧尾                     tx0_kdata_r <= K_CHAR_VLD;                end'h4 :   begin//发送空闲码                     tx0_data_r  <= FRAM_IDLE;                     tx0_kdata_r <= K_CHAR_VLD;                enddefault :   ;            endcaseendend//------------------预留-------------------------------always @ (posedge tx0_clk) beginif (!tx0_link_r[3])             tx0_data_r_vld <= 'h0;        elseif (state_cur == 'h2 && cnt_data_vld) //这个地方的cnt_data_vld最后可以换成实际的data_vld即可             tx0_data_r_vld <= 'h1;        else             tx0_data_r_vld <= 'h0;    end//------------------output port------------------------assign  tx0_data    = tx0_data_r;    assign  tx0_kdata   = tx0_kdata_r;    assign  tx1_data    = tx1_link_r[3] ? tx0_data_r : 'h0;    assign  tx1_kdata   = tx1_link_r[3] ? tx0_kdata_r : 'h0;    //----------------------DEBUG-----------------------     ila_0 ILA_user_tx (        .clk        (tx0_clk), // input wire clk.probe0     ({                    'h0,                     sys_on,                     sys_on_r,                     cnt_data[31:0],   //32                     cnt_data_r,                     cnt_data_vld,                     tx0_data_r_vld,                     state_cur,  //4                     state_next, //4                     tx0_link_r, //4                     tx1_link_r, //4                     tx0_data_r, //32                     tx0_kdata_r //32          }) // input wire [255:0] probe0     );endmodule

解包解码:

心善的我再提示一下:解码出来的时钟域最后你得换成你自己的系统时钟域,不太明白的同学就又问了,怎么换时钟域啊啊啊啊啊,还能怎么换,异步fifo,用爆FPGA芯片资源,用就行了。此项目我没转换红红火火恍恍惚惚

解码思路:

根据自己定制的编码协议进行解码

1.先解数据帧头

2.得到有效数据

`timescale1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer: FPGA NXH//// Create Date: 2025/06/09 1147// Design Name:// Module Name: user_gtx_rx// Project Name:// Target Devices:// Tool Versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////////moduleuser_gtx_rx #   (  parameter DATA_WIDTH  =32,  parameter KCHAR_WIDTH  =4  ) (  input           clk,  input           rstn,  input           rx0_clk,  input           rx0_link,  input [DATA_WIDTH-1:0]  rx0_data,  input [KCHAR_WIDTH-1:0]  rx0_kdata,  input           rx1_clk,  input           rx1_link,  input [DATA_WIDTH-1:0]  rx1_data,  input [KCHAR_WIDTH-1:0]  rx1_kdata,  output [DATA_WIDTH-1:0]  user_rx0_data,  output           user_rx0_data_vld,  output [DATA_WIDTH-1:0]  user_rx1_data,  output           user_rx1_data_vld   );  //------------paramerter-----------------------------localparamFRAM_SOF   =32'h55_AA_FF_BC;//帧头localparamFRAM_EOF   =32'h55_AA_EE_BC;//帧尾//------------register-------------------------------reg  [DATA_WIDTH-1:0]      rx0_data_r =0;  reg  [DATA_WIDTH-1:0]      rx1_data_r =0;  reg  [DATA_WIDTH-1:0]      rx0_data_1r=0;  reg  [DATA_WIDTH-1:0]      rx1_data_1r=0;  reg  [DATA_WIDTH-1:0]      rx0_data_2r=0;  reg  [DATA_WIDTH-1:0]      rx1_data_2r=0;  reg  [KCHAR_WIDTH-1:0]      rx0_kdata_r ='h0;  reg  [KCHAR_WIDTH-1:0]      rx1_kdata_r ='h0;  reg  [KCHAR_WIDTH-1:0]      rx0_kdata_1r='h0;  reg  [KCHAR_WIDTH-1:0]      rx1_kdata_1r='h0;  reg  [KCHAR_WIDTH-1:0]      rx0_kdata_2r='h0;  reg  [KCHAR_WIDTH-1:0]      rx1_kdata_2r='h0;  reg  [3:0]            rx0_link_r;  reg  [3:0]            rx1_link_r;  reg  [DATA_WIDTH-1:0]      user_data;  reg                user_data_vld;  reg                sof_vld;  reg                eof_vld;  reg                frame_vld;  reg  [2:0]            state_cur;  reg  [2:0]            state_next;  //------------------link_r buffer---------------------------always@ (posedgerx0_clk) rx0_link_r <= {rx0_link_r[2:0], rx0_link};    always @ (posedge rx1_clk) rx1_link_r <= {rx1_link_r[2:0], rx1_link};    //------------------data buffer-----------------------------always @ (posedge rx0_clk) begin         rx0_data_r   <=  rx0_data;         rx0_data_1r  <=  rx0_data_r;         rx0_data_2r  <=  rx0_data_1r;          rx1_data_r   <=  rx1_data;         rx1_data_1r  <=  rx1_data_r;         rx1_data_2r  <=  rx1_data_1r;    endalways @ (posedge rx0_clk) begin         rx0_kdata_r  <=  rx0_kdata;         rx0_kdata_1r <=  rx0_kdata_r;         rx0_kdata_2r <=  rx0_kdata_1r;          rx1_kdata_r  <=  rx1_kdata;         rx1_kdata_1r <=  rx1_kdata_r;         rx1_kdata_2r <=  rx1_kdata_1r;    endalways @ (posedge rx0_clk) beginif (!rx0_link_r[3]) begin             sof_vld <= 'h0;        endelseif (rx0_data_r==FRAM_SOF && rx0_kdata_r=='h1) begin             sof_vld <= 'h1;        endelsebegin             sof_vld <= 'h0;        endendalways @ (posedge rx0_clk) beginif (!rx0_link_r[3]) begin             eof_vld <= 'h0;        endelseif (rx0_data_r==FRAM_EOF && rx0_kdata_r=='h1) begin             eof_vld <= 'h1;        endelsebegin             eof_vld <= 'h0;        endendalways @ (posedge rx0_clk) beginif (!rx0_link_r[3]) begin             frame_vld <= 'h0;        endelseif (sof_vld || eof_vld) begin             frame_vld <= 'h0;        endelsebegin             frame_vld <= 'h1;        endendalways @ (posedge rx0_clk) beginif (!rx0_link_r[3]) begin             user_data       <= 'h0;             user_data_vld   <= 'h0;        endelseif (rx0_kdata_2r=='h0 && frame_vld) begin             user_data       <= rx0_data_2r;             user_data_vld   <= 'h1;        endelsebegin             user_data       <= user_data;             user_data_vld   <= 'h0;        endend//-------------------output port---------------------assign  user_rx0_data        = user_data;    assign  user_rx0_data_vld    = user_data_vld;    assign  user_rx1_data        = rx1_link_r[3] ? user_data : 'h0;    assign  user_rx1_data_vld    = rx1_link_r[3] ? user_data_vld : 'h0;    //----------------------DEBUG-----------------------     ila_0 ILA_user_rx (        .clk        (rx0_clk), // input wire clk.probe0     ({                    'h0,                     rx0_data,                     rx0_kdata,                     sof_vld,                     eof_vld,                     frame_vld,                    // state_cur,// state_next,                     rx0_link_r,                     rx1_link_r,                      rx0_data_r,                     rx0_kdata_r,                      rx0_data_1r,                     rx0_kdata_1r,                      rx0_data_2r,                     rx0_kdata_2r,                      user_data,                     user_data_vld         }) // input wire [255:0] probe0     );endmodule

GT收发顶层:

这个模块中,你得把原有的帧生成模块和帧检查模块屏蔽掉使用!!!!里面还有的参数进行了修改,同学们自己看源码即可。

////////////////////////////////////////////////////////////////////////////////// ____ ____ // /  //  / ///___/  /  Vendor: Xilinx //    /   Version : 3.6//        Application : 7 Series FPGAs Transceivers Wizard // /  /     Filename : gtx_aurora_x2_exdes.v///___/ /   //   /  // \___/\___ //////Module gtx_aurora_x2_exdes//Generated by Xilinx 7 Series FPGAs Transceivers Wizard//////(c)Copyright 2010-2012 Xilinx, Inc. All rights reserved.////This file contains confidential and proprietary information//of Xilinx, Inc. and is protected under U.S. and//international copyright and other intellectual property//laws.////DISCLAIMER//This disclaimer is not a license and does not grant any//rights to the materials distributed herewith. Except as//otherwise provided in a valid license issued to you by//Xilinx, and to the maximum extent permitted by applicable//law:(1)THESE MATERIALS ARE MADE AVAILABLE"AS IS"AND//WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES//AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING//BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-//INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and//(2)Xilinx shall not be liable(whether in contract or tort, // including negligence, or under any other theory of // liability)for any loss or damage of any kind or nature//related to, arising under or in connection with these//materials, including for any direct, or any indirect,//special, incidental, or consequential loss or damage//(including loss of data, profits, goodwill, or any type of // loss or damage suffered as a result of any action brought // by a third party)evenifsuch damage or loss was//reasonably foreseeable or Xilinx had been advised of the//possibility of the same.////CRITICAL APPLICATIONS//Xilinx products are not designed or intended to be fail-//safe, or for use in any application requiring fail-safe//performance, such as life-support or safety devices or//systems, Class III medical devices, nuclear facilities,//applications related to the deployment of airbags, or any//other applications that could lead to death, personal//injury, or severe property or environmental damage//(individually and collectively, "Critical // Applications"). Customer assumes the sole risk and//liability of any use of Xilinx products in Critical//Applications, subject only to applicable laws and//regulations governing limitations on product liability.////THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS//PART OF THIS FILE AT ALL TIMES.  `timescale 1ns / 1ps `define DLY#1(*DowngradeIPIdentifiedWarnings="yes" *)//***********************************Entity Declaration************************(*CORE_GENERATION_INFO= "gtx_aurora_x2,gtwizard_v3_6_11,{protocol_file=aurora_8b10b_single_lane_4byte}" *)module gtx_aurora_x2_exdes#(   parameterEXAMPLE_CONFIG_INDEPENDENT_LANES  =  1,//configuration for frame gen and check   parameterEXAMPLE_LANE_WITH_START_CHAR    =  0,     // specifies lane with unique start frame char   parameterEXAMPLE_WORDS_IN_BRAM        =  512,    // specifies amount of data in BRAM   parameterEXAMPLE_SIM_GTRESET_SPEEDUP     =  "TRUE",  // simulation setting for GT SecureIP model   parameterEXAMPLE_USE_CHIPSCOPE        =  0,     // Set to 1 to use Chipscope to drive resets   parameterSTABLE_CLOCK_PERIOD         = 10 )(   input  wire        Q1_CLK1_GTREFCLK_PAD_N_IN,   input  wire        Q1_CLK1_GTREFCLK_PAD_P_IN,   input  wire        DRP_CLK_IN,   input  wire  [1:0]    RXN_IN,   input  wire  [1:0]    RXP_IN,   output wire  [1:0]    TXN_OUT,   output wire  [1:0]    TXP_OUT,   //-------------user interface-------------------------   input            soft_rst_tx,   input            soft_rst_rx,   input      [2:0]    gt_loopback,   output           user_rx0_clk,   output     [31:0]   user_rx0_data,   output     [3:0]    user_rx0_kdata,   output           user_rx0_link,   output           user_rx1_clk,   output     [31:0]   user_rx1_data,   output     [3:0]    user_rx1_kdata,   output           user_rx1_link,   output           user_tx0_clk,   input      [31:0]   user_tx0_data,   input      [3:0]    user_tx0_kdata,   output           user_tx0_link,   output           user_tx1_clk,   input      [31:0]   user_tx1_data,   input      [3:0]    user_tx1_kdata,   output           user_tx1_link );   wire soft_reset_i;  (*mark_debug= "TRUE" *)wire soft_reset_vio_i;//************************** Register Declarations ****************************   wire      gt_txfsmresetdone_i;   wire      gt_rxfsmresetdone_i;  (*ASYNC_REG= "TRUE" *)reg       gt_txfsmresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt_txfsmresetdone_r2;   wire      gt0_txfsmresetdone_i;   wire      gt0_rxfsmresetdone_i;  (*ASYNC_REG= "TRUE" *)reg       gt0_txfsmresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt0_txfsmresetdone_r2;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxfsmresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxfsmresetdone_r2;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxresetdone_r2;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxresetdone_r3;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxresetdone_vio_r;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxresetdone_vio_r2;  (*ASYNC_REG= "TRUE" *)reg       gt0_rxresetdone_vio_r3;   wire      gt1_txfsmresetdone_i;   wire      gt1_rxfsmresetdone_i;  (*ASYNC_REG= "TRUE" *)reg       gt1_txfsmresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt1_txfsmresetdone_r2;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxfsmresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxfsmresetdone_r2;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxresetdone_r;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxresetdone_r2;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxresetdone_r3;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxresetdone_vio_r;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxresetdone_vio_r2;  (*ASYNC_REG= "TRUE" *)reg       gt1_rxresetdone_vio_r3;   reg [5:0] reset_counter = 0;   reg   [3:0]  reset_pulse;//**************************** Wire Declarations ******************************////------------------------GT Wrapper Wires------------------------------//________________________________________________________________________//________________________________________________________________________//GT0(X1Y5)//-------------------------------CPLL Ports-------------------------------  wire      gt0_cpllfbclklost_i;   wire      gt0_cplllock_i;   wire      gt0_cpllrefclklost_i;   wire      gt0_cpllreset_i;  //--------------------------Channel - DRP Ports --------------------------  wire  [8:0]  gt0_drpaddr_i;   wire  [15:0] gt0_drpdi_i;   wire  [15:0] gt0_drpdo_i;   wire      gt0_drpen_i;   wire      gt0_drprdy_i;   wire      gt0_drpwe_i;  //-------------------------Digital Monitor Ports--------------------------  wire  [7:0]  gt0_dmonitorout_i;  //-----------------------------Loopback Ports-----------------------------  wire  [2:0]  gt0_loopback_i;  //----------------------------Power-Down Ports----------------------------  wire  [1:0]  gt0_rxpd_i;   wire  [1:0]  gt0_txpd_i;  //-------------------RX Initialization and Reset Ports--------------------  wire      gt0_eyescanreset_i;   wire      gt0_rxuserrdy_i;  //------------------------RX Margin Analysis Ports------------------------  wire      gt0_eyescandataerror_i;   wire      gt0_eyescantrigger_i;  //-----------------------Receive Ports - CDR Ports------------------------  wire      gt0_rxcdrhold_i;   wire      gt0_rxcdrovrden_i;  //-----------------Receive Ports - Clock Correction Ports-----------------  wire  [1:0]  gt0_rxclkcorcnt_i;  //----------------Receive Ports - FPGA RX interface Ports-----------------  wire  [31:0] gt0_rxdata_i;  //-----------------Receive Ports - Pattern Checker Ports------------------  wire      gt0_rxprbserr_i;   wire  [2:0]  gt0_rxprbssel_i;  //-----------------Receive Ports - Pattern Checker ports------------------  wire      gt0_rxprbscntreset_i;  //----------------Receive Ports - RX 8B/10B Decoder Ports-----------------  wire  [3:0]  gt0_rxdisperr_i;   wire  [3:0]  gt0_rxnotintable_i;  //-------------------------Receive Ports - RX AFE-------------------------  wire      gt0_gtxrxp_i;  //----------------------Receive Ports - RX AFE Ports----------------------  wire      gt0_gtxrxn_i;  //-----------------Receive Ports - RX Buffer Bypass Ports-----------------  wire      gt0_rxbufreset_i;   wire  [2:0]  gt0_rxbufstatus_i;  //------------Receive Ports - RX Byte and Word Alignment Ports------------  wire      gt0_rxbyteisaligned_i;   wire      gt0_rxbyterealign_i;   wire      gt0_rxcommadet_i;   wire      gt0_rxmcommaalignen_i;   wire      gt0_rxpcommaalignen_i;  //-------------------Receive Ports - RX Equalizer Ports-------------------  wire      gt0_rxdfelpmreset_i;   wire  [6:0]  gt0_rxmonitorout_i;   wire  [1:0]  gt0_rxmonitorsel_i;  //-------------Receive Ports - RX Fabric Output Control Ports-------------  wire      gt0_rxoutclk_i;   wire      gt0_rxoutclkfabric_i;  //-----------Receive Ports - RX Initialization and Reset Ports------------  wire      gt0_gtrxreset_i;   wire      gt0_rxpcsreset_i;   wire      gt0_rxpmareset_i;  //----------------Receive Ports - RX Margin Analysis ports----------------  wire      gt0_rxlpmen_i;  //---------------Receive Ports - RX Polarity Control Ports----------------  wire      gt0_rxpolarity_i;  //-----------------Receive Ports - RX8B/10B Decoder Ports-----------------  wire  [3:0]  gt0_rxchariscomma_i;   wire  [3:0]  gt0_rxcharisk_i;  //------------Receive Ports -RX Initialization and Reset Ports------------  wire      gt0_rxresetdone_i;  //----------------------TX Configurable Driver Ports----------------------  wire  [4:0]  gt0_txpostcursor_i;   wire  [4:0]  gt0_txprecursor_i;  //-------------------TX Initialization and Reset Ports--------------------  wire      gt0_gttxreset_i;   wire      gt0_txuserrdy_i;  //--------------Transmit Ports - 8b10b Encoder Control Ports--------------  wire  [3:0]  gt0_txchardispmode_i;   wire  [3:0]  gt0_txchardispval_i;  //----------------Transmit Ports - Pattern Generator Ports----------------  wire      gt0_txprbsforceerr_i;  //--------------------Transmit Ports - TX Buffer Ports--------------------  wire  [1:0]  gt0_txbufstatus_i;  //-------------Transmit Ports - TX Configurable Driver Ports--------------  wire  [3:0]  gt0_txdiffctrl_i;   wire  [6:0]  gt0_txmaincursor_i;  //----------------Transmit Ports - TX Data Path interface-----------------  wire  [31:0] gt0_txdata_i;  //--------------Transmit Ports - TX Driver and OOB signaling--------------  wire      gt0_gtxtxn_i;   wire      gt0_gtxtxp_i;  //---------Transmit Ports - TX Fabric Clock Output Control Ports----------  wire      gt0_txoutclk_i;   wire      gt0_txoutclkfabric_i;   wire      gt0_txoutclkpcs_i;  //-------------------Transmit Ports - TX Gearbox Ports--------------------  wire  [3:0]  gt0_txcharisk_i;  //-----------Transmit Ports - TX Initialization and Reset Ports-----------  wire      gt0_txpcsreset_i;   wire      gt0_txpmareset_i;   wire      gt0_txresetdone_i;  //---------------Transmit Ports - TX Polarity Control Ports---------------  wire      gt0_txpolarity_i;  //----------------Transmit Ports - pattern Generator Ports----------------  wire  [2:0]  gt0_txprbssel_i;  //________________________________________________________________________//________________________________________________________________________//GT1(X1Y6)//-------------------------------CPLL Ports-------------------------------  wire      gt1_cpllfbclklost_i;   wire      gt1_cplllock_i;   wire      gt1_cpllrefclklost_i;   wire      gt1_cpllreset_i;  //--------------------------Channel - DRP Ports --------------------------  wire  [8:0]  gt1_drpaddr_i;   wire  [15:0] gt1_drpdi_i;   wire  [15:0] gt1_drpdo_i;   wire      gt1_drpen_i;   wire      gt1_drprdy_i;   wire      gt1_drpwe_i;  //-------------------------Digital Monitor Ports--------------------------  wire  [7:0]  gt1_dmonitorout_i;  //-----------------------------Loopback Ports-----------------------------  wire  [2:0]  gt1_loopback_i;  //----------------------------Power-Down Ports----------------------------  wire  [1:0]  gt1_rxpd_i;   wire  [1:0]  gt1_txpd_i;  //-------------------RX Initialization and Reset Ports--------------------  wire      gt1_eyescanreset_i;   wire      gt1_rxuserrdy_i;  //------------------------RX Margin Analysis Ports------------------------  wire      gt1_eyescandataerror_i;   wire      gt1_eyescantrigger_i;  //-----------------------Receive Ports - CDR Ports------------------------  wire      gt1_rxcdrhold_i;   wire      gt1_rxcdrovrden_i;  //-----------------Receive Ports - Clock Correction Ports-----------------  wire  [1:0]  gt1_rxclkcorcnt_i;  //----------------Receive Ports - FPGA RX interface Ports-----------------  wire  [31:0] gt1_rxdata_i;  //-----------------Receive Ports - Pattern Checker Ports------------------  wire      gt1_rxprbserr_i;   wire  [2:0]  gt1_rxprbssel_i;  //-----------------Receive Ports - Pattern Checker ports------------------  wire      gt1_rxprbscntreset_i;  //----------------Receive Ports - RX 8B/10B Decoder Ports-----------------  wire  [3:0]  gt1_rxdisperr_i;   wire  [3:0]  gt1_rxnotintable_i;  //-------------------------Receive Ports - RX AFE-------------------------  wire      gt1_gtxrxp_i;  //----------------------Receive Ports - RX AFE Ports----------------------  wire      gt1_gtxrxn_i;  //-----------------Receive Ports - RX Buffer Bypass Ports-----------------  wire      gt1_rxbufreset_i;   wire  [2:0]  gt1_rxbufstatus_i;  //------------Receive Ports - RX Byte and Word Alignment Ports------------  wire      gt1_rxbyteisaligned_i;   wire      gt1_rxbyterealign_i;   wire      gt1_rxcommadet_i;   wire      gt1_rxmcommaalignen_i;   wire      gt1_rxpcommaalignen_i;  //-------------------Receive Ports - RX Equalizer Ports-------------------  wire      gt1_rxdfelpmreset_i;   wire  [6:0]  gt1_rxmonitorout_i;   wire  [1:0]  gt1_rxmonitorsel_i;  //-------------Receive Ports - RX Fabric Output Control Ports-------------  wire      gt1_rxoutclk_i;   wire      gt1_rxoutclkfabric_i;  //-----------Receive Ports - RX Initialization and Reset Ports------------  wire      gt1_gtrxreset_i;   wire      gt1_rxpcsreset_i;   wire      gt1_rxpmareset_i;  //----------------Receive Ports - RX Margin Analysis ports----------------  wire      gt1_rxlpmen_i;  //---------------Receive Ports - RX Polarity Control Ports----------------  wire      gt1_rxpolarity_i;  //-----------------Receive Ports - RX8B/10B Decoder Ports-----------------  wire  [3:0]  gt1_rxchariscomma_i;   wire  [3:0]  gt1_rxcharisk_i;  //------------Receive Ports -RX Initialization and Reset Ports------------  wire      gt1_rxresetdone_i;  //----------------------TX Configurable Driver Ports----------------------  wire  [4:0]  gt1_txpostcursor_i;   wire  [4:0]  gt1_txprecursor_i;  //-------------------TX Initialization and Reset Ports--------------------  wire      gt1_gttxreset_i;   wire      gt1_txuserrdy_i;  //--------------Transmit Ports - 8b10b Encoder Control Ports--------------  wire  [3:0]  gt1_txchardispmode_i;   wire  [3:0]  gt1_txchardispval_i;  //----------------Transmit Ports - Pattern Generator Ports----------------  wire      gt1_txprbsforceerr_i;  //--------------------Transmit Ports - TX Buffer Ports--------------------  wire  [1:0]  gt1_txbufstatus_i;  //-------------Transmit Ports - TX Configurable Driver Ports--------------  wire  [3:0]  gt1_txdiffctrl_i;   wire  [6:0]  gt1_txmaincursor_i;  //----------------Transmit Ports - TX Data Path interface-----------------  wire  [31:0] gt1_txdata_i;  //--------------Transmit Ports - TX Driver and OOB signaling--------------  wire      gt1_gtxtxn_i;   wire      gt1_gtxtxp_i;  //---------Transmit Ports - TX Fabric Clock Output Control Ports----------  wire      gt1_txoutclk_i;   wire      gt1_txoutclkfabric_i;   wire      gt1_txoutclkpcs_i;  //-------------------Transmit Ports - TX Gearbox Ports--------------------  wire  [3:0]  gt1_txcharisk_i;  //-----------Transmit Ports - TX Initialization and Reset Ports-----------  wire      gt1_txpcsreset_i;   wire      gt1_txpmareset_i;   wire      gt1_txresetdone_i;  //---------------Transmit Ports - TX Polarity Control Ports---------------  wire      gt1_txpolarity_i;  //----------------Transmit Ports - pattern Generator Ports----------------  wire  [2:0]  gt1_txprbssel_i;  //____________________________COMMONPORTS________________________________  //--------------------Common Block - Ref Clock Ports---------------------  wire      gt0_gtrefclk1_common_i;  //-----------------------Common Block - QPLL Ports------------------------  wire      gt0_qplllock_i;   wire      gt0_qpllrefclklost_i;   wire      gt0_qpllreset_i;  //-----------------------------Global Signals-----------------------------   wire      drpclk_in_i;   wire      DRPCLK_IN;   wire      gt0_tx_system_reset_c;   wire      gt0_rx_system_reset_c;   wire      gt1_tx_system_reset_c;   wire      gt1_rx_system_reset_c;   wire      tied_to_ground_i;   wire  [63:0] tied_to_ground_vec_i;   wire      tied_to_vcc_i;   wire  [7:0]  tied_to_vcc_vec_i;   wire      GTTXRESET_IN;   wire      GTRXRESET_IN;   wire      CPLLRESET_IN;   wire      QPLLRESET_IN;  //---------------------------User Clocks---------------------------------   wire      gt0_txusrclk_i;    wire      gt0_txusrclk2_i;    wire      gt0_rxusrclk_i;    wire      gt0_rxusrclk2_i;    wire      gt1_txusrclk_i;    wire      gt1_txusrclk2_i;    wire      gt1_rxusrclk_i;    wire      gt1_rxusrclk2_i;    //---------------------------Reference Clocks----------------------------     wire      q1_clk1_refclk_i;  //---------------------Frame check/gen Module Signals--------------------  wire      gt0_matchn_i;     wire  [3:0]  gt0_txcharisk_float_i;     wire  [15:0] gt0_txdata_float16_i;   wire  [31:0] gt0_txdata_float_i;        wire      gt0_block_sync_i;   wire      gt0_track_data_i;   wire  [7:0]  gt0_error_count_i;   wire      gt0_frame_check_reset_i;   wire      gt0_inc_in_i;   wire      gt0_inc_out_i;   wire  [31:0] gt0_unscrambled_data_i;   wire      gt1_matchn_i;     wire  [3:0]  gt1_txcharisk_float_i;     wire  [15:0] gt1_txdata_float16_i;   wire  [31:0] gt1_txdata_float_i;        wire      gt1_block_sync_i;   wire      gt1_track_data_i;   wire  [7:0]  gt1_error_count_i;   wire      gt1_frame_check_reset_i;   wire      gt1_inc_in_i;   wire      gt1_inc_out_i;   wire  [31:0] gt1_unscrambled_data_i;   wire      reset_on_data_error_i;   wire      track_data_out_i;    //---------------------Chipscope Signals---------------------------------(*mark_debug= "TRUE" *)wire  rxresetdone_vio_i;   wire  [35:0] tx_data_vio_control_i;   wire  [35:0] rx_data_vio_control_i;   wire  [35:0] shared_vio_control_i;   wire  [35:0] ila_control_i;   wire  [35:0] channel_drp_vio_control_i;   wire  [35:0] common_drp_vio_control_i;   wire  [31:0] tx_data_vio_async_in_i;   wire  [31:0] tx_data_vio_sync_in_i;   wire  [31:0] tx_data_vio_async_out_i;   wire  [31:0] tx_data_vio_sync_out_i;   wire  [31:0] rx_data_vio_async_in_i;   wire  [31:0] rx_data_vio_sync_in_i;   wire  [31:0] rx_data_vio_async_out_i;   wire  [31:0] rx_data_vio_sync_out_i;   wire  [31:0] shared_vio_in_i;   wire  [31:0] shared_vio_out_i;   wire  [163:0] ila_in_i;   wire  [31:0] channel_drp_vio_async_in_i;   wire  [31:0] channel_drp_vio_sync_in_i;   wire  [31:0] channel_drp_vio_async_out_i;   wire  [31:0] channel_drp_vio_sync_out_i;   wire  [31:0] common_drp_vio_async_in_i;   wire  [31:0] common_drp_vio_sync_in_i;   wire  [31:0] common_drp_vio_async_out_i;   wire  [31:0] common_drp_vio_sync_out_i;   wire  [31:0] gt0_tx_data_vio_async_in_i;   wire  [31:0] gt0_tx_data_vio_sync_in_i;   wire  [31:0] gt0_tx_data_vio_async_out_i;   wire  [31:0] gt0_tx_data_vio_sync_out_i;   wire  [31:0] gt0_rx_data_vio_async_in_i;   wire  [31:0] gt0_rx_data_vio_sync_in_i;   wire  [31:0] gt0_rx_data_vio_async_out_i;   wire  [31:0] gt0_rx_data_vio_sync_out_i;   wire  [163:0] gt0_ila_in_i;   wire  [31:0] gt0_channel_drp_vio_async_in_i;   wire  [31:0] gt0_channel_drp_vio_sync_in_i;   wire  [31:0] gt0_channel_drp_vio_async_out_i;   wire  [31:0] gt0_channel_drp_vio_sync_out_i;   wire  [31:0] gt0_common_drp_vio_async_in_i;   wire  [31:0] gt0_common_drp_vio_sync_in_i;   wire  [31:0] gt0_common_drp_vio_async_out_i;   wire  [31:0] gt0_common_drp_vio_sync_out_i;   wire  [31:0] gt1_tx_data_vio_async_in_i;   wire  [31:0] gt1_tx_data_vio_sync_in_i;   wire  [31:0] gt1_tx_data_vio_async_out_i;   wire  [31:0] gt1_tx_data_vio_sync_out_i;   wire  [31:0] gt1_rx_data_vio_async_in_i;   wire  [31:0] gt1_rx_data_vio_sync_in_i;   wire  [31:0] gt1_rx_data_vio_async_out_i;   wire  [31:0] gt1_rx_data_vio_sync_out_i;   wire  [163:0] gt1_ila_in_i;   wire  [31:0] gt1_channel_drp_vio_async_in_i;   wire  [31:0] gt1_channel_drp_vio_sync_in_i;   wire  [31:0] gt1_channel_drp_vio_async_out_i;   wire  [31:0] gt1_channel_drp_vio_sync_out_i;   wire  [31:0] gt1_common_drp_vio_async_in_i;   wire  [31:0] gt1_common_drp_vio_sync_in_i;   wire  [31:0] gt1_common_drp_vio_async_out_i;   wire  [31:0] gt1_common_drp_vio_sync_out_i;    wire      gttxreset_i;   wire      gtrxreset_i;   wire      mux_sel_i;   wire      user_tx_reset_i;   wire      user_rx_reset_i;   wire      tx_vio_clk_i;   wire      tx_vio_clk_mux_out_i;     wire      rx_vio_ila_clk_i;   wire      rx_vio_ila_clk_mux_out_i;   wire      cpllreset_i;     wire [(80 -32)-1:0] zero_vector_rx_80 ;  wire [(8 -4)-1:0] zero_vector_rx_8 ;  wire [79:0] gt0_rxdata_ila ;  wire [1:0] gt0_rxdatavalid_ila;  wire [7:0] gt0_rxcharisk_ila ;  wire gt0_txmmcm_lock_ila ;  wire gt0_rxmmcm_lock_ila ;  wire gt0_rxresetdone_ila ;  wire gt0_txresetdone_ila ;  wire [79:0] gt1_rxdata_ila ;  wire [1:0] gt1_rxdatavalid_ila;  wire [7:0] gt1_rxcharisk_ila ;  wire gt1_txmmcm_lock_ila ;  wire gt1_rxmmcm_lock_ila ;  wire gt1_rxresetdone_ila ;  wire gt1_txresetdone_ila ;//**************************** Main Body of Code *******************************  // Static signal Assigments     assign tied_to_ground_i       = 1'b0;   assign tied_to_ground_vec_i     = 64'h0000000000000000;   assign tied_to_vcc_i        = 1'b1;   assign tied_to_vcc_vec_i      = 8'hff;   assign zero_vector_rx_80 = 0;   assign zero_vector_rx_8 = 0;      assign q1_clk1_refclk_i           = 1'b0;  //------------------------------USERINTERFACE---------------------------//-------------channel0---------------------  assign user_rx0_clk  = gt0_rxusrclk2_i;   assign user_rx0_data  = gt0_rxdata_i;   assign user_rx0_kdata = gt0_rxcharisk_i;   assign user_rx0_link  = gt0_rxfsmresetdone_i;   assign user_tx0_clk  = gt0_txusrclk2_i;   assign gt0_txdata_i  = user_tx0_data;   assign gt0_txcharisk_i = user_tx0_kdata;   assign user_tx0_link  = gt0_txfsmresetdone_i;  //-------------channel1---------------------  assign user_rx1_clk  = gt1_rxusrclk2_i;   assign user_rx1_data  = gt1_rxdata_i;   assign user_rx1_kdata = gt1_rxcharisk_i;   assign user_rx1_link  = gt1_rxfsmresetdone_i;   assign user_tx1_clk  = gt1_txusrclk2_i;   assign gt1_txdata_i  = user_tx1_data;   assign gt1_txcharisk_i = user_tx1_kdata;   assign user_tx1_link  = gt1_txfsmresetdone_i;  //***********************************************************************////////---------------------------The GT Wrapper----------------------------////////***********************************************************************////Use the instantiation template in the example directory to add the GT wrapper to your design.  //In this example, the wrapper is wired up for basic operation with a frame generator and frame   //checker. The GTs will reset, then attempt to align and transmit data. If channel bonding is   //enabled, bonding should occur after alignment.  //While connecting the GT TX/RX Reset ports below, please add a delay of  //minimum 500ns as mentioned in AR 43482.      gtx_aurora_x2_support#(     .EXAMPLE_SIM_GTRESET_SPEEDUP  (EXAMPLE_SIM_GTRESET_SPEEDUP),    .STABLE_CLOCK_PERIOD(STABLE_CLOCK_PERIOD)  )   gtx_aurora_x2_support_i  (     .soft_reset_tx_in        (soft_rst_tx),    .soft_reset_rx_in(soft_rst_rx),    .dont_reset_on_data_error_in(tied_to_ground_i),  .q1_clk1_gtrefclk_pad_n_in(Q1_CLK1_GTREFCLK_PAD_N_IN),  .q1_clk1_gtrefclk_pad_p_in(Q1_CLK1_GTREFCLK_PAD_P_IN),    .gt0_tx_fsm_reset_done_out(gt0_txfsmresetdone_i),    .gt0_rx_fsm_reset_done_out(gt0_rxfsmresetdone_i),    .gt0_data_valid_in('b1),    .gt1_tx_fsm_reset_done_out(gt1_txfsmresetdone_i),    .gt1_rx_fsm_reset_done_out(gt1_rxfsmresetdone_i),    .gt1_data_valid_in('b1),   .gt0_txusrclk_out(gt0_txusrclk_i),  .gt0_txusrclk2_out(gt0_txusrclk2_i),  .gt0_rxusrclk_out(gt0_rxusrclk_i),  .gt0_rxusrclk2_out(gt0_rxusrclk2_i),   .gt1_txusrclk_out(gt1_txusrclk_i),  .gt1_txusrclk2_out(gt1_txusrclk2_i),  .gt1_rxusrclk_out(gt1_rxusrclk_i),  .gt1_rxusrclk2_out(gt1_rxusrclk2_i),    //_____________________________________________________________________//_____________________________________________________________________//GT0(X1Y5)//-------------------------------CPLL Ports-------------------------------.gt0_cpllfbclklost_out(gt0_cpllfbclklost_i),    .gt0_cplllock_out(gt0_cplllock_i),    .gt0_cpllreset_in(tied_to_ground_i),    //--------------------------Channel - DRP Ports --------------------------.gt0_drpaddr_in(gt0_drpaddr_i),    .gt0_drpdi_in(gt0_drpdi_i),    .gt0_drpdo_out(gt0_drpdo_i),    .gt0_drpen_in(gt0_drpen_i),    .gt0_drprdy_out(gt0_drprdy_i),    .gt0_drpwe_in(gt0_drpwe_i),    //-------------------------Digital Monitor Ports--------------------------.gt0_dmonitorout_out(gt0_dmonitorout_i),    //-----------------------------Loopback Ports-----------------------------.gt0_loopback_in(gt_loopback),    //----------------------------Power-Down Ports----------------------------.gt0_rxpd_in(gt0_rxpd_i),    .gt0_txpd_in(gt0_txpd_i),    //-------------------RX Initialization and Reset Ports--------------------.gt0_eyescanreset_in(tied_to_ground_i),    .gt0_rxuserrdy_in(tied_to_vcc_i),    //------------------------RX Margin Analysis Ports------------------------.gt0_eyescandataerror_out(gt0_eyescandataerror_i),    .gt0_eyescantrigger_in(tied_to_ground_i),    //-----------------------Receive Ports - CDR Ports------------------------.gt0_rxcdrhold_in(gt0_rxcdrhold_i),    .gt0_rxcdrovrden_in(tied_to_ground_i),    //-----------------Receive Ports - Clock Correction Ports-----------------.gt0_rxclkcorcnt_out(gt0_rxclkcorcnt_i),    //----------------Receive Ports - FPGA RX interface Ports-----------------.gt0_rxdata_out(gt0_rxdata_i),    //-----------------Receive Ports - Pattern Checker Ports------------------.gt0_rxprbserr_out(gt0_rxprbserr_i),    .gt0_rxprbssel_in(gt0_rxprbssel_i),    //-----------------Receive Ports - Pattern Checker ports------------------.gt0_rxprbscntreset_in(gt0_rxprbscntreset_i),    //----------------Receive Ports - RX 8B/10B Decoder Ports-----------------.gt0_rxdisperr_out(gt0_rxdisperr_i),    .gt0_rxnotintable_out(gt0_rxnotintable_i),    //-------------------------Receive Ports - RX AFE-------------------------.gt0_gtxrxp_in(RXP_IN[0]),    //----------------------Receive Ports - RX AFE Ports----------------------.gt0_gtxrxn_in(RXN_IN[0]),    //-----------------Receive Ports - RX Buffer Bypass Ports-----------------.gt0_rxbufreset_in(gt0_rxbufreset_i),    .gt0_rxbufstatus_out(gt0_rxbufstatus_i),    //------------Receive Ports - RX Byte and Word Alignment Ports------------.gt0_rxbyteisaligned_out(gt0_rxbyteisaligned_i),    .gt0_rxbyterealign_out(gt0_rxbyterealign_i),    .gt0_rxcommadet_out(gt0_rxcommadet_i),    .gt0_rxmcommaalignen_in('b1),    .gt0_rxpcommaalignen_in('b1),    //-------------------Receive Ports - RX Equalizer Ports-------------------.gt0_rxdfelpmreset_in(tied_to_ground_i),    .gt0_rxmonitorout_out(gt0_rxmonitorout_i),    .gt0_rxmonitorsel_in(2'b00),    //-------------Receive Ports - RX Fabric Output Control Ports-------------.gt0_rxoutclkfabric_out(gt0_rxoutclkfabric_i),    //-----------Receive Ports - RX Initialization and Reset Ports------------.gt0_gtrxreset_in(tied_to_ground_i),    .gt0_rxpcsreset_in(tied_to_ground_i),    .gt0_rxpmareset_in(gt0_rxpmareset_i),    //----------------Receive Ports - RX Margin Analysis ports----------------.gt0_rxlpmen_in(gt0_rxlpmen_i),    //---------------Receive Ports - RX Polarity Control Ports----------------.gt0_rxpolarity_in(gt0_rxpolarity_i),    //-----------------Receive Ports - RX8B/10B Decoder Ports-----------------.gt0_rxchariscomma_out(gt0_rxchariscomma_i),    .gt0_rxcharisk_out(gt0_rxcharisk_i),    //------------Receive Ports -RX Initialization and Reset Ports------------.gt0_rxresetdone_out(gt0_rxresetdone_i),    //----------------------TX Configurable Driver Ports----------------------.gt0_txpostcursor_in(gt0_txpostcursor_i),    .gt0_txprecursor_in(gt0_txprecursor_i),    //-------------------TX Initialization and Reset Ports--------------------.gt0_gttxreset_in(tied_to_ground_i),    .gt0_txuserrdy_in(tied_to_vcc_i),    //--------------Transmit Ports - 8b10b Encoder Control Ports--------------.gt0_txchardispmode_in(gt0_txchardispmode_i),    .gt0_txchardispval_in(gt0_txchardispval_i),    //----------------Transmit Ports - Pattern Generator Ports----------------.gt0_txprbsforceerr_in(gt0_txprbsforceerr_i),    //--------------------Transmit Ports - TX Buffer Ports--------------------.gt0_txbufstatus_out(gt0_txbufstatus_i),    //-------------Transmit Ports - TX Configurable Driver Ports--------------.gt0_txdiffctrl_in(gt0_txdiffctrl_i),    .gt0_txmaincursor_in(7'b0000000),    //----------------Transmit Ports - TX Data Path interface-----------------.gt0_txdata_in(gt0_txdata_i),    //--------------Transmit Ports - TX Driver and OOB signaling--------------.gt0_gtxtxn_out(TXN_OUT[0]),    .gt0_gtxtxp_out(TXP_OUT[0]),    //---------Transmit Ports - TX Fabric Clock Output Control Ports----------.gt0_txoutclkfabric_out(gt0_txoutclkfabric_i),    .gt0_txoutclkpcs_out(gt0_txoutclkpcs_i),    //-------------------Transmit Ports - TX Gearbox Ports--------------------.gt0_txcharisk_in(gt0_txcharisk_i),    //-----------Transmit Ports - TX Initialization and Reset Ports-----------.gt0_txpcsreset_in(tied_to_ground_i),    .gt0_txpmareset_in(tied_to_ground_i),    .gt0_txresetdone_out(gt0_txresetdone_i),    //---------------Transmit Ports - TX Polarity Control Ports---------------.gt0_txpolarity_in(gt0_txpolarity_i),    //----------------Transmit Ports - pattern Generator Ports----------------.gt0_txprbssel_in(gt0_txprbssel_i),    //_____________________________________________________________________//_____________________________________________________________________//GT1(X1Y6)//-------------------------------CPLL Ports-------------------------------.gt1_cpllfbclklost_out(gt1_cpllfbclklost_i),    .gt1_cplllock_out(gt1_cplllock_i),    .gt1_cpllreset_in(tied_to_ground_i),    //--------------------------Channel - DRP Ports --------------------------.gt1_drpaddr_in(gt1_drpaddr_i),    .gt1_drpdi_in(gt1_drpdi_i),    .gt1_drpdo_out(gt1_drpdo_i),    .gt1_drpen_in(gt1_drpen_i),    .gt1_drprdy_out(gt1_drprdy_i),    .gt1_drpwe_in(gt1_drpwe_i),    //-------------------------Digital Monitor Ports--------------------------.gt1_dmonitorout_out(gt1_dmonitorout_i),    //-----------------------------Loopback Ports-----------------------------.gt1_loopback_in(gt1_loopback_i),    //----------------------------Power-Down Ports----------------------------.gt1_rxpd_in(gt1_rxpd_i),    .gt1_txpd_in(gt1_txpd_i),    //-------------------RX Initialization and Reset Ports--------------------.gt1_eyescanreset_in(tied_to_ground_i),    .gt1_rxuserrdy_in(tied_to_vcc_i),    //------------------------RX Margin Analysis Ports------------------------.gt1_eyescandataerror_out(gt1_eyescandataerror_i),    .gt1_eyescantrigger_in(tied_to_ground_i),    //-----------------------Receive Ports - CDR Ports------------------------.gt1_rxcdrhold_in(gt1_rxcdrhold_i),    .gt1_rxcdrovrden_in(tied_to_ground_i),    //-----------------Receive Ports - Clock Correction Ports-----------------.gt1_rxclkcorcnt_out(gt1_rxclkcorcnt_i),    //----------------Receive Ports - FPGA RX interface Ports-----------------.gt1_rxdata_out(gt1_rxdata_i),    //-----------------Receive Ports - Pattern Checker Ports------------------.gt1_rxprbserr_out(gt1_rxprbserr_i),    .gt1_rxprbssel_in(gt1_rxprbssel_i),    //-----------------Receive Ports - Pattern Checker ports------------------.gt1_rxprbscntreset_in(gt1_rxprbscntreset_i),    //----------------Receive Ports - RX 8B/10B Decoder Ports-----------------.gt1_rxdisperr_out(gt1_rxdisperr_i),    .gt1_rxnotintable_out(gt1_rxnotintable_i),    //-------------------------Receive Ports - RX AFE-------------------------.gt1_gtxrxp_in(RXP_IN[1]),    //----------------------Receive Ports - RX AFE Ports----------------------.gt1_gtxrxn_in(RXN_IN[1]),    //-----------------Receive Ports - RX Buffer Bypass Ports-----------------.gt1_rxbufreset_in(gt1_rxbufreset_i),    .gt1_rxbufstatus_out(gt1_rxbufstatus_i),    //------------Receive Ports - RX Byte and Word Alignment Ports------------.gt1_rxbyteisaligned_out(gt1_rxbyteisaligned_i),    .gt1_rxbyterealign_out(gt1_rxbyterealign_i),    .gt1_rxcommadet_out(gt1_rxcommadet_i),    .gt1_rxmcommaalignen_in('b1),    .gt1_rxpcommaalignen_in('b1),    //-------------------Receive Ports - RX Equalizer Ports-------------------.gt1_rxdfelpmreset_in(tied_to_ground_i),    .gt1_rxmonitorout_out(gt1_rxmonitorout_i),    .gt1_rxmonitorsel_in(2'b00),    //-------------Receive Ports - RX Fabric Output Control Ports-------------.gt1_rxoutclkfabric_out(gt1_rxoutclkfabric_i),    //-----------Receive Ports - RX Initialization and Reset Ports------------.gt1_gtrxreset_in(tied_to_ground_i),    .gt1_rxpcsreset_in(tied_to_ground_i),    .gt1_rxpmareset_in(gt1_rxpmareset_i),    //----------------Receive Ports - RX Margin Analysis ports----------------.gt1_rxlpmen_in(gt1_rxlpmen_i),    //---------------Receive Ports - RX Polarity Control Ports----------------.gt1_rxpolarity_in(gt1_rxpolarity_i),    //-----------------Receive Ports - RX8B/10B Decoder Ports-----------------.gt1_rxchariscomma_out(gt1_rxchariscomma_i),    .gt1_rxcharisk_out(gt1_rxcharisk_i),    //------------Receive Ports -RX Initialization and Reset Ports------------.gt1_rxresetdone_out(gt1_rxresetdone_i),    //----------------------TX Configurable Driver Ports----------------------.gt1_txpostcursor_in(gt1_txpostcursor_i),    .gt1_txprecursor_in(gt1_txprecursor_i),    //-------------------TX Initialization and Reset Ports--------------------.gt1_gttxreset_in(tied_to_ground_i),    .gt1_txuserrdy_in(tied_to_vcc_i),    //--------------Transmit Ports - 8b10b Encoder Control Ports--------------.gt1_txchardispmode_in(gt1_txchardispmode_i),    .gt1_txchardispval_in(gt1_txchardispval_i),    //----------------Transmit Ports - Pattern Generator Ports----------------.gt1_txprbsforceerr_in(gt1_txprbsforceerr_i),    //--------------------Transmit Ports - TX Buffer Ports--------------------.gt1_txbufstatus_out(gt1_txbufstatus_i),    //-------------Transmit Ports - TX Configurable Driver Ports--------------.gt1_txdiffctrl_in(gt1_txdiffctrl_i),    .gt1_txmaincursor_in(7'b0000000),    //----------------Transmit Ports - TX Data Path interface-----------------.gt1_txdata_in(gt1_txdata_i),    //--------------Transmit Ports - TX Driver and OOB signaling--------------.gt1_gtxtxn_out(TXN_OUT[1]),    .gt1_gtxtxp_out(TXP_OUT[1]),    //---------Transmit Ports - TX Fabric Clock Output Control Ports----------.gt1_txoutclkfabric_out(gt1_txoutclkfabric_i),    .gt1_txoutclkpcs_out(gt1_txoutclkpcs_i),    //-------------------Transmit Ports - TX Gearbox Ports--------------------.gt1_txcharisk_in(gt1_txcharisk_i),    //-----------Transmit Ports - TX Initialization and Reset Ports-----------.gt1_txpcsreset_in(tied_to_ground_i),    .gt1_txpmareset_in(tied_to_ground_i),    .gt1_txresetdone_out(gt1_txresetdone_i),    //---------------Transmit Ports - TX Polarity Control Ports---------------.gt1_txpolarity_in(gt1_txpolarity_i),    //----------------Transmit Ports - pattern Generator Ports----------------.gt1_txprbssel_in(gt1_txprbssel_i),  //____________________________COMMONPORTS________________________________    .gt0_qplloutclk_out(),    .gt0_qplloutrefclk_out(),    .sysclk_in(DRP_CLK_IN)  );  //IBUFDS IBUFDS_DRP_CLK  //(   //   .I (DRP_CLK_IN_P),  //.IB(DRP_CLK_IN_N),  //.O(DRPCLK_IN)// );  //BUFG DRP_CLK_BUFG  //(   //   .I               (DRPCLK_IN),  //.O(drpclk_in_i)//);   //***********************************************************************////////---------------------------User Module Resets-------------------------////////***********************************************************************////All the User Modules i.e. FRAME_GEN, FRAME_CHECK and the sync modules  //are held in reset till the RESETDONE goes high.   //The RESETDONE is registered a couple of times on *USRCLK2 and connected   //to the reset of the modules   always @(posedge gt0_rxusrclk2_i or negedge gt0_rxresetdone_i)   begin    if(!gt0_rxresetdone_i)    begin       gt0_rxresetdone_r  <=   `DLY 1'b0;             gt0_rxresetdone_r2   <=   `DLY 1'b0;             gt0_rxresetdone_r3   <=   `DLY 1'b0;         end         else         begin             gt0_rxresetdone_r    <=   `DLY gt0_rxresetdone_i;             gt0_rxresetdone_r2   <=   `DLY gt0_rxresetdone_r;             gt0_rxresetdone_r3   <=   `DLY gt0_rxresetdone_r2;         end     end            always @(posedge  gt0_txusrclk2_i or negedge gt0_txfsmresetdone_i)      begin        if(!gt0_txfsmresetdone_i)         begin             gt0_txfsmresetdone_r    <=   `DLY 1'b0;             gt0_txfsmresetdone_r2   <=   `DLY 1'b0;         end         else         begin             gt0_txfsmresetdone_r    <=   `DLY gt0_txfsmresetdone_i;             gt0_txfsmresetdone_r2   <=   `DLY gt0_txfsmresetdone_r;         end     end  always @(posedge gt1_rxusrclk2_i or negedge gt1_rxresetdone_i)      begin        if(!gt1_rxresetdone_i)         begin             gt1_rxresetdone_r    <=   `DLY 1'b0;             gt1_rxresetdone_r2   <=   `DLY 1'b0;             gt1_rxresetdone_r3   <=   `DLY 1'b0;         end         else         begin             gt1_rxresetdone_r    <=   `DLY gt1_rxresetdone_i;             gt1_rxresetdone_r2   <=   `DLY gt1_rxresetdone_r;             gt1_rxresetdone_r3   <=   `DLY gt1_rxresetdone_r2;         end     end            always @(posedge  gt1_txusrclk2_i or negedge gt1_txfsmresetdone_i)      begin        if(!gt1_txfsmresetdone_i)         begin             gt1_txfsmresetdone_r    <=   `DLY 1'b0;             gt1_txfsmresetdone_r2   <=   `DLY 1'b0;         end         else         begin             gt1_txfsmresetdone_r    <=   `DLY gt1_txfsmresetdone_i;             gt1_txfsmresetdone_r2   <=   `DLY gt1_txfsmresetdone_r;         end     end    //***********************************************************************////////------------------------  Frame Generators  ---------------------------////////***********************************************************************//// The example design uses Block RAM based frame generators to provide test    // data to the GTs for transmission. By default the frame generators are      // loaded with an incrementing data sequence that includes commas/alignment    // characters for alignment. If your protocol uses channel bonding, the      // frame generator will also be preloaded with a channel bonding sequence.         // You can modify the data transmitted by changing the INIT values of the frame    // generator in this file. Pay careful attention to bit order and the spacing    // of your control and alignment characters.    // gtx_aurora_x2_GT_FRAME_GEN #//(     //     .WORDS_IN_BRAM(EXAMPLE_WORDS_IN_BRAM)// )    // gt0_frame_gen    //(     //     // User Interface     //     .TX_DATA_OUT                    ({gt0_txdata_float_i,gt0_txdata_i,gt0_txdata_float16_i}),    //.TXCTRL_OUT({gt0_txcharisk_float_i,gt0_txcharisk_i}),    //// System Interface    //.USER_CLK(gt0_txusrclk2_i),    //.SYSTEM_RESET(gt0_tx_system_reset_c)// );    // gtx_aurora_x2_GT_FRAME_GEN #//(     //     .WORDS_IN_BRAM(EXAMPLE_WORDS_IN_BRAM)// )    // gt1_frame_gen    //(     //     // User Interface     //     .TX_DATA_OUT                    ({gt1_txdata_float_i,gt1_txdata_i,gt1_txdata_float16_i}),    //.TXCTRL_OUT({gt1_txcharisk_float_i,gt1_txcharisk_i}),    //// System Interface    //.USER_CLK(gt1_txusrclk2_i),    //.SYSTEM_RESET(gt1_tx_system_reset_c)// );    //***********************************************************************////////------------------------  Frame Checkers  -----------------------------////////***********************************************************************//// The example design uses Block RAM based frame checkers to verify incoming       // data. By default the frame generators are loaded with a data sequence that      // matches the outgoing sequence of the frame generators for the TX ports.         // You can modify the expected data sequence by changing the INIT values of the frame    // checkers in this file. Pay careful attention to bit order and the spacing    // of your control and alignment characters.         // When the frame checker receives data, it attempts to synchronise to the      // incoming pattern by looking for the first sequence in the pattern. Once it      // finds the first sequence, it increments through the sequence, and indicates an      // error whenever the next value received does not match the expected value.    // assign gt0_frame_check_reset_i = (EXAMPLE_CONFIG_INDEPENDENT_LANES==0)?reset_on_data_error_i:gt0_matchn_i;    // gt0_frame_check0 is always connected to the lane with the start of char      // and this lane starts off the data checking on all the other lanes. The INC_IN port is tied off    // assign gt0_inc_in_i = 1'b0;//     gtx_aurora_x2_GT_FRAME_CHECK #//( // .RX_DATA_WIDTH ( 32 ),//.RXCTRL_WIDTH( 4 ),//.COMMA_DOUBLE( 16'h04bc ),//.WORDS_IN_BRAM(EXAMPLE_WORDS_IN_BRAM),//.START_OF_PACKET_CHAR( 32'h060504bc )//     )//     gt0_frame_check//( //         // GT Interface //         .RX_DATA_IN                     (gt0_rxdata_i),//.RXCTRL_IN(gt0_rxcharisk_i),//.RXENMCOMMADET_OUT(gt0_rxmcommaalignen_i),//.RXENPCOMMADET_OUT(gt0_rxpcommaalignen_i),//.RX_ENCHAN_SYNC_OUT( ),//.RX_CHANBOND_SEQ_IN(tied_to_ground_i),//// Control Interface//.INC_IN(gt0_inc_in_i),//.INC_OUT(gt0_inc_out_i),//.PATTERN_MATCHB_OUT(gt0_matchn_i),//.RESET_ON_ERROR_IN(gt0_frame_check_reset_i),//// System Interface//.USER_CLK(gt0_rxusrclk2_i),//.SYSTEM_RESET(gt0_rx_system_reset_c),//.ERROR_COUNT_OUT(gt0_error_count_i),//.TRACK_DATA_OUT(gt0_track_data_i)//     );//     assign gt1_frame_check_reset_i = (EXAMPLE_CONFIG_INDEPENDENT_LANES==0)?reset_on_data_error_i:gt1_matchn_i;    // in the "independent lanes" configuration, each of the lanes looks for the unique start char and    // in this case, the INC_IN port is tied off.    // Else, the data checking is triggered by the "master" lane    // assign gt1_inc_in_i = (EXAMPLE_CONFIG_INDEPENDENT_LANES==0)?gt0_inc_out_i:1'b0;//     gtx_aurora_x2_GT_FRAME_CHECK #//( // .RX_DATA_WIDTH ( 32 ),//.RXCTRL_WIDTH( 4 ),//.COMMA_DOUBLE( 16'h04bc ),//.WORDS_IN_BRAM(EXAMPLE_WORDS_IN_BRAM),//.START_OF_PACKET_CHAR( 32'h060504bc )//     )//     gt1_frame_check//( //         // GT Interface //         .RX_DATA_IN                     (gt1_rxdata_i),//.RXCTRL_IN(gt1_rxcharisk_i),//.RXENMCOMMADET_OUT(gt1_rxmcommaalignen_i),//.RXENPCOMMADET_OUT(gt1_rxpcommaalignen_i),//.RX_ENCHAN_SYNC_OUT( ),//.RX_CHANBOND_SEQ_IN(tied_to_ground_i),//// Control Interface//.INC_IN(gt1_inc_in_i),//.INC_OUT(gt1_inc_out_i),//.PATTERN_MATCHB_OUT(gt1_matchn_i),//.RESET_ON_ERROR_IN(gt1_frame_check_reset_i),//// System Interface//.USER_CLK(gt1_rxusrclk2_i),//.SYSTEM_RESET(gt1_rx_system_reset_c),//.ERROR_COUNT_OUT(gt1_error_count_i),//.TRACK_DATA_OUT(gt1_track_data_i)//     );//     assign TRACK_DATA_OUT = track_data_out_i;//     assign track_data_out_i =  //                                 gt0_track_data_i &//                                 gt1_track_data_i ;//-------------------------------------------------------------------------------------//-------------------------Debug Signals assignment--------------------     assign  gt0_rxlpmen_i                        =  tied_to_vcc_i;     assign  gt1_rxlpmen_i                        =  tied_to_vcc_i;//------------ optional Ports assignments --------------assign  gt0_rxprbscntreset_i                 =  tied_to_ground_i; assign  gt0_rxprbssel_i                      =  0; assign  gt0_loopback_i                       =  0;   assign  gt0_txdiffctrl_i                     =  0; assign  gt0_rxbufreset_i                     =  tied_to_ground_i; assign  gt0_rxcdrhold_i                      =  tied_to_ground_i; //------GTH/GTPassign  gt0_rxdfelpmreset_i                  =  tied_to_ground_i; assign  gt0_rxpmareset_i                     =  tied_to_ground_i; assign  gt0_rxpolarity_i                     =  tied_to_ground_i; assign  gt0_rxpd_i                           =  0; assign  gt0_txprecursor_i                    =  0; assign  gt0_txpostcursor_i                   =  0; assign  gt0_txchardispmode_i                 =  0; assign  gt0_txchardispval_i                  =  0; assign  gt0_txpolarity_i                     =  tied_to_ground_i; assign  gt0_txpd_i                           =  0; assign  gt0_txprbsforceerr_i                 =  tied_to_ground_i; assign  gt0_txprbssel_i                      =  0; assign  gt1_rxprbscntreset_i                 =  tied_to_ground_i; assign  gt1_rxprbssel_i                      =  0; assign  gt1_loopback_i                       =  0;   assign  gt1_txdiffctrl_i                     =  0; assign  gt1_rxbufreset_i                     =  tied_to_ground_i; assign  gt1_rxcdrhold_i                      =  tied_to_ground_i; //------GTH/GTPassign  gt1_rxdfelpmreset_i                  =  tied_to_ground_i; assign  gt1_rxpmareset_i                     =  tied_to_ground_i; assign  gt1_rxpolarity_i                     =  tied_to_ground_i; assign  gt1_rxpd_i                           =  0; assign  gt1_txprecursor_i                    =  0; assign  gt1_txpostcursor_i                   =  0; assign  gt1_txchardispmode_i                 =  0; assign  gt1_txchardispval_i                  =  0; assign  gt1_txpolarity_i                     =  tied_to_ground_i; assign  gt1_txpd_i                           =  0; assign  gt1_txprbsforceerr_i                 =  tied_to_ground_i; assign  gt1_txprbssel_i                      =  0;//------------------------------------------------------// assign resets for frame_gen modules     assign  gt0_tx_system_reset_c = !gt0_txfsmresetdone_r2;     assign  gt1_tx_system_reset_c = !gt1_txfsmresetdone_r2;    // assign resets for frame_check modules     assign  gt0_rx_system_reset_c = !gt0_rxresetdone_r3;     assign  gt1_rx_system_reset_c = !gt1_rxresetdone_r3;  assign gt0_drpaddr_i = 9'd0; assign gt0_drpdi_i = 16'd0; assign gt0_drpen_i = 1'b0; assign gt0_drpwe_i = 1'b0; assign gt1_drpaddr_i = 9'd0; assign gt1_drpdi_i = 16'd0; assign gt1_drpen_i = 1'b0; assign gt1_drpwe_i = 1'b0; assign soft_reset_i = tied_to_ground_i; endmodule      

3. 在线调试

调试思路:如果没有多余的板卡,你就用ip核进行回环调试,具体看ug476手册第88页进行配置(广子:上xianyu搜麻酱就烧饼,获取xilinx全系列文档手册),近端pcs和近端pma,如果这样调试通了,那基本没问题了。

TX链路:

可以很清晰的看到,当我的sys_on拉高的时候,经过编码后的数据包已经有效的发送出去了

a0f9951a-147c-11f1-90a1-92fbcf53809c.png

RX链路:

可以看到,当我的vld有效的时候,接收到的正好是发送过来的顺序数,和发送的有效数据包一致!

a159e6b8-147c-11f1-90a1-92fbcf53809c.png

vio调试:

说明:

1.sys_on_sim是总的系统启动信号

2.soft_vld是控制剩余的复位GT链路信号和回环测试的信号

a1bd5fe0-147c-11f1-90a1-92fbcf53809c.png

原文链接:https://adg.csdn.net/696f2038437a6b4033696ade.html