4. 硬件后端接入的核心抽象

把一段量子线路真正送到硬件上执行,中间要穿过四层抽象:量子指令集(QIS)、脉冲级控制、波形生成、设备拓扑映射。它们不是四个独立模块,而是一条自上而下逐级“翻译”的链路——上层描述“做什么门”,下层决定“在哪个物理比特上、用什么微波/激光波形、在什么时刻施加”。理解这条链路,才能判断一个后端接入方案是否完整、一次编译失败到底卡在哪一层。

一、量子指令集:硬件能听懂的最小门集合

量子指令集是后端暴露给编译器的“原生门”清单。不同物理体系的原生门差别很大:超导transmon通常原生支持 RZ(虚拟Z,几乎无耗时)、SX(√X)和 CZ 或 CX;离子阱常以 R(任意角度旋转)和 MS(Mølmer–Sørensen)为原生两比特门;中性原子则偏向 CZ 加全局旋转。接入时第一步就是把这些门名、参数签名、支持的比特对写进后端的 Target 描述里。

以 Qiskit 风格的 Target 为例,一个超导后端的指令集可以这样声明(示例参数,非实测):

InstructionProperties(duration=3.5e-8, error=8e-4)   # sx on q0
InstructionProperties(duration=0.0,    error=0.0)     # rz on q0 (virtual)
InstructionProperties(duration=2.8e-7, error=6e-3)    # cz on (0,1)

这里 duration 是门时长(秒),error 是门错误率。编译器据此决定是否把 H 拆成 RZ·SX·RZ、把 CX 拆成 H·CZ·H。指令集描述得越准确,后续的调度和错误估计就越可信。

二、脉冲级控制:从门到时间轴上的操作

指令集只说明“有哪些门”,脉冲级控制说明“门怎么实现”。一个 SX 门在超导硬件上通常对应一段高斯或DRAG形状的微波脉冲,作用在 drive 通道上;一个 CZ 门则对应 q0 与 q1 之间的通量脉冲或耦合器脉冲。脉冲级控制要处理三件事:通道分配(哪个比特的哪个物理端口)、时间对齐(脉冲起止时刻、并行约束)、参数标定(幅度、频率、相位、时长)。

在 Qiskit Pulse 或 QUA 这类框架里,门会被展开成 Schedule:

with pulse.build(backend) as sched:
    pulse.play(pulse.Gaussian(duration=160, amp=0.3, sigma=40),
               pulse.DriveChannel(0))
    pulse.play(pulse.GaussianSquare(duration=400, amp=0.25, width=200),
               pulse.ControlChannel(1))

这段示例表示:在 D0 上打一个 160 采样点的高斯脉冲,同时在 U1 控制通道上打一个 400 点的平顶脉冲。采样点与纳秒的换算由后端 dt 决定(例如 dt=0.222 ns)。脉冲级控制是接入工程中最“物理”的一层,也是标定数据(如 π 脉冲幅度、读出频率)真正生效的地方。

三、波形生成:把数字序列变成模拟信号

脉冲描述最终要交给任意波形发生器(AWG)或射频SoC(如 Zynq+RF DAC)。波形生成层负责把离散的复数采样序列 I/Q 通过数模转换、上变频、滤波后送到室温电子学,再进入稀释制冷机内的衰减链。接入时需关注:采样率、DAC 位宽、通道数、是否支持实时反馈(如条件脉冲)、以及 I/Q 混频的边带抑制。若后端支持参数化脉冲(如 amp 可在运行时由实验循环更新),波形生成层还要暴露可写寄存器或实时更新接口。

四、设备拓扑映射:逻辑比特到物理比特的“落座”

线路里的逻辑比特是抽象的,硬件上的物理比特有编号、有连接关系、有各自的错误率。拓扑映射就是决定“逻辑 q0 放到物理 3 号比特、逻辑 q1 放到物理 5 号比特”,并保证线路中每个两比特门都落在一条真实存在的耦合边上。若不存在,就要插入 SWAP 或使用桥接门,代价是额外的门数和错误。

映射质量直接影响结果。一个常用启发式是:优先把交互频繁的逻辑比特放到连通性好的物理区域,并避开错误率高的边。接入工程中,后端需要提供 coupling_map(或 CouplingMap)和每个物理比特的 T1/T2、读出错误率、门错误率,供布局与路由算法使用。

量子线路 → 硬件执行的四级抽象链路 ① 量子指令集 QIS 原生门:RZ / SX / CZ / CX / MS / R 参数:duration、error、支持的比特对 Target / InstructionProperties sx: 35ns, 8e-4 | cz: 280ns, 6e-3 门展开 / 拆解 ② 脉冲级控制 通道分配:DriveChannel / ControlChannel / MeasureChannel 时间对齐:脉冲起止、并行约束、采样点 dt Schedule / Pulse Gaussian(160, amp=0.3, σ=40) I/Q 采样序列 ③ 波形生成 DAC 位宽 / 采样率 / 上变频 / 滤波 / 边带抑制 实时反馈:条件脉冲、参数化幅度更新 AWG / RFSoC DAC → 混频 → 衰减链 → 稀释制冷机 物理比特落座 ④ 设备拓扑映射 逻辑比特 → 物理比特;耦合边约束;SWAP / 桥接代价 输入:coupling_map、T1/T2、读出与门错误率 CouplingMap (0-1, 1-2, 2-3, 3-4, 1-4)

五、四层如何协同:一次接入的检查顺序

实际接入时,建议按“自下而上验证、自上而下编译”的顺序排查。先确认波形生成层能输出正确幅度的脉冲(用示波器或环回采集看 I/Q),再确认脉冲级控制的时间轴没有重叠冲突,然后确认指令集里的门时长与标定一致,最后检查拓扑映射是否把两比特门放到了有效耦合边上。任何一层描述错误,都会表现为“编译通过但结果错误”或“编译直接报错”。

接入检查清单(示例):
  • Target 中每个原生门的 duration 与 error 是否来自最新标定?
  • 脉冲 Schedule 的通道是否与硬件接线一致(D0→q0 drive,U1→q0-q1 coupler)?
  • dt 与采样点换算是否与 AWG 实际采样率匹配?
  • coupling_map 是否覆盖线路中所有两比特门所需的边?
  • 是否存在逻辑比特被映射到 T1 明显偏低的物理比特?

把这四层抽象都描述清楚,后端才算真正“可接入”。后续的噪声模型、错误缓解和自动标定,都建立在这四层描述之上。