作者:Zhang Cheng,AMD工程师;来源:AMD开发者社区
PAM4(4-Level Pulse Amplitude Modulation) 的全称是四电平脉冲幅度调制,通过种不同的电平进行信号传输,每个电平幅度分别对应00、01、10和11。每个周期可以传输两个bit的信息,相比传统的NRZ模式,信号传输速率相当于原来的两倍,当前主流的400G光模块广泛采用PAM4技术。Versal器件的GTM支持PAM4电平,本文将介绍如何使用GTM仿真和观察PAM4信号。
1. 新建GTM example design
1)点击Vivado左侧导航栏Create Block design新建bd文件。
2)在bd的空白处右击,选择Add IP,在弹出的对话框种选择Versal ACAPs Transceivers Wizard。
3)配置Transceiver Wizard
Transceiver Type选择GTM
Transceiver Configs Protocol页面可以选择多种preset的模板,这里选择GTM:(PAM4) Ethernet 53G,其余保持默认
4) 右击IP选择Open IP Example Design
2. 运行行为仿真
1) 在Settings页面的Simulation菜单中加入命令-d SIM_SPEED_UP可加速仿真结束的时间,如下图所示:
2) 单击Run Simulation进入到仿真界面,并且全速运行直到仿真结束。
3. TestBench代码分析
1) 进入到仿真界面以后,首先会看到GT_Serial_TX_rxp/n和GT_Serial_RX_rxp/n都处于高阻(High-Z)状态,这是因为外部的端口信号只支持0和1两种状态,而PAM4信号有0,1,2,3四种状态,端口上无法显示出4种电平状态所导致。
2) 为了解决这个问题,需要把端口等效成integer。以GTM Ch0为例,在Testbench里面定义了两个integer类型的信号名:gtm_ch0_p/n。
3) Testbench中通过以下方式对信号赋值:
force gtm_ch0_p = wrapper_inst.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMTXP_integer;
force gtm_ch0_n = wrapper_inst.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMTXN_integer;
force wrapper_inst.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMRXN_integer = gtm_ch0_n;
force wrapper_inst.gt_quad_base_0_exdes_bd_i.gt_quad_base_0.inst.quad_inst.CH0_GTMRXP_integer = gtm_ch0_p;
通过这个路径可以看到,在GTM的Quad中已经对TXP/N定义了一个integer,通过force的方式直接把Integer赋值到gtm_ch0_p/n,再赋值给底层GTM的CH0_GTMRXP/N_integer,从而模拟外部回环。
4) 因此,需要在Watch窗口中观察gtm_ch0_p/n或者底层的CH0_GTMTXP/N_integer和CH0_GTMRXP/N_integer。
5) 对信号名右击,在弹出的Waveform Style中选择Analog,然后在Analog Settings中把Interpolation Style设置为Hold。这样就可以更加直观的查看PAM4信号变化了。
6) 当Versal GTM模式设置为NRZ时,也需要同样观察相关的integer信号。