第
5
章
基于量子汇编指令的量子线路设计
本章核心知识点: 
□量子汇编指令语言OpenQASM 
□OpenQASM 量子线路的设计与调试
□量子逻辑门
□量子加法器
□量子相位反冲
5.量子汇编指令语言OpeQASM 
1n

5.1 
OpnQASM 
语言基本语句
1.e
不同开发平台中的量子线路编辑器或模拟器支持的
OpenQASM 语句格式会稍有区别。本书以QuantumComposer支
持的Op0为例,书中所有OpnQASM 代码实例均可在

enQASM2.eQuantumComposer中测试及运行。
表5.1列出了OpenQASM 的基本语句及其简要说明。

表5.QASM 
语言基本语句(0)

1 
OpenVer2.

语句说明
OPENQASM2.0; 
include"filename"; 
qregqregname[size]; 
表明本文件符合OpenQASM2.0版本格式
打开并解析另一个源文件
声明一个量子寄存器,size为量子比特个数。
例:qregq[5]; 
qregname[i] 引用一个量子寄存器。例:q[0] 


第5章基于量子汇编指令的量子线路设计79 

续表

语句说明
cregcregname[size]; 声明一个经典寄存器,size为经典比特个数。
例:cregc[5]; 
cregname[i] 引用一个经典寄存器。例:c[0] 
U(theta,phi,lambda)qubit|qreg;U门。例:U(pi/2,pi/3,0)q[0]; 
CXqubit|qreg,qubit|qreg; CNOT门。例:CXq[0],q[1]; 
measurequbit|qreg->bit|creg; 在计算基下测量。例:measureq->c; 
resetqubit|qreg; 将量子比特或量子寄存器重置为|0 >。
例:resetq[0]; 
gatename(params)qargs; 引用一个酉门。例:crz(pi/2)q[1],q[0]; 
if(creg==int)qop; 条件满足时,执行量子操作。例:if(c==5)CX 
q[0],q[1]; 
barierqargs; barier操作(qargs是以逗号分隔的量子比特或量
子寄存器列表)。例:barierq[0],q[1]; 
//commenttext 注释文本

单量子比特门和多量子比特门的OpenQASM语句请参见表3.1。

1和表4.
OpenQASM具有简明易读的语法。

①每条语句以分号结束,大小写敏感,多余的空格会被忽略。
②第一条语句必须是“OPENQASMM.m;”,其中,M为主版本号,m为
次版本号。当前版本的QuantumComposer支持的OpenQASM的版本号为
Verin2.故第一条语句必须为“0。
so0, OPENQASM2.” 
接下来是ie语句“;”。ie语句的用法与

③ ncludinclude"filename"ncludC语言类似,其功能是将头文件插入该命令所在的位置,从而把头文件和当前
源文件连接成一个源文件。Quatompsr中必须有“nlde"qlb1. 
inc";”语句。
numCoeicuei
④接下来声明量子寄存器和经典寄存器。量子寄存器中的各量子比特
初始化为|0>;经典寄存器中的各比特初始化为0。各类标识符必须以小写字
母开头,合法字符为西文半角的数字、字母和下画线。
⑤添加量子门,设计量子线路。
⑥注释以“//”开头。

80 量子程序设计基础
5.1.2 OpenQASM 量子线路编程实例
【例5.1】 请给出如下OpenQASM 代码对应的量子线路图。 
CH5-1.qasm:Bell 态观测
//OpenQASM 文件
OPENQASM 2.0; //指明OpenQASM 的版本号
include "qelib1.inc"; //包含头文件qelib1.inc 
qreg q[2]; //声明一个名为q 的量子寄存器,带2 个量子比特
creg c[2]; //声明一个名为c 的经典寄存器,带2 个经典比特
h q[0]; //在量子比特q[0]上添加一个H 门
cx q[0],q[1]; //CX 门,控制量子比特为q[0],目标量子比特为q[1] 
measure q[0] -> c[0]; //对量子比特q[0]进行测量,对应经典比特为c[0] 
measure q[1] -> c[1]; //对量子比特q[1]进行测量,对应经典比特为c[1] 
本例程对应的量子线路如图5.1所示,其实现了Bell态的制备与测量(详
见5.2.1节)。
图5.1 Bell态的制备与测量
【例5.2】 请给出如图5.2所示的量子线路的OpenQASM 代码。
图5.2 DJ算法的量子线路(n=2)

第5章 基于量子汇编指令的量子线路设计 81 
解:图5.2所示的量子线路为Deutsch-Jozsa算法(简称DJ算法,详见7.1 
节)的一种实现。该线路声明了一个3量子比特的量子寄存器和一个3比特
的经典寄存器,对应的OpenQASM 代码如下所示。 
CH5-2.qasm:DJ 算法(n=2) 
OPENQASM 2.0; 
include "qelib1.inc"; 
qreg q[3]; 
creg c[3]; 
h q[0]; 
h q[1]; 
x q[2]; 
h q[2]; 
ccx q[0],q[1],q[2]; 
cx q[1],q[2]; 
cx q[0],q[2]; 
h q[0]; 
h q[1]; 
measure q[0]->c[0]; 
measure q[1]->c[1]; 
5.1.3 图形化量子线路开发工具QuantumComposer 
QuantumComposer的用户界面如图5.3所示。
图5.3 QuantumComposer的用户界面

82 量子程序设计基础
表5.2给出了用户界面各功能区的简要说明(注:随着版本的更新,界面
会有所调整,但其功能结构基本一致)。
表5.2 QuantumComposer用户界面功能区说明
标识号功能区名称说 明
① 菜单栏单步调试(inspect)和视图选择(view)等功能
② 线路运行参数设置指定线路执行的后端(backend)和运行次数(shots)等
③ 线路名称设置命名量子线路并以同名的OpenQASM 文件存储
④ OpenQASM 代码编辑器编辑OpenQASM 代码,生成相应的量子线路
⑤ 量子门线路符号列表
拖曳线路符号以在量子线路中插入量子门;可增
加自定义门
⑥ 量子线路图形化编辑器通过线路符号创建量子线路;编辑、修改量子线路
⑦ 应用切换
(ApplicationSwitcher) 
在Quantum Composer、Quantum Lab、Services 
(后台实体机和模拟器列表等)、Jobs(工作任务) 
和Documentation(各类文档)等之间进行切换
⑧ 实时可视化窗口
(LiveVisualizations) 以多视图的形式展示量子线路的实时结果
5.2 OpenQASM 量子线路设计与调试
5.2.1 Bell态观测实验 
Bell态(Bellstates)指双量子比特系统的四种最大纠缠态,式(5.1)给出
了这四种态,它得名于贝尔不等式的提出者———爱尔兰物理学家约翰·斯图
尔特·贝尔。
|Φ+ >=(|00>+|11>)/2 
|Φ- >=(|00>-|11>)/2 
|Ψ+ >=(|01>+|10>)/2 
|Ψ- >=(|01>-|10>)/2 
ì
.
í
.... 
...
. 
(5.1) 
【实验内容】 
① 基于自定义门nG0构建如图5.4所示的Bell态观测量子线路(5.2.2节)。

第5章 基于量子汇编指令的量子线路设计 83 
图5.4 基于nG0门的Bell态观测量子线路
② 在模拟器上运行该量子线路,对结果做可视化分析(5.2.3节)。
③ 在远程实体机上运行该量子线路,对结果做可视化分析(5.2.4节)。
④ 比较以上两步的运行结果。请思考分析:为何用两种不同的运行环
境执行同一量子线路时执行结果会有差异? 
本节后续内容将以该实验为例介绍QuantumComposer量子线路的开发
流程。
QuantumComposer量子线路的开发流程主要包括以下三个步骤: 
① 量子线路的创建(5.2.2节和5.2.3节); 
② 选择指定后端执行量子线路(模拟器作为后端见5.2.6节;后台真实量
子计算机作为后端见5.2.7节); 
③ 结果的可视化与分析(5.2.5节)。
QuantumComposer还提供了对量子线路的单步调试功能(5.2.4节)。
5.2.2 OpenQASM 自定义门的构建
除了代码编辑器提供的基本门汇编指令以外,还可将一条或多条量子汇
编指令封装成一个新的门。自定义门用来实现一个可以重复使用的独立功
能,类似于汇编语言或高级语言中函数的用法。OpenQASM 使用gate指令
定义一个新的门,其指令格式为 
gate gatename(params) qargs; 
其中,gate为指令助记符,gatename是新定义的门的名称;params是自定义
门需要指明的参数,为可选项;qargs是自定义门作用的量子比特名称的形式
参数列表。
【例5.3】 请将如图5.5所示的量子线路构造为一个自定义门nG0。
解:实现自定义门nG0的OpenQASM 代码如下。

84 量子程序设计基础 
CH5-3.qasm:自定义门nG0 
OPENQASM 2.0; 
include "qelib1.inc"; 
gate nG0 a, b 
{ 
h a; //对量子比特a 进行H 门操作 
cx a, b; //CNOT 门,a 为控制量子比特,b 为目标量子比特
}
以上代码新定义了一个名为nG0的量子门,形式参数a和b表示自定义
门作用的量子比特。
在代码编辑器中输入以上代码后,量子线路图形编辑器Quantum 
Composer的量子门线路符号列表中将新增如图5.6所示的nG0门的线路
符号。
图5.5 自定义门nG0的量子线路 图5.6 自定义门nG0的线路符号
5.2.3 量子线路图的输入与编辑
1.图形化用户界面方式 
按照图5.4所示的Bell态观测量子线路,可在QuantumComposer的量
子线路图形化编辑器(图5.3的区域⑥)中录入该线路。选中量子线路中的某
一量子门线路符号,右击再选择“编辑”选项,即可调整该量子门的外联方式
和内部参数等。
2.OpenQASM 代码文本方式
在OpenQASM 代码编辑器(图5.3的区域④)中录入如下代码以生成量
子线路。

第5章 基于量子汇编指令的量子线路设计 85 
#CH5-4.qasm:基于自定义门的Bell 态观测
OPENQASM 2.0; 
include "qelib1.inc"; 
gate nG0 a, b 
{ 
h a; 
cx a, b; 
}q
reg q[2]; 
creg c[2]; 
x q[0]; //初态设定,测试中根据需要修改
x q[1]; //初态设定,测试中根据需要修改
barrier q[0],q[1]; 
nG0 q[0], q[1]; 
barrier q[0],q[1]; 
measure q[0] -> c[0]; 
measure q[1] -> c[1]; 
自定义门nG0的a映射在量子比特q0 上,b映射在量子比特q1 上。q1 
为高位,q0 为低位,量子态记为|q1q0>。当初态为|11>时,QuantumComposer 
中实测的末态与|Ψ- >相差一个整体全局相位因子-1。改变初态设定,利用
构造的自定义门nG0可得到式(5.1)所列的四种态,即
|00>→|Φ+ >,|01>→|Φ- > 
|10>→|Ψ+ >,|11>→|Ψ- > 
特别提醒:对于QuantumComposer中的量子门线路符号、量子寄存器
或量子线路的n 个量子比特q0,q1,…,qn-1,其量子态记为|qn-1…q0>,其中
qn-1为高位,q0 为低位。
5.2.4 量子线路的单步调试
对量子线路进行单步调试依赖于模拟器。单步调试功能用来逐步查看
量子态的演化过程。
在菜单栏(图5.3的区域①)选择Inspect选项可对当前显示的量子线路
进行单步调试。图5.7所示为单步调试的用户界面,加载的量子线路为例5.1 
中的CH5-1.qasm。单击控制面板上的左右箭头符号可令量子线路上的蓝色
框左右移动。蓝色框标示了当前选中的量子门,实时可视化分析工具将显示
当前量子门作用后的线路状态,其中的各类视图也会随之发生变化。

86量子程序设计基础
图5.7单步调试界面
5.2.5结果实时可视化与分析
实时可视化区域(LiveVisualizations)出现在QuantumComposer工作
区底部的窗口中(图5.3的区域⑧),它显示的是当前量子线路的实时状态,提
供了状态向量视图(StatevectorView)、测量概率视图(ProbabilitiesView)和
Q球视图(Q-sphereView)等结果可视化分析工具。在菜单栏的View选项
中可选择或取消相关的视图。
在真机上运行时,实时可视化分析工具不起作用。下面介绍Bel 
态观测量
子线路在ibmq_qasm_simulator模拟器上运行后的实时可视化分析视图。实时
.e=

结果反映的是图57所示的Bl 
线路。该线路的初态为|
0>,生成纠缠态|Φ+>
(|00>+|11>)/2。单步调试时,断点位于CNOT门上的量子线路的状态。

1.状态向量视图
图5.tatevector视图中的量子态及其振幅的直方图。横轴为计

8所示为S
算基态,纵轴表示各计算基态的振幅值。该图表明:结果中仅出现了|00>和
707 。|11>,各自的振幅约为0.8所示的直方图的下方。

图5.9为状态向量视图中的另一部分,位于图5.
左图用色轮的颜色表示相位角,与图5.用颜色区分

8所示的直方图配合使用, 
直方图各状态的相位角。对照色轮,可知图5.和

8所示的直方图中的|00> 
|11>的相位角均为0。图5.e态|Φ+>的状态向量为

9的右图中显示的Bl 

[0.707+0j,0+0j,0.j]。
j,0+0707+0

格式说明:IBMQuantumComposer的界面或QuantumLab代码运行
结果中输出的量子态状态向量会将各分量的格式显示为a+bj(a,b为实数), 
其表示复数a+bi(a,b为实数);下文中,在用数学原理描述量子态状态向量
时,其分量采用a+bi(a,b为实数)的格式,但在说明软件界面输出或代码运


第5章 基于量子汇编指令的量子线路设计 87 
图5.8 量子态及其对应的幅值直方图
图5.9 色轮与状态向量
行结果时,将直接采用系统输出结果,以保证书中内容与软件界面的显示或
代码输出的运行结果一致,从而便于读者验证代码、调试与运行结果。
当前版本的QuantumComposer中的状态向量视图支持显示的最大量子
比特数为6。
2.测量概率视图
图5.10所示的测量概率视图为量子态及其测量概率的直方图。纵轴为
计算基态,横轴表示各计算基态下测量得到的概率。根据窗口的大小,横轴
与纵轴会变换位置,概率值等于振幅值的平方。该图表明:结果中仅出现了
|00>和|11>,各自的概率约为50%。
对|Φ+ >=(|00>+|11>)/2重复进行测量,计算基态|00>和|11>的测量
概率分别为
p00=|<00|ψ>|2=|1/2|2=1/2=50% 
p11=|<11|ψ>|2=|1/2|2=1/2=50% { (5.2) 
当前版本的QuantumComposer中的测量概率视图支持显示的最大量子
比特数为8。