基于10G Ethernet subsystem 的简易万兆光纤通信

本文详细描述了一种利用HUAWEI02310SNN光模块和XilinxVC709开发板实现的简易万兆光纤通信系统,包括设计方案、10GEthernetsubsystem配置、模型仿真以及上板调试。重点讨论了高速串行接口、GT_COMMON和GT_CHANNEL的使用问题以及多驱动网络的解决方法。
摘要由CSDN通过智能技术生成

基于10G Ethernet subsystem 的简易万兆光纤通信

前言

1.采用器件

HUAWEI的02310SNN光模块、xlinx vc709开发板

2.参考的手册

《10 Gigabit Ethernet Subsystem v3.1 Product Guide Vivado Design Suite PG157 February 4, 2021》
《VC709 Evaluation Board for the Virtex-7 FPGA User Guide》

3.10G Ethernet subsystem ip核

本次实验不涉及以太网的封装,只是简单的为数据生成模块产生的数据添加mac头,以axi_stream的时序给到10G Ethernet subsystem ip的用户接口,实现两个光模块之间10.3125Gbit/s数据流的对传。
axi_stream时序IP核配置选择 64bit 模式和10GBASER模式, 10GBASER是一种使用 64B/66B 编码(不是在千兆以太网中所用的 8B /10B)的串行接口,数据流为10.3125Gbit/s。其参考时钟为10.3125Gbit/s/66=156.25MHz
在这里插入图片描述

实现简易的光纤通信就取消了 AXI4-LITE 的配置状态接口, 基本 mac 功能可以在接口变量控制更方便。
在这里插入图片描述

DRP时钟100MHz
在这里插入图片描述

最后勾选上shared logic in example design,用上example里面的gt common的qpll来驱动同一个quad(bank)里面的4个sfp

详细的GT高速收发器知识可以先看看网上的介绍,然后直接参考官方手册,网上推荐的介绍:
VIVADO IP核:GT高速收发器(概述和IP example)https://zhuanlan.zhihu.com/p/559776073

详细的设计方案

1.总体架构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如图所示,这是整体的设计框图。tx_test_data模块产生自定义的裸数据,送到MAC_10gEngine_p2sfp2里面的MAC_TX进行组帧,添加mac头,并将组好帧的数据以axi_stream的时序给到MAC_10gEngine_p2sfp2里面的10G Ethernet Subsystem用户接口,并转串发送出去

MAC_10gEngine_p3sfp1的10G Ethernet Subsystem收到来自MAC_10gEngine_p2sfp2发送过来的串行数据,串转并,以axi_stream时序,将数据给到MAC_10gEngine_p3sfp1的MAC_RX模块,MAC_RX首先将收到数据的mac头提取出来,和自身的mac地址比对,看是否相同,如相同,则将数据解析出来,送到上层
顶层架构如下:

Entity: top_pass_onlymac_10g

  • File: top_pass_onlymac_10g.v

Diagram
在这里插入图片描述

Generics

Generic nameTypeValueDescription
P_SOURCE_MAC_SFP248’h00_11_22_33_44_55
P_TARTGET_MAC_SFP248’h00_55_00_55_00_55
P_SOURCE_MAC_SFP148’h00_55_00_55_00_55
P_TARTGET_MAC_SFP148’h00_11_22_33_44_55

Ports

Port nameDirectionTypeDescription
sys_clk_pinput
sys_clk_ninput
key_reset_pinput
txn_sfp2output
txp_sfp2output
rxn_sfp2input
rxp_sfp2input
txn_sfp1output
txp_sfp1output
rxn_sfp1input
rxp_sfp1input
tx_fault_sfp2input
mod_detect_sfp2input
los_sfp2input
TX_DISABLE_p2output
TX_DISABLE_p3output
TX_DISABLE_p4output
TX_DISABLE_p5output
tx_fault_sfp1input
mod_detect_sfp1input
los_sfp1input
USER_CLOCK_Pinputsi570的上电差分时钟
USER_CLOCK_Ninput
USER_SMA_CLOCK_Poutput
USER_SMA_CLOCK_Noutput
SMA_MGT_REFCLK_Pinput参考时钟
SMA_MGT_REFCLK_Ninput
led1output亮说明subsystem的核准备好了
led2output

Signals

NameTypeDescription
lockedwire
resetwire
dclkwire
coreclkwire
areset_coreclkwire
gttxresetwire
gtrxresetwire
txuserrdywire
txusrclkwire
txusrclk2wire
reset_counter_donewire
qplllock_outwire
qplloutclkwire
qplloutrefclkwire
core_ready_sfp2wire
o_send_data_sfp2wire [63:0]
o_send_data_sfp2_validwire
txoutclk_sfp2wire
i_target_mac_sfp2wire [47:0]通过这几个信号可以修改mac_engine的源mac地址和目的mac地址
i_target_mac_sfp2_validwire通过这几个信号可以修改mac_engine的源mac地址和目的mac地址
i_source_mac_sfp2wire [47:0]通过这几个信号可以修改mac_engine的源mac地址和目的mac地址
i_source_mac_sfp2_validwire通过这几个信号可以修改mac_engine的源mac地址和目的mac地址
o_post_data_sfp2wire [63:0]post的数据是给到mac engine上层的
o_post_last_sfp2wirepost的数据是给到mac engine上层的
o_post_valid_sfp2wire
o_rec_src_mac_sfp2wire [47:0]解析出来的收到数据的源mac地址
o_rec_srcmac_valid_sfp2wire
o_rec_target_mac_sfp2wire [47:0]解析出来的收到数据的目的mac地址
o_rec_targetmac_valid_sfp2wire
core_ready_sfp1wire
o_send_data_sfp1wire [63:0]
o_send_data_sfp1_validwire
txoutclk_sfp1wire
i_target_mac_sfp1wire [47:0]
i_target_mac_sfp1_validwire
i_source_mac_sfp1wire [47:0]
i_source_mac_sfp1_validwire
o_post_data_sfp1wire [63:0]
o_post_last_sfp1wire
o_post_valid_sfp1wire
o_rec_src_mac_sfp1wire [47:0]
o_rec_srcmac_valid_sfp1wire
o_rec_target_mac_sfp1wire [47:0]
o_rec_targetmac_valid_sfp1wire

Instantiations

  • IBUFDS_inst: IBUFDS
  • BUFG_inst: BUFG
  • ODDR_out_clock_inst_user_clock: ODDR
  • OBUFDS_inst: OBUFDS
  • clk_wiz_0: clk_wiz_0
  • tx_test_data_p2sfp2: tx_test_data
  • axi_10g_ethernet_0_shared_clocking_wrapper_inst: axi_10g_ethernet_0_shared_clocking_wrapper
  • MAC_10gEngine_p2sfp2_inst: MAC_10gEngine_p2sfp2
  • MAC_10gEngine_p3sfp1_inst: MAC_10gEngine_p3sfp1
  • ila_0_instance: ila_0

2.MAC_10gEngine

MAC_10gEngine_p2sfp2和MAC_10gEngine_p3sfp1一样的,就以MAC_10gEngine_p2sfp2来说了

Entity: MAC_10gEngine_p2sfp2

  • File: MAC_10gEngine_p2sfp2.v

Diagram
在这里插入图片描述

Generics

Generic nameTypeValueDescription
P_SOURCE_MAC48’h00_11_22_33_44_55
P_TARTGET_MAC48’h00_55_00_55_00_55

Ports

Port nameDirectionTypeDescription
dclkinput
i_rstinput
i_target_macinput[47:0]通过外部模块实时修改mac_engine的mac地址
i_target_mac_validinput通过外部模块实时修改mac_engine的mac地址
i_source_macinput[47:0]通过外部模块实时修改mac_engine的mac地址
i_source_mac_validinput通过外部模块实时修改mac_engine的mac地址
o_post_dataoutput[63:0]
o_post_lastoutput
o_post_validoutput
o_rec_src_macoutput[47:0]
o_rec_srcmac_validoutput
o_rec_target_macoutput[47:0]
o_rec_targetmac_validoutput
i_send_datainput[63:0]
i_send_data_validinput
txnoutput
txpoutput
rxninput
rxpinput
tx_faultinput
tx_disableoutput
mod_detectinput
losinput
qplllockinput
qplloutclkinput
qplloutrefclkinput
areset_coreclkinput
gttxresetinput
gtrxresetinput
txuserrdyinput
txusrclkinput
txusrclk2input
reset_counter_doneinput
txoutclkoutput
core_readyoutput
sim_speedup_controlSIM
coreclkinput

Signals

NameTypeDescription
pcspma_statuswire [7 : 0]
mac_status_vectorwire [2 : 0]
mac_tx_configuration_vectorwire [79:0]
mac_rx_configuration_vectorwire [79:0]
pcs_pma_configuration_vectorwire [535:0]
signal_detectwire
tx_ifg_delaywire [7 : 0]
tx_axis_aresetnwire
rx_axis_aresetnwire
o_axis_tx_tdatawire [63:0]
o_axis_tx_tkeepwire [7:0]
o_axis_tx_tlastwire
o_axis_tx_tuserwire
o_axis_tx_tvalidwire
o_axis_tx_treadywire
m_axis_rx_tdatawire [63:0]
m_axis_rx_tkeepwire [7:0]
m_axis_rx_tlastwire
m_axis_rx_tuserwire
m_axis_rx_tvalidwire
block_lockwire
no_remote_and_local_faultswire
tx_disable_nwire

Instantiations

  • ethernet_core_p2sfp2: axi_10g_ethernet_0
  • MAC_rx_axistream_p2sfp2: MAC_rx_axistream
  • MAC_tx_axistream_p2sfp2: MAC_tx_axistream

3.axi_10g_ethernet_0_shared_clocking_wrapper

这个是example里面的,其描述为This is the Shared clocking wrapper level code for the 10G Gigabit Ethernet Core. It contains the shareable clocking,reset circuitry and the gt common block.

一定要注意一个quad只能有一个gtcommon, 同一个quad中重复使用GT_COMMON的话会出问题

axi_10g_ethernet_0_shared_clocking_wrapper对于同一个quad的4个sfp,只用例化一次就行

Entity: axi_10g_ethernet_0_shared_clocking_wrapper

  • File: axi_10g_ethernet_0_shared_clocking_wrapper.v

Diagram
在这里插入图片描述

Ports

Port nameDirectionTypeDescription
resetinput
refclk_pinput
refclk_ninput
dclkinput
txoutclkinput
txoutclk_outoutput
coreclkoutput
areset_coreclkoutputwire
gttxresetoutput
gtrxresetoutput
txuserrdyoutput
txusrclkoutput
txusrclk2output
reset_counter_doneoutput
qplllock_outoutput驱动ip核的参考时钟
qplloutclkoutput驱动ip核的参考时钟
qplloutrefclkoutput驱动ip核的参考时钟

Signals

NameTypeDescription
qplllockwire
refclkwire
counter_donewire
qpllresetwire

Instantiations

  • gt_common_block_i: axi_10g_ethernet_0_gt_common
  • ethernet_shared_clock_reset_block_i: axi_10g_ethernet_0_shared_clock_and_reset
  • 仿真及上板调试验证

1.modelsim仿真

在这里插入图片描述

可以看到sfp2发出的目的mac是sfp1的数据,在sfp1处成功解析接收了

2.上板调试验证并演示

连接方式如图
连接方式如图
在这里插入图片描述

gt的参考时钟要通过线引过来,光模块需要加个7db衰减,详情见我的文章https://zhuanlan.zhihu.com/p/666731398

可以看到代表sfp2处的10g Ethernet subsystem和是是sfp1处的10g Ethernet subsystem的工作状态灯亮了,说明正常工作了。在sfp1的接收处,用ila抓取解析出来的数据,以o_rec_srcmac_valid_sfp1的上升沿为触发条件,如图
在这里插入图片描述

成功解析出sfp2发送过来的数据的mac地址,再次以其他信号作为触发,皆通过验证。

总结分析

1.高速串行接口与GT_COMMON / GT_CHANNEL 问题汇总

最开始我在sfp1和sfp2的macengine上都用了gtcommon,即例化了两次axi_10g_ethernet_0_shared_clocking_wrapper,同一个quad中重复使用GT_COMMON,导致错误。

一个quad只能有一个gtcommon。

另外驱动时要注意GT_COMMOM模块,即一个GT_COMMON最多可以驱动同一个QUAD上的4个GT_CHANNEL,如果说要驱动超过四个或者其他QUAD上的GT,必须要生成新的GT_COMMON模块,来保证其他QUAD上的GT可以正常工作。

这里有篇文章讲的挺好https://cloud.tencent.com/developer/article/1529579

2.Multiple DriverNets: Net ax-10g ethemet 0 shared clocking wrapper inst/ethernet shared cdlock reset blok p3sfp1/B2[0] has multiple drivers

我在axi_10g_ethernet_0_shared_clocking_wrapper例化了两次axi_10g_ethernet_0_shared_clock_and_reset,如下图,发生了错误,一个quad里面4个sfp都用同一个axi_10g_ethernet_0_shared_clock_and_reset,只用例化一次,然后同时给到4个sfp上的10g Ethernet subsystem ip核即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

帅癌晚期的彦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值