这一篇在干嘛?

系列第 2 篇(第 1 篇:手册读法与 Common/RX)。本篇覆盖 UG1121 后三章:TX 发送寄存器(驱动器摆幅、FIR 预加重、速率/复位控制)、ETH 以太网自协商寄存器、DFX 调试设施寄存器,最后串一条”链路出问题→查哪个寄存器”的实战路径。

TX 发送寄存器:驱动器、FIR 与速率控制(第 3 章)

ETH 寄存器:以太网自协商 ANLT(第 4 章)

DFX 寄存器:调试总线、环回与 SOC 接口(第 5 章)

实战:一条从现象到寄存器的排查路径

TX 发送寄存器:驱动器、FIR 与速率控制(第 3 章)

第 3 章(Base 0x02001000)与 RX 章完全镜像:afe_* 是模拟前端、rst_afe_tx/rst_dbe_tx 是复位 override、pd_afe_tx 是掉电 override、txmfsm_* 是 TX 主状态机指针。重点认识三组:

① 端接校准 overrideafe_octerm_tx(0x0)。正常情况下 TX 端接阻抗由端接校准状态机控制,这个寄存器就是手动接管入口:

BitField NameR/WDefault说明
0x0[13]termcal_chop_ntrw0x0斩波信号:允许用两种比较器极性做校准。1 标准极性 / 0 反极性
0x0[12:7]ref_res_ntrw0x0TX 参考电阻校准码
0x0[6:1]slice_ena_ntrw0x3f端接控制:d’0 阻抗最大 ~ d’8 阻抗最小(大于 d’8 无效),默认全开
0x0[0]bypass_ena_arw0x11 - 寄存器 override 使能

配套只读寄存器 afe_octerm_tx_rdreg(0x4)回读 termcal_error_nt——TX 切片阻抗校准的误差信号,判断端接校准收敛与否就看它。

② 发送 FIR(预加重/去加重)fir(0x50)是整个 TX 信号质量的核心。手册在描述里加了一句很重的警告:这些不是 SOC 语义下的系数,如果你想设 C(-1)/C(1) 系数,不要用这个寄存器(应走 SOC 接口的 ictl_tx_fir 信号,对应 DFX 章的 override 位):

BitField NameR/WDefault说明
0x50[22]ovr_en_arw0x0AFE 信号 override 使能。0 正常 / 1 寄存器接管
0x50[21:0]val_arw0x0TX FIR 抽头系数:C(1)[21:17]、C(0)[16:11]、C(-1)[10:6]、C(-2)[5:3]、C(-3)[2:0]

五个抽头的布局一目了然:C(0) 是主抽头,C(1)/C(-1) 是一阶前标/后标,C(-2)/C(-3) 是二阶/三阶后标。调预加重本质上就是在改这 22bit 的分配。周边还有 tx_fir_rdreg(回读)、tx_fir_reg14/reg18(扩展配置)。

③ 速率与复位/时钟控制rate_cntrl_tx(0x5c)只有 4bit 但决定 TX 位时钟后分频:

BitField NameR/WDefault说明
0x5c[3:0]postdiv_ntrw0x4TX 位时钟后分频:100 - div16 / 011 - div8 / 010 - div4 / 001 - div2 / 000 - div1(111~101 无效)

rst_afe_tx(0x60)把 TX 模拟通路按块列了 8 个复位位(driver、p2s 并串转换、postdiv、直接合成器、DCO……),注意它的语义是 1 = 正常、0 = 复位rst_dbe_tx(0x64)则覆盖数字侧 12 个块(DPLL、相位 FIFO、SSCM、数据通路等),语义同样如此。switchclk_dbe_tx(0x6c)是各测量/时钟块的时钟源与分频选择,里面有个实用位 ref_freq_sel_nt:0 = PCIe 100MHz 参考时钟、1 = 25MHz。改任何分频都要遵守配套 seq_cntrl_tx 里的 ready 握手(postdiv_ready_ads_synth_div_ready_a)。

TX 章还有环回相关寄存器(tx_loopback_cntrl 及其 rdreg、tx_fep_loopback_fifo_top),以及与 RX 章同名的电源 override pd_afe_tx(12 个掉电位,默认全部由电源状态机托管,1 = 正常运行、0 = 该块掉电)。

常见坑:直接写 fir 寄存器去"调预加重"

fir(0x50)的描述明确警告:这个寄存器的位排布与 SOC 接口语义的 C(-1)/C(1) 系数不一致,正常配置请走 SOC/MSS 接口(TD IP 参数或 ictl_tx_fir 信号),寄存器只用于底层调试。直接改它很容易和接口配置互相覆盖——先看 DFX 章 lane_txfir_ovrd_en_a 是否已被置位。

ETH 寄存器:以太网自协商 ANLT(第 4 章)

第 4 章(Base 0x02002000)实现 IEEE 以太网的自动协商(Auto-Negotiation, AN)和链路训练(Link Training, LT),寄存器命名统一为 eth_an_* / eth_anlt_*。分四堆:

① 本端能力通告eth_an_adv_ability_reg1~3(0x0/0x4/0x8)。每个寄存器装一个 16bit 链路码字,reg1 的位定义直接对应 Clause 73 的 Config_Reg[15:0]:[4:0] Selector、[9:5] 回显 nonce、[12:10] Pause 能力、[13] RF(Remote Fault)、[14] Ack(内部生成)、[15] NP(Next Page);reg2 是 [4:0] 发送 nonce + [15:5] Technology Ability 字段。手册特别提醒:这些值要在 eth_an_tr_disable上升沿后尽快写入,协商过程才会把本端能力发出去。

② 对端能力与本端控制eth_an_lp_adv_ability_reg1~3(0x1c~0x24,Link Partner 即对端通告的镜像寄存器)、eth_an_ctrl(0xc)与 eth_an_ctrl_reg1~3eth_an_ctrl 里值得认识的位:

BitField NameR/WDefault说明
0xc[27]rsfec_int_port_en_ntrw0x0使能后 octl_eth_an_rs_fec_ena 指示 100GBASE-K/CR1 PHY 的交织 FEC 已开启
0xc[26]noncegen_en_ntrw0x0使能 TX nonce 自动生成。初始 nonce 不自动生成,须先编程为非零值
0xc[25]autoack_en_ntrw0x0保留
0xc[24]a22enrw0x0保留

eth_an_ctrl_reg1(0x10)里是重启协商的扳机:an_mr_restart_negotiation(bit9)写 1 复位自协商并把仲裁 FSM 拉回 ENABLE 态——手册注释说状态切换可能较慢,因为 PMA 忙(状态迁移、RX 评估中)时 FSM 不能切换。

③ Next Page 与新标准扩展eth_an_np_reg1~3(0x340x3c,Next Page 码字)、eth_an_newdef_reg1~3(0x280x30,新以太网标准配置)。

④ ANLT 与 PMA 的桥eth_an_pma_def_reg1~3(0x400x48,自协商用的 PMA 控制默认值)、eth_anlt_rate_reg1~3(0x900x98)与 eth_anlt_width_reg1~4(0xa8~0xb4)——链路训练期间协商出的速率/位宽会落到这些寄存器上驱动 RX/TX 状态机。第 1 篇讲过的 RX 侧 anlt_mon 寄存器可以抓下协商双方实际收发的 Clause 72/92 或 136/162 帧,配合本章寄存器就能完整复盘一次协商。

DFX 寄存器:调试总线、环回与 SOC 接口(第 5 章)

第 5 章(Base 0x02003000)是 Design-for-Debug 设施,三块内容:

① 调试总线与信号观测ctl_dbe_pllcharz(0x0)能把内部时钟引到 TX 焊球上观测,也能让 TX 焊球观测内部模拟信号:

BitField NameR/WDefault说明
0x0[5:2]clksel_arw0x0时钟观测选择:1/2 内部/外部 RX 时钟,3 RX refdiv,4 RX synthdiv,5/6 内部/外部 TX 时钟,7 TX refdiv,8 TX synthdiv,0 关闭
0x0[1]atest_ena_arw0x01 - TX 焊球用于观测内部模拟信号
0x0[0]tx_ena_arw0x01 - TX 焊球用于观测内部时钟

ctl_dbe_tbus(0x4)配置 Trace/调试总线:选择 ATEST/TX 的 client 与 bit、使能并复位内部调试计数器;dat_dbe_tbus(0xc)回读调试计数器值。

② SOC 侧接口的 override/观测对dig_soc_lane_ovrd_reg1~8dig_soc_lane_stat_reg1~3。这对寄存器把 SOC/MSS 接口上的所有 lane 控制信号(复位、速率、位宽、FIR、环回、边带扫描 margin……)变成”寄存器可接管 + 寄存器可观测”。以 dig_soc_lane_ovrd_reg5(0x28)为例,它是总开关排:bit21 接管 digref、bit20 接管 block_data_ena、bit19 接管环回请求、bit18 接管 RX margin 扫描、bit14/13 分别接管 TX/RX 状态(power/rate/req/width)……dig_soc_lane_stat_reg1(0x38)则把 octl_* 观测信号(如 octl_rx_data_vldoctl_loopback_ackoctl_eth_an_done)集中起来回读——调试时”软件以为的状态”和”硬件实际的状态”就靠这组 stat 寄存器对账

③ 环回控制loopback_cntrl(0x44)一个寄存器集齐全部环回路径:

BitField NameR/WDefault说明
0x44[6]ena_ntrw0x0环回 override 总使能。0 正常 / 1 接管
0x44[5]rx_nes_loopback_ena_ntrw0x01 - 近端串行环回(near-end serial)
0x44[4]rx_fes_loopback_ena_ntrw0x01 - 远端串行环回(far-end serial)
0x44[3]rx_bitck_loopback_ena_ntrw0x01 - rx_bitck 环回本 lane 的 TX
0x44[2]tx_nes_loopback_ena_ntrw0x0近端串行环回(TX 侧),片上测试覆盖最大
0x44[1]tx_fes_loopback_ena_ntrw0x0远端串行环回(TX 侧),用于低速测试
0x44[0]tx_bitck_loopback_ena_ntrw0x01 - rx_bitck 环回本 lane 的 TX

近端串行环回(本端 TX → 本端 RX)不需要对端设备就能自测整条模拟链路,是排查”链路起不来”的第一动作;远端环回则需要对端配合。

实战:一条从现象到寄存器的排查路径

把三章串起来,假设”以太网链路训练失败”,典型的查表顺序是:

  1. 确认本端配置发出去了:读 eth_an_adv_ability_reg1~3,确认能力码字已按 eth_an_tr_disable 上升沿时序写入。
  2. 看协商过程:置 anlt_mon(RX 分区 0x4)使能并选源为 Clause 72/92 RX 帧,抓到的帧配合 eth_an_lp_adv_ability_reg1~3 确认对端到底通告了什么;eth_an_ctrl_reg1 的 restart 位可重跑协商。
  3. 检查信号质量:TX 侧确认 fir(0x50)预加重未被错误 override(tx_fir_ovrd 相关注册位与 ovr_en_a),必要时用 ctl_dbe_pllcharz 把 TX 时钟/模拟信号引出观测。
  4. 检查速率/位宽落点:读 eth_anlt_rate_reg1~3eth_anlt_width_reg1~4,再对 TX 侧 rate_cntrl_tx.postdiv_nt 与 RX 侧对应速率寄存器,确认两端速率一致。
  5. 环回收缩问题域:置 loopback_cntrl.ena_nt=1 并打开近端串行环回,若环回仍失败,问题在本端/板级;若环回通过,重点转向对端与互连。
  6. 全程用 stat 对账:每一步都用 dig_soc_lane_stat_reg1~3 和各 _rdreg 回读硬件真实状态,避免”软件写了好、硬件没生效”。

通关标准:

  • 能说出 TX 章三大件:afe_octerm_tx(端接 override)、fir(FIR 抽头,含”别直接用”警告)、rate_cntrl_tx(后分频)。
  • 能描述自协商最小流程:写 ability 码字 →(可选 restart)→ 读 lp_ability 对端镜像 → 查 anlt rate/width 落点。
  • 会用 loopback_cntrl 打开近端串行环回,并知道近端/远端环回各自隔离了哪一段问题域。