基于VC709开发板利用IBERT实现SFP/SFP+ connectors GTH收发器的测试

基于VC709开发板利用IBERT实现SFP/SFP+ connectors GTH收发器的测试

具体的实现流程有以下几篇文章还不错

  1. https://blog.csdn.net/ZZ2588/article/details/121384818?spm=1001.2014.3001.5506
  2. https://zhuanlan.zhihu.com/p/93353191
  3. https://zhuanlan.zhihu.com/p/138225924
  4. https://zhuanlan.zhihu.com/p/46296438

流程一:例化IBERT 7 Series GTH IP核

在这里插入图片描述
在这里插入图片描述

这一页注意一下,选择SFP/SFP+ connectors所在的bank,如下图,还有我们的VC709 GTH的参考时钟要选SMA引入进来的时钟,上面的参考文章和后面会说到GTH 的参考时钟是由两根电缆引进来的差分时钟。

在这里插入图片描述

系统时钟就选择200MHz的差分时钟,具体可以在User Guide里面时钟部分找
在这里插入图片描述
在这里插入图片描述

配置完成

流程二:GTH 参考时钟的设置

首先我们要知道SFP/SFP+ connectors的GTH,它的参考时钟要用si570上电就有的156.25MHz差分时钟USER_CLOCK_P和USER_CLOCK_N,输入到FPGA芯片,然后输出给USER_SMA_CLOCK_P和USER_SMA_CLOCK_N两个SMA口,再通过电缆连接到SFP/SFP+ connectors的GTH参考时钟的SMA connectors上
在这里插入图片描述

具体的连接可以看实物图
在这里插入图片描述

代码的实现主要是在ibert的example上加上几句原语

  //for SFP
  input             USER_CLOCK_P,
  input             USER_CLOCK_N,  
  output            USER_SMA_CLOCK_P,
  output            USER_SMA_CLOCK_N,


//forr sfp
  wire IBUFDS_out;
  wire BUFG_O;
  wire oddr_out;

  //for sfp
  IBUFDS #(
    .DIFF_TERM("FALSE"),       // Differential Termination
    .IBUF_LOW_PWR("TRUE"),     // Low power="TRUE", Highest performance="FALSE" 
    .IOSTANDARD("LVDS")     // Specify the input I/O standard
 ) IBUFDS_inst (
    .O(IBUFDS_out),  // Buffer output
    .I(USER_CLOCK_P),  // Diff_p buffer input (connect directly to top-level port)
    .IB(USER_CLOCK_N) // Diff_n buffer input (connect directly to top-level port)
 );

   BUFG BUFG_inst (
   .O(BUFG_O), // 1-bit output: Clock output
   .I(IBUFDS_out)  // 1-bit input: Clock input
  );

  ODDR #(
      .DDR_CLK_EDGE("OPPOSITE_EDGE"), //"OPPOSITE_EDGE" or "SAME_EDGE"
      .INIT(1'b0),    // Initial value of Q: 1'b0 or 1'b1
      .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
 ) ODDR_out_clock_inst_user_clock (
     .Q(oddr_out),   // 1-bit DDR output
     .C(BUFG_O),   // 1-bit clock input
     .CE(1'b1), // 1-bit clock enable input
     .D1(1'b1), // 1-bit data input (positive edge)
     .D2(1'b0), // 1-bit data input (negative edge)
     .R(),   // 1-bit reset
     .S()    // 1-bit set
);

  OBUFDS OBUFDS_inst (
    .O( USER_SMA_CLOCK_P),     // Diff_p output (connect directly to top-level port)
    .OB(USER_SMA_CLOCK_N),   // Diff_n output (connect directly to top-level port)
    .I(oddr_out)      // Buffer input
  );

这些原语的原理和作用不做介绍,有篇文章讲的挺好
https://cloud.tencent.com/developer/article/1801189

流程三:光模块的打开

由vc709的原理图我们可以看到,它默认是关闭的,因此要在代码里面把光模块打开
在这里插入图片描述

在这里插入图片描述

代码就简单的给个低电平就行

  output            TX_DISABLE_p2,
  output            TX_DISABLE_p3,
  output            TX_DISABLE_p4,
  output            TX_DISABLE_p5

  assign TX_DISABLE_p2 = 1'b0;
  assign TX_DISABLE_p3 = 1'b0;
  assign TX_DISABLE_p4 = 1'b0;
  assign TX_DISABLE_p5 = 1'b0;

流程三:检查光模块的发射光功率和饱和光功率,看看是否加衰减器

在一定的传输速率下,饱和光功率值指光模块接收端最大可以探测到的光功率,一般为-3dBm。当接收光功率大于饱和光功率的时候同样会导致误码产生。因此对于发射光功率大的光模块不加衰减回环测试会出现误码现象。甚至无法接收。

我用的是HUAWEI的02310SNN光模块,
它的参数为
在这里插入图片描述

因此需要接一个7dB的衰减
在这里插入图片描述

一开始我没有加衰减,导致ibet测试的时候,近端PCS回环和PMA回环status都是link的,但是在使用外部光纤none进行回环时就NO LINK

在这里插入图片描述
在这里插入图片描述

由图可知pll Status是locked,那么引入的参考时钟肯定没有问题,翻阅手册查看GTH 的Loopback Testing Overview,
在这里插入图片描述

发现只能是光模块和光纤的问题,再次检查光模块是否打开,进行检测,还是no link,于是找师兄23333,在一次偶然的测试中,师兄准备把光纤拔出但还未完全拔出之际,发现link上了。。。。原来是因为所采用的光模块发射功率太大了,直接回环接收不了。。

流程四:创建link实现自回环

这一步最开始的三篇文章都讲了,加上衰减器后,如图
在这里插入图片描述

测试结果如下
在这里插入图片描述

眼图的效果:

在这里插入图片描述

可以看到信号的效果非常好,有些博主的眼图信号质量不好,有可能他做回环的时候光模块没有加上衰减

ibert测试没问题了,接下来准备利用10g subsystem ip核进行数据的收发

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅癌晚期的彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值