这一篇在干嘛?
第 2 篇覆盖 UG1318 第 3~5 章:TX PMA 寄存器(0x400 段)、RX PMA 寄存器(0x200 段)、Common 寄存器(0x4100 段)。这些寄存器大多出厂有合理默认值,你不需要逐个配置——但当你遇到”链路眼图差、PLL 不锁、误码率异常”时,这一篇就是你的排查手册。第 1 篇见 HXT 寄存器全景与 PCS 寄存器。
TX PMA:发送侧 FFE、时钟路径与驱动
TX PMA 区从 ADDR 0x400 开始(lane0),第一组是发送均衡 FFE 的查找表:
TX_DATA_FFE00(0x400)~TX_DATA_FFE03(0x40C):每 8 位一个 LUT 项,共 16 个 tx_ffe_lut0~15,各占 7 位,默认全 0。FFE(前馈均衡)通过预加重/去加重补偿信道高频损耗,LUT 就是不同码型对应的补偿系数表。TX_DATA_FFE04(0x410)只有一个位 tx_ffe_en——FFE 总使能。
TX_CLK_PATH00(0x420)管理发送时钟通路:
| Bit | 字段 | 作用 |
|---|---|---|
| 16 | tx_rstn | TX 时钟路径复位(0=复位,1=正常) |
| 9:8 | tx_ratdiv_sel | 分频比:00=÷2,01=÷4,10=÷8,11=÷16 |
| 4 | tx_ratdiv_bypass | 1=旁路分频器 |
| 2:1 | tx_clksrc_sel | 时钟来源:00=CPLL 参考时钟,01=CPLL 非 PI 路径,10/11=CPLL+PI 路径 |
| 0 | tx_en | TX 时钟路径使能(默认 1) |
TX_DCC_CTRL(0x424)是占空比校正(Duty Cycle Correction)控制器:bit16 tx_manual_dcc_en 手动使能、bit17 DAC 使能、bit18/19 手动增减、bit25:20 手动 DAC 码值;bit15~4 的 tcomp/tsample/trst 配置比较器的比较/采样/复位间隔;状态寄存器 TX_DCC_STS(0x428)里有 tx_dcc_cal_done(bit15)和当前 DAC 码值 tx_dcc_dac_ctrl(bit9:4)。
驱动与检测相关:
TX_DRV_CTL(0x42C):bit16tx_slb_en使能近端 PMA 环回;bit15:14tx_slb_cur_sel选环回 CML 电流(2.4~3.6mA)。TX_RCV_DET_CTL(0x430):PCIe 检测对端接收器用的 RX 检测功能。bit3/2tx_rxdet_outn/outp是检测结果(R),bit1:0tx_rxdet_vsel选检测参考电压(0.55~0.70 倍 vcca_txdrv)。TX_PWR_CTL(0x84,在 PCS 区但管 PMA 上电):bit0tx_pwr_manual_en选顺序/手动上电模式,bit1tx_pwr_fast_sim加速仿真,bit28:24tx_rxdet_time检测间隔,bit13tx_ffe_sw_ovr允许软件直接控制 FFE LUT,bit11tx_ctl_byp和 bit8tx_byp_lane_align控制 TX 端口切换流程与多 lane 对齐旁路。TX_PMA_STS(0x88):bit31tx_pwr_ack上电完成应答,bit20:16tx_pwrsm_state上电状态机当前状态,bit9:8/6:4/2:0 分别是 pstate/width/rate 的镜像——查”TX 为什么没起来”先看这里。
PCIe 均衡系数在 TX_PCIE_EQ_G1(0x90)和 TX_PCIE_EQ_G2(0x94):各含 pre/main/post 三组 6 位光标系数(main 默认 6’b111111),bit31 是覆盖使能 pcie_ext_tx_eq_ovrd_g1/g2,配合 bit24 的 ext_txpi_mx_mode 可以把端口引脚复用为外部 PI 码输入。
TX PLL:锁相环配置与锁检测
lane 的 TX PLL(手册里叫 CPLL)由一串寄存器控制,都在 0x440~0x480:
TX_PLL_MAIN_CTL(0x440)是总开关面板:
| Bit | 字段 | 作用 |
|---|---|---|
| 0 | tx_pll_en | PLL 总使能(默认 1) |
| 2 | tx_pll_rstn | PLL 复位(0=复位模式,1=正常) |
| 3~6 | tx_pll_bias_en / vreg_en / pfd_cp_en / vco_en | 偏置、稳压器、鉴频鉴相+电荷泵、VCO 分级使能 |
| 7 | tx_pll_lock | 锁定标志(R):1=锁定 |
| 8 | tx_pll_vreg_rdy_topma | 稳压器就绪标志(R) |
| 16 | tx_pll_fracn_rstn | Sigma-Delta 调制器复位 |
| 18 | tx_pll_rstlock_n | 锁检测模块复位 |
| 31 | tx_fast_sim | 仿真加速 |
TX_PLL_LOOP_CTL(0x444)配环路滤波器与电荷泵:tx_pll_lpf_r1_sel(R1=0.5K32K,步进 0.5K)、1.1p,步进 0.1p)、tx_pll_lpf_c2_sel(C2=0.4ptx_pll_icp_bias(电荷泵偏置电流,idac=(15/6+bias/6)×10uA)、tx_pll_icp_branch(iout=(1/10+branch/10)×idac)、tx_pll_kvco_sel(KVCO 1~1.75 倍)、tx_pll_vctrl_sel(初始环路滤波电压)。这些模拟参数通常由 IP 向导按线速率算好,调试时一般不动。
TX_FBDIV_CTL00(0x448)管反馈分频:bit11:4 tx_pll_fbdiv 是整数分频比,bit21 tx_pll_fracn_en 打开小数分频,bit20 tx_pll_ssc_en 打开扩频时钟(SSC),bit19:12 tx_pll_fbdiv_code 可回读实际分频码。小数部分在 TX_PLL_FRACN_CTL(0x450):bit23:0 tx_pll_fracn_in 加上 24 位小数。SSC 参数在 TX_PLL_SSC_FREQ_DIV(0x454)和 TX_PLL_SSC_RANGE(0x458):前者是扩频幅度(3 位整数+14 位小数,最终幅度约 cordic_amp×1.647),后者是每步旋转角(决定扩频频率),并可选 center spread 或 up/down spread。
锁检测细节在 TX_FBDIV_CTL01(0x44C):bit30:24 tx_pll_lockdet 里的 lockdet[3:0] 设锁阈值(值越小对频差越敏感),lockdet[5:4] 设计数长度(409632768),lockdet[6] 是 fastsim;bit16 ÷16 或旁路)引出观测,bit12:8 tx_pll_ext_lock_en 允许外部直接给锁信号;bit19:18 tx_pll_refclk_det_div 配锁检测时参考时钟的分频。测试口在 TX_PLL_TEST_CTL(0x45C):bit0 使能测试模式后,可把反馈时钟或参考时钟经 tx_pll_test_div(÷2tx_pll_pi_code 可回读分频器 PI 码。
常见坑:
TX_PLL_MAIN_CTL[17](Reserved 字段)手册明确写着”上电后必须配置为 1”,而它的默认值恰好就是 1’b1——如果你软件初始化时把这整个寄存器回写成了 0,PLL 会有奇怪行为。凡是用软件批量初始化寄存器的,注意这类”上电后必须为某值”的字段。
参考时钟选择在 TX_GLBL_MISC00(0x470):bit9:7 tx_pll_refclk_sel 可选 ref0/ref1/QPLL 输出(默认)/CDR 时钟/单端 refclk_se[0]/[1];bit6:4 tx_ldo_txdrv_sel 调驱动 LDO 电平(0.90~0.98V);bit1/bit0 是 C66/C33 时钟使能(默认都开)。
RX PMA:衰减、CTLE 与 DFE 均衡
RX PMA 区从 0x200 开始(lane0)。模拟接收链路是”衰减器 ATT → CTLE → DFE → 采样”的顺序,寄存器也是这个顺序。
AFE_TERM_ATT00(0x214):
| Bit | 字段 | 作用 |
|---|---|---|
| 23:20 | rx_att_sel | 接收衰减:0000=正常模式不衰减,1111=最大衰减(近端 PMA 环回用),其他可调 |
| 19:16 | rx_rdiff_trim | 差分端接电阻微调(4’b0111≈100Ω) |
| 27:24 | rx_att_vcm_prog | CTLE 共模电压微调(4’b1000=585mV) |
| 8 | rx_att_highloss_en | 高损耗模式:DC 增益损失加 2.5dB |
| 5:4 | rx_term_vcm_sel | 端接共模:00=电源,01=地,10=浮空 |
| 0 | rx_slb_en | 近端 PMA 环回使能 |
ATT_CTLE00(0x218)~ATT_CTLE02(0x220)配置连续时间线性均衡器:rx_ctle_gain_sel(4’b0000=最大增益,4’b1010=-6dB,中间码值按 20*log[(20-N)/20] 折算 dB)、rx_ctle_peak(补偿峰值,v1.1 给了增益增量公式)、rx_ctle_pole_en(极点设置,高速应用置 0)、rx_ctle_gm_boost_en/gm_cap_en(boost 峰值频率)、以及 DC 偏移自动消除环 rx_afe_dcoc_en / highbw_en / halfres。bit8 rx_ctle_en 是 ATT+CTLE 总使能。
DFE(判决反馈均衡)集中在 DFE_SUMMER_VDAC_IDAC00(0x230)~07(0x24C):
- 00 号:bit0
rx_dfe_en总使能,bit2rx_dfe_idac_en求和端电流 DAC 使能,bit12:8rx_dfe_idac_tap6t2_en分使能 TAP2~TAP8 的自适应,bit6:4rx_dfe_scope_sel在”眼图监视”与”自适应”两种采样模式间切换。 - 01~03 号:数据/误差/示波器三组采样器的偏移 DAC 初值(偶数 bank 与奇数 bank 各一套)。
- 05
06 号:TAP1TAP8 的 DAC 初值/手动值。注意每个 tap 的满量程不同:tap1 最大 375mV、tap2 是 200mV、tap3 100mV、tap4 50mV、tap5~tap8 只有 25mV——离采样点越远的 tap 影响越小。 - 07 号:tap1 校准步进、等待窗口(1~20us)与每步采样数(2
RX 侧自己的 lane PLL 在 RX_CLK_PATH_WITH_PLL00(0x260)~04(0x270),字段与 TX PLL 高度对应:rx_pll_en/rstn(00 号 bit8/9,默认都 1)、电荷泵 rx_pll_icp_bias/icp_banch、环路滤波 rx_pll_lpf_r1_sel / c2_sel、KVCO 与 VCO cap、反馈整数分频 rx_pll_fbdiv_sel(02 号 bit15:8,写入会翻转内部 valid 信号把新分频比送下去)、小数分频 rx_pll_fracn_in(0x274,注意手册强调必须先写小数部分再写整数部分)、锁检测 rx_pll_lockdet(04 号)。锁定状态在 02 号 bit31 rx_pll_freq_lock。
RX 电源/状态在 RX_PWR_CTL(0x180,PCS 区)与 RX_PMA_STS(0x184):后者有 rx_pma_pwr_ack、rx_pwrsm_state、DPLL 锁定等;前者有 rx_ack_ovr/sw(复位完成指示软件覆盖)、rx_los_ovr/sw(信号丢失软件覆盖)、rx_cdr_ovr_en/val(CDR 数据有效软件覆盖)和 rx_pwr_manual_en(手动上电模式)。
RX CDR 与数据恢复
时钟数据恢复(CDR)配置在 RX_DESER_CDR00(0x290)~04(0x29C):
| 寄存器 | 关键字段 |
|---|---|
| CDR00 | bit27:24 rx_cdr_pattern_filter 码型滤波(默认 4’b0011);bit18:16 rx_cdr_phase_step 每步 PI 相位步进(1/2/4/8 单位);bit14:12 rx_cdr_kp_level 比例系数(x1/x2/x4);bit9 rx_cdr_rstn;bit8 rx_cdr_external_en(1=寄存器控制 PI,0=自动跟踪);bit0 rx_deserial_en 解串器使能 |
| CDR02 | bit1:0 rx_cdr_mode_sel(00=波特率采样,01=2 倍过采样);bit7:6 频率环使能;bit5:4 scope 模式(眼图自动扫描/手动);bit8 PON 信号源选择(LOS 检测器或外部端口);burst 处理时间等级(PON 应用) |
| CDR03 | burst 步进等级 1~3(PON 应用) |
| CDR04 | bit10:8 rx_cdr_burstphase 突发相位;bit14:12 跳变分裂数;bit5:4 CDR 时钟分频;bit0 CDR 时钟测试输出使能 |
调试 eye 时用到的 eye monitor 相关位在 PCS 区的 MISC_CTL_0(0x18C):bit3 fom_start 软件启动 FOM 测量、bit2 rx_em_done 眼图采集完成标志、bit27:8 rx_em_result_range 和 bit7:4 rx_em_result 返回四个象限的测量结果;FOM_STS_INT(0x1B8)返回自适应后的 h/v 位置与 FOM 值。内部信号观测口是 DEBUG_IO_CTRL(0x198)和 DEBUG_CLK_CTRL(0x19C):各 8 位选择码,把 lane 内部状态/时钟引到 debug IO 上,配合示波器或逻辑分析仪看。
RX 数字校准:RX_DIG_CALI 系列
RX PMA 有一整套上电/在线数字校准机制,控制寄存器 RX_DIG_CALI_1(0x2B4)14(0x2E8),结果寄存器 RX_DIG_CALI_STS_0(0x2EC)15(0x328)。不需要逐个背,掌握四个主题即可:
① DFE tap 自适应(CALI_1):bit0 dfe_auto_adapt_en 总使能;bit23:16 tap_enable 按位使能各 tap 自适应;bit31:24 tap_hold 按位冻结 tap 值(1=停止自适应保持当前值);bit11:8 tap1_gain 收敛速度(1X~128X)。自适应结果在 STS_3/STS_4:rx_dig_tap1~8_onm_b(R),另有 STS_4 bit31/30 的 tap1 完成/溢出错误标志。
② AFE/VGA 自适应(CALI_2~5):bit16 rx_afe_auto_adapt_en(CALI_2)使能 AFE 自适应,rx_afe_avg_power 设平均窗口(2^N);CALI_4 的 rx_amp_auto_adj_en 使能 VGA 自适应、rx_amp_0p4v 设 400mV 目标 DAC 值(步进 0.79mV,400mV=0x1FA)。结果在 STS_5:rx_dig_att_sel(VGA 结果)与 rx_dig_ctle_res_sel(AFE 结果)。
③ 采样器(slicer)偏移校准(CALI_68):CALI_6 的 8。rx_slicer_cal_data_en/err_en/sco_en 分通路使能数据/误差/示波器三路采样器校准,rx_ctle_cali_dig_en 总使能,rx_start_cnt 设每步等待;STS_1 逐个报告 16 个采样器(偶/奇 bank × data0/1、error0/1、scope0/1)的完成与 20ms 超时标志;校准结果在 STS_6
④ PI 码手动控制与回读:CALI_1214 提供三组”写码+触发脉冲”口(15 是高速数据/误差通路监视锁存口(写任意值触发锁存)。rx_cdr_pi_code_in、rx_scope_pi_code_in,各带一个 W 位时钟脉冲),回读在 STS_11:rx_cdr_pi_code_out(bit6:0)和 rx_scope_pi_code_out(bit14:8)——手册特别注明必须先触发 clk 脉冲再读地址。STS_12 回读 rx_pll_pi_code 与 fbdiv 码;STS_13
常见坑:
校准链路有依赖顺序(AFA/VGA/DFE/CDR 幅度校准各有 gain 与 enable),手动接管时若跳步打开,结果寄存器会保持无效值。最稳妥的做法是让上电校准自动跑完(读 STS_0~1 确认 done 标志),再按需用
tap_hold冻结或手动微调单个 tap。
Common 区:上电、ZCAL 与参考时钟
Common 区从 0x4100 开始,是整个 quad 共享的资源。
TOP00(0x4100)是公共模块的上电与复位面板:
| Bit | 字段 | 作用 |
|---|---|---|
| 31 | cmn_refclk_sel | 公共参考时钟选 ref0 或 ref1 |
| 26 | mcu_reset | PCIe 模式下复位 PIPE 相关逻辑 |
| 23:22 | cmn_ack_ovr / cmn_ack_sw | 上电完成应答的软件覆盖 |
| 19:16 | ref_clk1_div / ref_clk0_div | 两路参考时钟分频(÷1~÷4,默认 ÷2) |
| 12:8 | calclk_div | 校准时钟分频(÷1~÷32,默认 ÷6) |
| 7 | cmn_ack | 上电序列完成标志(R,1→0 表示完成) |
| 5:4 | cmn_pwrsm_state | 上电状态机:0=IDLE,1=RESET,2=ZCAL,3=FINISH |
| 3 | cmn_fastsim_en | 仿真加速 |
| 2 | cmn_pwr_manual_en | 手动上电模式(软件手动开 QPLL 和 ZCAL) |
| 1 | zcal_sw_ovr_mode | ZCAL 信号软件接管 |
| 0 | cmn_pll_sw_rstn | 手动模式下公共 PLL 软复位 |
TOP01(0x4104)是四个 lane 的调试信号选择器(debug_l0~l3_sig,各 3 位:clk / do_grp1 / grp0),把各 lane 内部测试信号引出来。
ZCAL 是端接阻抗校准,寄存器从 ZCAL00(0x4110)到 ZCAL0C(0x4140):
- ZCAL00:
zcal_ldo_sel(校准 LDO 电平 0.90~0.98V)、zcal_ldo_en与延时使能。 - ZCAL01:bit0
zcal_en校准使能(默认 1)、bit1zcal_sw_rstn、bit2zcal_manual_en手动模式、bit8zcal_mode(端接接电源还是 GND)、bit13:12 比较次数上限(32~256)、bit15 fastsim。 - ZCAL02
05(0x41180x4124):手动模式下 TXDP14/TXDN14 的 6 位调谐码(默认 6’b100000)。 - ZCAL06:比较器 tcomp/tsample/trst 间隔。
- ZCAL07(0x412C):bit8
zcal_done完成标志、bit9zcal_error错误标志、bit5:4 参考电压选择、bit3:0 校准模式。 - ZCAL08
0C:校准结果回读——4/tunep1~4 四组 TX 驱动端调谐值。zcal_tunen/tunep总值,以及 tunen1
参考时钟 pad 的控制在 CDRDRV(0x4150)和 REFCLK_CTRL(0x4154),这里 PH1P50 和 PH1P100 行为有差异:
- PH1P50 支持把 refclk pad 当输出口用:
cdrdrv_pad0/1_refclk_sel从 ref0/ref1/qpll_ref/rx_cdr_clk 四选一送到 pad_refclk0/1p/n 输出;refclk_tobus_en(REFCLK_CTRL bit1:0)按位选择 pad 用输入功能(0)还是输出功能(1);输出摆幅由refclk_rterm_en编码(0x0=400mV 最小摆幅,0x1=250mV)。 - PH1P100 只用输入功能:
refclk_tobus_en应保持 0x3;refclk_diff_en使能差分输入;refclk_rterm_en在片外没有差分端接电阻时打开内部端接。 cdrdrv_mux_enable / cdrdrv_rterm_en / cdrdrv_clk_en(CDRDRV 低 3 位)是 PH1P100 的 cdrdrv 时钟 pad 复用/端接/使能控制。
参考时钟锁定检测在 REFCLK0_PPM_LOCK(0x4170)和 REFCLK1_PPM_LOCK(0x4174):作为输入参考时钟时,bit31 refclk0_lock 给出锁定指示,bit30 refclk0_unlock_sticky 是”粘滞失锁”标志(锁信号的上升沿拉高、复位才清除,用于捕获偶发失锁事件);bit15:9 ref0_ppm_lockdet_ctl 配置锁阈值/计数/fastsim,bit17:16 设比较间隔,bit20 refclk0_lock_sel 允许把锁信号复用到 mcu_sysrstreq 端口输出。
CMN PLL 与其他公共资源
CMN_PLL_CLOCK(0x4180)是 quad 级公共 PLL(QPLL)的主配置:
| Bit | 字段 | 作用 |
|---|---|---|
| 3:0 | cmn_pll_refclk_sel | 参考源:ref0/ref1/rx_cdr_clk/refclk_se[0]/[1] |
| 5:4 | cmn_pll_ref_div | 参考分频 ÷1~÷4 |
| 7:6 | cmn_pll_post_div | 后分频:8/5/6/7 |
| 23:16 | cmn_pll_fbk_div | 反馈分频,N = cmn_pll_fbk_div + 4 |
| 26:24 | cmn_pll_cp_sel | 电荷泵电流 40u~320u |
| 31:28 | cmn_pll_lpf_res / lpf_cripple | 环路滤波电阻( |
| 10 | cmn_pll_pwr18_up | 电源域选择:1.2V 或 1.8V |
| 9/8 | cmn_pll_rst_n / cmn_pll_up | 复位与上电使能(默认 1) |
小数分频在 CMN_PLL_FRAC_N00(0x4184,25 位 cmn_pll_frac_in)和 FRAC_N01(0x4188:frac 宽度步进 2^16/2^20/2^24、dither 使能、idac 使能、frac 总使能)。
VCO 校准与锁状态:
CMN_PLL_CAL00(0x418C):bit28cmn_pll_vco_cal_mode(自动/手动)、bit26:24 校准计数、bit23:16cmn_pll_vco_bandVCO 初始频带值、bit15:0cmn_pll_lockdet一揽子锁检测配置(fastsim、refclk 检测旁路、复位、锁保持等)。CMN_PLL_CAL_READ00(0x4190):bit10cmn_pll_lock锁定、bit9cal_done频带搜索完成、bit8 频带溢出/下溢、bit7:0cmn_pll_vco_band_o实际频带值。
其余公共资源:CMN_PLL_TDC_CTL00(0x4194)控制 TDC/DLL(时间数字转换器,bit0 tdc_en、bit1 tdc_dll_en,bit17/16 回读 lock/err);CMN_PLL_TEST00(0x419C)测试模式(fmin/fmax 强制、测试时钟选择与 256 分频、ivref 微调);ADC_BG_OSC00(0x41A0)是片上 ADC 与带隙基准(oversample 平均 16/64/256 点、xadc 测试使能、bg 输出电流选择),转换结果从 ADC_READ00(0x41A4)读 xadc_data_o(12 位)和溢出标志 xadc_vld_o;PMA_QUAD_RSV(0x41A8)是保留寄存器;CMD_DEBUG_0(0x41B0)选择公共块调试信号。
通关标准:
- 说出 RX 模拟接收链的顺序:ATT → CTLE → DFE → 采样,并指出各自对应的寄存器组。
- 会查 TX/RX PLL 是否锁定:
tx_pll_lock/rx_pll_freq_lock/cmn_pll_lock三个标志位的位置。- 能描述一次完整排查流程:上电状态(cmn_pwrsm_state)→ 阻抗校准(zcal_done)→ PLL 锁定 → 眼图/FOM(MISC_CTL_0)→ PRBS 误码(第 1 篇的 LBERT)。