文章目录
- 前言
- 一、设计框图
- 二、模块说明
- 三、上板
- 3.1、发送端
- 3.1、接收端
- 四、总结
前言
上文介绍了10G/25G Ethernet Subsystem IP核使用,本文将在此基础上介绍40G/50G Ethernet Subsystem IP核的使用,总体区别不大。
一、设计框图
由于40G以太网需要使用QSFP,需要四个GT channel,所以一个GT QUAD只能实现一个40G端口,本次实验如上图所示,俩个40G以太网IP核通过QSFP端口相互通信。每个端口使用独立的GT参考时钟,当然也可以共用一个参考时钟(如下图,不过要在代码里改一下COMMON参考时钟输入选择),GTY允许使用当前BANK上下各俩个BANK的参考时钟(7系列只允许上下各一个)。
二、模块说明
各个模块与10G并没有区别,IP核的信号线也几乎一致。只是将l_ethernet_1_clocking_wrapper模块放到了顶层,方便多个BANK之间共用一个外部GT参考时钟。(如下图:我会在下一篇文章当中进行详细介绍,暂时还在搞)
本人在上板验证时遇到了奇怪的BUG:
tx_core_reset_in_0信号和rx_core_reset_in_0信号我本来和10G一样给的是0,然后接收端无法正常接收数据,后来给成i_sys_rst其他复位(这个也是示例工程的做法),BUG就消失了,但是我重新将复位信号变为0以后也并没有再出现BUG,不知道是啥情况。。。
l_ethernet_1_shared_logic_wrapper i_l_ethernet_1_sharedlogic_wrapper
(
.gt_txusrclk2_0 (o_tx_clk_out ),
.gt_rxusrclk2_0 (o_rx_clk_out ),
.rx_core_clk_0 (w_rx_core_clk ),
.gt_tx_reset_in_0 (w_gt_reset_tx_done_out|w_gtwiz_reset_tx_datapath_in),
.gt_rx_reset_in_0 (w_gt_reset_rx_done_out|w_gtwiz_reset_rx_datapath_in),
.tx_core_reset_in_0 (i_sys_rst),
.rx_core_reset_in_0 (i_sys_rst),
.tx_core_reset_out_0 (w_tx_core_reset ),
.rx_core_reset_out_0 (w_rx_core_reset ),
.usr_tx_reset_0 (o_user_tx_reset ),
.usr_rx_reset_0 (o_user_rx_reset ),
.rx_serdes_reset_out_0 (w_rx_serdes_reset ),
.gtwiz_reset_all_0 (w_gtwiz_reset_all ),
.gtwiz_reset_tx_datapath_out_0 (w_gtwiz_reset_tx_datapath_out ),
.gtwiz_reset_rx_datapath_out_0 (w_gtwiz_reset_rx_datapath_out ),
.sys_reset (i_sys_rst ),
.dclk (i_dclk )
);
三、上板
上板不论是各个BANK独立使用本BANK的参考时钟还是共享参考时钟都是正常的,
3.1、发送端
3.1、接收端
四、总结
完整工程代码参考:https://github.com/shun6-6/Uplus_40g_etg_design