这一篇在干嘛?

这是”寄存器手册:PH2A HXT(UG1121)“系列第 1 篇。寄存器手册不是教程,而是一本字典:它把 HXT 高速收发器内部所有寄存器逐个列出。本篇先教你这本字典的结构和查法(下一篇再讲 TX/ETH/DFX 分区),然后拆解前两章——Common 公共寄存器和 RX 接收寄存器——里最值得认识的模块。

这本手册是什么、何时需要翻它

手册结构:五个分区与基地址

寄存器表格怎么读:字段、读写属性与命名后缀

Common 公共寄存器:时钟、校准与电源(第 1 章)

RX 接收寄存器:接收链路核心模块(第 2 章)

这本手册是什么、何时需要翻它

UG1121 全名《安路科技 SALPHOENIX®2A 系列 FPGA HXT 高速串行收发器寄存器说明》(v1.0,2024 年 8 月首次发布)。SALPHOENIX 2A 是安路的新一代 FPGA 系列,其 HXT(High-speed Transceiver)是片内的高速串行收发器硬核,用来跑 PCIe、以太网这一类 Gbps 级别的串行协议。

你在 TD 软件里例化一个收发器 IP 时,向导会把参数翻译成一组寄存器初值写进比特流;运行时,IP 的校准状态机、电源管理状态机又会动态地读写这些寄存器。也就是说:99% 的情况下你不需要直接碰这些寄存器。那这本手册什么时候有用?

  1. 调试疑难杂症:链路起不来、误码率异常时,读状态寄存器(如校准结果、PPM 锁定状态)能定位问题出在模拟前端还是数字后端。
  2. 看懂 IP 配置到底改了什么:向导里勾一个选项,对应到哪些寄存器位翻转,手册是唯一的对照表。
  3. 深度调试/性能压榨:手册里有一大类 ovrd(override,寄存器接管)寄存器,可以在系统调试时绕过状态机、直接手控收发器内部信号——这是芯片厂商留给高级用户的”后门”。
  4. 写驱动/固件:如果 SoftCore 或外部 MCU 要通过接口访问收发器寄存器空间,手册就是地址映射表。

常见坑:把寄存器手册当配置指南用

手册开头对每个分区只给一句”base address of 0x…”,没有操作流程、没有推荐配置。不要试图从这本手册里学”怎么把收发器配成 PCIe Gen2”——那是 UG 系列其他手册(IP 用户指南)的任务。寄存器手册只回答”某个寄存器在哪个地址、每个位是什么意思”。

手册结构:五个分区与基地址

手册正文共 5 章,每章对应收发器地址空间里一个连续的分区。每个分区有自己的基地址,寄存器的真实地址 = 分区基地址 + 表中给出的 Offset

分区基地址管什么
1Common Register Fields0x00000000整个收发器 Quad 共用的资源:公共 PLL(LCPLL)、公共时钟发生器、各路校准状态机、电源/复位控制、PVT 测量
2RX Register Fields0x02000000每条 lane 的接收方向:RX 端接、AGC/CTLE 均衡、DFE、CDR、RX 校准状态机、EQ 参数存储
3TX Register Fields0x02001000每条 lane 的发送方向:TX 端接、驱动器 FIR(预加重/摆幅)、TX 分频器、TX 复位/掉电控制
4ETH Register Fields0x02002000以太网自协商(AN)与链路训练(LT,合称 ANLT)的协议层寄存器
5DFX Register Fields0x02003000Design-for-Debug:调试总线(tbus)、SOC 侧接口的 override/观测寄存器、环回控制

每章内部结构完全一样,先来一节 x.1 Overview:一张三列表格(Register Name / Offset / Description),把本章所有寄存器一口气列完——这是全书最有用的一节,先看 Overview 再决定往哪翻。然后是 x.2 Field Descriptions:逐个寄存器给出位级明细表。

常见坑:Offset 不等于真实地址

Overview 表里写的是分区内的偏移量。比如 RX 分区里 rx_agc_adapt_ctrl 的 Offset 是 0xd8,它相对整个收发器地址空间的地址要加上 RX 基地址 0x02000000。跨分区对比”两个寄存器地址近不近”时,一定要先加各自的基地址。

寄存器表格怎么读:字段、读写属性与命名后缀

每个寄存器的描述都是一张五行表,以第 1 章的 afe_cmn_clkgen_reg1(公共时钟发生器配置,Offset 0xc)为例:

BitField NameR/WDefault ValueFunction and Description
0xc[21:18]dcoreg_ntread write0xeCommon clock gen DCO regulator set point。1111 - 950mV nominal,0000 - 650mV nominal
0xc[17]dcoreg_bleed_ena_aread write0x0dcoreg bleed enable control
0xc[16]dcoreg_scbypass_ntread write0x00 - Normal operation,1 - Bypass the switched capacitor voltage boost
0xc[15]fbdivfrac_ovr_ena_ntread write0x0使能基于 DBE 小数合成器的反馈路径 PI 控制信号 override
0xc[10:8]hsrefdiv_ntread write0x2把公共时钟发生器 10.5GHz 输出分频出 HSREF 时钟。默认 div3:010 - div5,001 - div4,000 - div3
0xc[6:0]vcodiv_ntread write0xcLC VCO 时钟的整数后分频比,7bit 表示 8~127 的分频值

五列的含义:

  • Bit:位的位置,写成 Offset[高位:低位]。例如 0xc[6:0] 是 Offset 0xc 这个 32bit 寄存器的第 6~0 位。
  • Field Name:位段名。名字本身就是最好的分类线索,见下面的后缀规则。
  • R/Wread-write 可读可写;read-only 只读(状态/观测寄存器,写无效)。
  • Default Value:复位后的默认值。手册里大量寄存器默认值就是芯片出厂调好的推荐值——默认值通常别乱动
  • Function and Description:位段功能,常带枚举值说明。

字段名的后缀有一套内部约定,认出来能少走很多弯路:

后缀含义例子
_nt芯片原生(native)控制信号,通常状态机正常托管vcodiv_ntdcoreg_nt
_aAFE(模拟前端)信号的寄存器 override 使能/值bypass_ena_a
_baDBE(数字后端)信号的 reset/power overridep2s_badriver_ba
ovrd / ovr_enoverride 类:寄存器接管原本由引脚或状态机驱动的信号lane_txstate_ovrd_en_a
_rdregread-only 观测寄存器,回读内部测量/校准结果afe_cmn_idco_adapt_rdreg
reg1/reg2/...同一功能块的多组连续寄存器afe_cmn_lcpll_fracdiv_reg1~6

另一个通用模式是几乎所有功能块都有的 bypass_ena(或 ovr_en)+ 值域 配对:先把使能位置 1,寄存器值才会接管被状态机控制的信号;使能为 0 时写值域完全无效。调试时”想手动控制某个模拟量”,动作永远是两步:写值 → 打开 bypass。

常见坑:名称里下划线被 OCR 打乱

解析版手册里章节号和字段名偶有空格错位(如 1. 2. 4cmnatest),检索寄存器名时把下划线去掉再搜更稳。

Common 公共寄存器:时钟、校准与电源(第 1 章)

第 1 章约 107 个寄存器,管的是整个收发器 Quad 公用的”基础设施”。按功能可以归成四堆:

① 公共时钟发生器(LCPLL / clock gen)afe_cmn_lcpll_fracdiv_reg1~6(环路滤波器与 Fractional-N 小数分频配置)、afe_cmn_lcpll_osc_reg1~6、以及上面示例的 afe_cmn_clkgen_reg1/reg2。其中 afe_cmn_clkgen_reg2(0x10)负责 SRIS 与公共合成器输出分频:

BitField NameR/WDefault说明
0x10[23]cmn_sris_ena_ntrw0x0使能 CMN 中的 SRIS 时钟生成
0x10[22:16]fbdivintrw0x19反馈路径整数分频(LC VCO 时钟 /4),支持 8~127
0x10[10]pclkdiv_ready_arw0x0上升沿把 pclkdiv 总线锁存进本地 AFE 时钟域
0x10[9:1]pclkdiv_arw0x0公共合成器输出分频(输出给 DBE 的时钟),7.2 位小数表示,支持 10~127
0x10[0]ck_osc_sel_ntrw0x0测试模式:用低速参考时钟驱动公共 DCO

注意 pclkdiv_ready_apclkdiv_a 是一对”值 + ready 锁存”信号——改分频比必须配合 ready 上升沿才生效,这是寄存器手册里反复出现的握手套路。

② 校准状态机(adapt 系列):IDCO 校准、VCO 自适应、端接校准(termcal)等。以 IDCO 校准为例,配置在 afe_cmn_idco_adapt_reg1/reg2(0x18/0x1c),结果回读在 afe_cmn_idco_adapt_rdreg(0x14):

BitField NameR/WDefault说明(rdreg,全部 read-only)
0x14[7]ackro0x0idco 校准应答
0x14[6]idco_error_aro0x0校准错误标志
0x14[5]idco_samplero0x0校准采样标志
0x14[4]idco_readyro0x0校准就绪
0x14[3:0]idcoro0x0校准得到的 idco 值

校准启动类寄存器的固定三件套在 afe_cmn_idco_adapt_reg2 里看得最清楚:req_a(校准启动请求,写 1 启动)、load_only_nt(只装载起始值不做校准)、max_iter_nt(最大迭代次数,跑满即报 done)。这是全手册所有 adapt 块的通用骨架。

③ 电源/复位/序列控制afe_cmn_power_cntrlpd_afe_cmn(掉电)、rst_afe_cmn / rst_dbe_cmn(复位 override)、seq_cntrl_cmn、cmnmfsm 系列(电源主状态机的指针、速率、状态寄存器)。这些默认全部由硬件状态机托管,调试时才会改成寄存器接管。

④ 测量与杂项afe_cmn_atest(模拟测试 ADC:选被测对象 pmonsel、分频、端接类型、启动捕获)+ afe_cmn_atest_rdreg(回读 12bit ADC 结果);pvt_measure(工艺/电压/温度测量);ppm_lock_detect_reg1~3(参考时钟 PPM 检测);refdet_reg1/2(参考时钟检测);cmn_csr_ctrlcmn_info 等控制信息寄存器。

RX 接收寄存器:接收链路核心模块(第 2 章)

第 2 章是全书最大的一章(Base 0x02000000,Overview 表就有 20+ 页),管每条 lane 的接收方向。同样按数据流顺序归堆:

① 模拟前端入口afe_octerm_rx(0x0)配置 RX 端接模式:

BitField NameR/WDefault说明
0x0[6:4]acc_term_mode_ntrw0x1端接模式:111 保留 / 110 浮空端接 DC 耦合 / 101 端接到 vss DC 耦合 / 010 片上 AC 耦合浮空端接 / 001 片上 AC 耦合端接到 vss / 000 高阻
0x0[3:1]acc_term_cal_ntrw0x0端接校准码(来自公共端接校准块)
0x0[0]bypass_ena_arw0x01 - 使能寄存器 override

② 均衡与增益自适应(AGC/CTLE)rx_agc_adapt_* 一大家子。rx_agc_adapt_ctrl(0xd8)是启停开关:

BitField NameR/WDefault说明
0xd8[2]foreground_ena_arw0x01 - 配置为细调增益自适应
0xd8[1]background_ena_arw0x01 - 配置为粗调增益自适应
0xd8[0]start_arw0x0写 1 启动 AGC 粗调/细调自适应;锁定后重新触发要先清 0 再置 1

配套的 rx_agc_adapt_lms(0xe0)用 min/max 字段限制粗调/细调增益的收敛范围(超界裁剪),rx_agc_adapt_reg1~10 则是一张静态查找表(LUT),把自适应出的 coarse 档位映射到内部 vga_coarse1/vga_coarse2 两级实际控制值。旁边还有 rx_adapt_vga_offset_* 系列(VGA 偏移的后台/旁路/LMS 配置)。

③ 数字均衡与参数存储rxeqstore0/1_* 系列(tap、slicer、thres、phase、offset 等 EQ 参数的存取),dbe_rx_dbg_sample_* 系列(把 FFE、量化器错误 qzd_err、量化区域 qzd_rgn 等内部采样值导出到调试总线)。这两个前缀 0/1 对应链路上的两个 EQ 参数槽位,链路训练时可以在两组参数间切换比较。

④ 乒乓缓冲与观测compute_alu_* 是自适应算法共用的一个小 ALU(乘法器/除法器/累加器 + 阈值比较 GTE/LTE),compute_alu_rdreg1~4 回读比较结果——这是均衡算法硬件化的算力单元,应用层一般只看它的只读输出。

⑤ ANLT 监控与 RX 状态机anlt_mon(0x4)选择并使能捕获 ANLT 帧(Clause 72/92 或 136/162 的 RX/TX 帧),anlt_mon_rdreg 回读缓冲满标志;rxmfsm_* 系列是 RX 主状态机的速率/上下电指针寄存器;rx_ppm_lock_detect_*rx_refdcd_*rx_vco_adapt_* 则把第 1 章同类功能搬到了每条 lane 的 RX 侧。

通关标准:

  • 能不翻书说出 5 个分区各自的基地址(0x0 / 0x02000000 / 0x02001000 / 0x02002000 / 0x02003000)。
  • 看到 _rdreg 后缀能反应过来”这是只读观测寄存器”,看到 bypass_ena/ovr_en 能反应过来”先写值再开旁路”。
  • 能说出 IDCO/AGC 这类校准块的三件套:req 启动、max_iter 迭代上限、rdreg 回读结果。