GTM chip to chip仿真

作者:Li Simon,AMD工程师;来源:AMD开发者社区

Example design simulation是同一个器件的GTM仿真。如果需要做两个芯片GTM对接的仿真,可以用两个GTM wizard,生成example,通过对Example的testbench里做适当修改来实现。

这个例子为了简化,假定两块板子的GTM同样的配置,只是做一个简单的demo。Vivado 2023.2,board:VPK120.

一. 用GTM wizard配置如下,两个通道分别用Ch0和Ch2,生成example design。

配置1.png

二. 参考生成的example design以及testbench,按照需求进行修改。

由于需要是对PAM4的0/1/2/3的进行模拟,因此需要根据当前的层级结构找到位于UNISIM对应的内部变量:CH{0/1/2/3} _GTM{T/R}X{P/N}_integer看,如:CH0_GTMTXN_integer。

以下是对应的_integer连接, PRBS设置,多次复位的一个例子的修改。其他的基本上都是两个参考设计的例子。

always @(*)

  begin

    //bd0 TX -> bd1 RX

    force bd0_bd1_gtm_ch0_n = wrapper_inst_0.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMTXN_integer;

force bd0_bd1_gtm_ch0_p = wrapper_inst_0.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMTXP_integer;

    force wrapper_inst_1.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMRXN_integer = bd0_bd1_gtm_ch0_n;

    force wrapper_inst_1.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMRXP_integer = bd0_bd1_gtm_ch0_p;

 

其他ch1/ch2/ch3类似。

 

    //bd1 TX -> bd0 RX

    force bd1_bd0_gtm_ch0_n = wrapper_inst_1.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMTXN_integer;

    force bd1_bd0_gtm_ch0_p = wrapper_inst_1.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMTXP_integer;

    force bd1_bd0_gtm_ch1_n =

    force wrapper_inst_0.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMRXN_integer = bd1_bd0_gtm_ch0_n;

    force wrapper_inst_0.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMRXP_integer = bd1_bd0_gtm_ch0_p;

其他ch1/ch2/ch3类似

  end

 

PRBS 设置:

always@(*) begin

 //for wrapper_inst0 quad

force wrapper_inst_0.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.ch0_rxprbssel = 5;

 force wrapper_inst_0.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.ch0_txprbssel = 5;

 

force wrapper_inst_1.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.ch0_rxprbssel = 5;

 force wrapper_inst_1.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.ch0_txprbssel = 5;

 end

 

 

initial

  begin

              rate_sel_ip0 = 4'h0;

              rate_sel_ip1 = 4'h0;

              gtresetip0 = 1'b0;

              gtresetip1 = 1'b0;

      #800ns; 

              gtresetip0 = 1'b1;

              gtresetip1 = 1'b1;

      #60ns;

              gtresetip0 = 1'b0;

              gtresetip1 = 1'b0;

      //repeat 20 times reset ch2 and ch0

      repeat (20) begin

      #140000ns;

              //gtresetip0 = 1'b1;

              gtresetip1 = 1'b1;//reset ch2

      #60ns;

              //gtresetip0 = 1'b0;

              gtresetip1 = 1'b0;//release ch2            

      #140000ns;

              gtresetip0 = 1'b1;//reset ch0

              //gtresetip1 = 1'b1;

      #60ns;

              gtresetip0 = 1'b0;

              //gtresetip1 = 1'b0;//release ch0

    end

                                     

  



  end

Example simulation包括提供了free running的时钟和GTM参考钟,以及对reset模块的reset all。完成复位之后,会提供激励对link的检测。仿真脚本也包括了对PLL lock检测,时钟频率的检测,如果多速率切换的仿真。

三.仿真结果如下,多次复位测试以及PRBS测试两块板子对接,附上测试的testbench:

配置2.png

更多信息可以参考PG315第7章,PG331的第5章。

最新文章

最新文章