基于Arria 10 Native PHY的10G BASE-R仿真流程介绍
【时间:2017 年 08 月 31 日, 来源:本站原创, 作者:Penn Tan】
10GBASE-R主要用于SFP光模块的传输。10G BASE-KR主要用来实现背板的芯片之间的数据传输。10G BASE-KR有独立的IP CORE可以调用,并且会附带生成例子工程和相关的仿真工程,比较容易实现实例仿真。而目前QII16.0的版本是没有单独的10G BASE-R的IP CORE的,需要调用Native PHY并选用预设的10G BASE-R协议来实现。本应用文档是为了让用户快速地熟悉使用Arria 10 Native PHY实现10G BASE-R预设协议,并进行编译,仿真和验证。
在我们使用Arria 10 Native PHY实现10G BASE-R之前,我们先要查阅ug_arria10_xcvr_phy.pdf的文档,仔细阅读2.6.2 10GBASE-R, 10GBASE-R with IEEE 1588v2, and 10GBASE-R with FECVariants章节,以了解10GBASE-R的在IEEE802.3-2008Open System Interconnection的所在层次和作用,并了解10GBASE-R的PCS+PMA组成结构,时钟体系和端口连接方式。虽然在Native PHY中预设了10GBASE-R的协议参数,通过文档可以了解这些设置的作用和为什么要这样设置。
了解完文档,然后我们开始使用Quartus Prime16.0 Standard Edition来例化IP,建立顶层,并做简单的数据收发的仿真。要完成基本的数据收发仿真,我们至少需要例化Arria 10 Transceiver Native PHY,Arria 10 Transceiver CMU PLL,Transceiver PHY Reset Controller三个模块,当然实际应用中我们选择在NativePHY中使能动态重配的选项。具体生成的模块如下,详细设置见与文档对应仿真工程。
PHY_10GBASE_R(Arria 10 TransceiverNative PHY):选择了预设的10GBASE-R协议,CDR参考时钟频率设置为156.25MHz,导出了反映CDR锁定到数据的rx_is_lockedtodata ,反映高误码率的rx_enh_highber,反映同步对齐的rx_enh_blk_lock等接收通道状态的信号。
PHY_PLL(Arria 10Transceiver CMU PLL):输出的高速时钟频点在Native PHY的TX PMA页面可以查询到为5156.25MHz。
PHY_reset(TransceiverPHY Reset Controller):复位模块,根据通道数目来设置,这里采用默认设置即可。
xgmii_src(产生发送数据):此处仅做简单的收发测试,输出固定的数据。
完成各个模块的例化,根据第二步文档的说明,完成对各个模块的接口连接设置。这部分工程比较繁琐。注意一点的是rx_coreclkin输入端口,即156.25 MHz xgmii_rx_clk输入时钟是由外部的MAC给的。
产生并仿真测试平台。10G BASE-R的仿真testbench比较容易编写,难点在于库文件的编译,需要注意顺序。每个IP都生成了相应的仿真脚本,即在工程目录IP的文件下(如工程目录\PHY_10GBASE_R(IP名称)\sim\mentor下),有一个叫做msim_setup.tcl的文件。整个工程的库文件编译,需要把每个IP生成的msim_setup.tcl中跟该IP相关的库文件编译条目,全部按照一定顺序整合在一个.do或tcl中,本例采用.do文件,仿真工程中已经提供做好的.do。这步一般比较繁琐费时间,并且在ModelSim编译过程报错后,还要回过头来仔细检查。
仿真的结果见如下。发送数据正确接收,并且状态信号也表现正常。
完整的10G BASE-R设计,可以搭配官方的Low Latency Ethernet 10G MAC IP Core.