--- export_on_save: html: true html: toc: true embed_local_images: true embed_svg: true title: 读出子系统历史无关功能配置项 author: 郭成 date: --- # 1. 修订记录 |版本|修订日期|修订原因|修订内容|修订人| |:-|:-|:-|:-|:-| |v0.1|2025/10/27|统一格式|初始版本|郭成| |v0.2|2025/10/31|评审意见|内容补充|郭成| # 2. 读出系统历史无关的功能配置项 ## 2.1. 前言 本文以常用的超导量子比特读出操作为例, 将读出操作可能涉及到的相关功能拆解成最小功能项, 并给出对每个功能项的历史无关配置集。 超导量子比特读出操作涉及到EXCT、ACQ和Pump三类通道, 本文将基于**ez-Q 2.5 FPGA平台读出子系统**的的通道为控制对象进行功能分解, 读出子系统的工作流程如下图所示: ![readout_proc](assets/readout_proc.png) 本文所指的`历史无关配置`限定为上图中历史无关实验中的**实验配置**项, 而与对读出系统的初始化(例如寄存器复位、ADC、DAC、PLL等自动校准)、 外部参数的校准(例如通信链路校准、系统间同步、回环延时补偿)等操作不在本文讨论范围。 若历史无关实验未得到预期结果, 需要排查历史无关实验依赖的**运维状态**以修复故障。 ## 2.2. 目的与范围 本文档的目的是介绍读出芯片激励产生和采集处理相关控制, 用户可依据本文档用例在任意实验状态下完成对应实验, 本文档作为开放文档供大家阅读。 ## 2.3. 阅读对象 本文档的预期读者是所有使用本芯片的用户以及对该芯片工作原理感兴趣的读者。 ## 2.4. 文档概述 本文档首先介绍了测控系统总体的编程对象和规范, 针对读出相关的三种类型通道的编程进行了详细介绍。 ## 2.5. 引用文档 |文档编号|标题|版本| |:-|:-|:-| |TODO|读出子系统编程控制模型.md|V1.0| |ez-Q 2.5-SDD-06|ez-Q 2.5 测控系统内部通信协议.docx|-| ## 2.6. 术语定义 |名字|全称|解释| |:-|:-|:-| |EXCT|Excitation|读出激励生成发送通道| |ACQ|Acquisition|读出回波采集处理通道| # 3. 激励通道(EXCT) 读出激励通道用于为量子比特读出产生激励信号, 对激励通道的输出控制包括模拟控制和数字控制两个部分。 ez-Q 2.5 FPGA平台变频电路沿用ez-Q 2.0的硬件, 目前不支持变频增益控制,LO本振频率控制暂不开放, LO频率固定为5.5 GHz,因此模拟电路无需配置。 激励通道的数字电路输入控制如下图所示 ![readout_awg](assets/readout_awg.png) 配置项包括MCU指令、MCU数据、波形索引、波形仓库和若干基带输出控制寄存器。 相应的功能如下所示: * MCU指令+MCU数据用于控制实验流程和产生执行命令; * 波形索引+波形仓库用于完成从命令到数字波形信号的翻译; * 基带输出控制寄存器用于控制数字波形信号处理过程; 其中输出控制寄存器可以通过上位机直接配置, 此外输出控制寄存器也被映射到了MCU的访存空间, MCU也可以通过修改寄存器来实时控制波形输出行为。 本文暂未涉及到需要实时修改控制寄存器的用例, 默认都是通过上位机直接配置输出控制寄存器。 ## 3.1. EXCT.1 直接波形输出 直接波形输出功能将用户配置以采样点配置的波形数据直接发到DAC, 数字信号经过DAC转换成模拟基带信号, 接着基带信号再经过模拟变频电路变频后得到读出激励信号。 实现直接波形所需的全部配置项如下表所示 |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |波形映射表|配置码字到波形地址和长度的映射表| |波形仓库|存储映射表对应的波形| |控制寄存器|控制波形的输出模式| ### 3.1.1. 编程约束 用户通过编程MCU来生成码字指令,编程需要满足以下约束: |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|波形输出通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| 以下示例是一个用于发出码字为`0x00000000`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ```{.line-numbers} send x0, x0, 0 exit x0, x0, 0 ``` ### 3.1.2. 码字约束 对直接波形输出功能有影响的码字如下表所示: |配置项|值|说明| |:-|:-:|:-| |CODEWORD[12]|0|允许波形输出| |CODEWORD[11]|0|使用码字索引波形| |CODEWORD[7:0]|ID|设置用于指定的波形的ID| 例如码字`0x00000000`可以触发输出形索引ID为`0`对应的波形。 ### 3.1.3. 控制寄存器配置 对直接波形输出功能有影响的寄存器如下表所示: |配置项|值|说明| |:-:|:-:|:-| |AMPLITUDE|0x4000|设置归一化幅度为1| |AMP_SEL|0|使用AWG内部调幅值| |INTP_SEL|0|使用邻近插值滤波器| |MIX_MODE|0|NRZ输出模式| |AWG_MODE|0|直接波形输出模式| 例如设置`amplitude`寄存器高16位为16‘h4000,`function`寄存器为32’h00000000, 表示采用NRZ模式直接将存储在波形仓库中的采样点输出。 ### 3.1.4. 波形映射表 + 波形仓库 编程过程中发射的波形ID必须要有对应的映射表进行转换, 而编程的映射表必须要有对应的波形采样点进行匹配。 映射表的一个配置项用32比特表示,高16比特对应地址,低16比特对应长度, 地址和长度的单位都是时钟周期,在FPGA平台上,一个时钟周期对应16个采样点。 例如映射表配置成 ```{.line-numbers} 0x00000080 0x00800040 ``` 当`ID==0`是从0地址输出128个时钟周期的波形(对应2048个采样点),当`ID==1`时,从128地址开始输出一个长度为64个时钟周期的波形(对应1024个采样点),波形起始地址和波形长度。波形地址加上波形长度的访问范围是12比特,对应最大4096个时钟周期波形输出。 ``` S1S2S3...S16 ... S2033...S2048 ... S3057...S3072 ``` 此时波形仓库中的数据应该如上所示,总共存储了192个时钟周期,FPGA的主频为250 MHz,DAC的更新率为4Gsps,192个时钟周期对应3072个采样点数据,其中`S1-2048`采样点对应`ID==0`时输出,`S2049-S3072`采样点对应`ID==1`时输出. ### 3.1.5. 配置示例 以下是直接输出一个高斯包络波形的配置示例。 完整配置示例可参考[exc_1_config.txt](./exc_1_config.txt)。 由于激励和采集在一个芯片上,并被同步信号触发, 本例为ACQ通道MCU配置了一条退出指令以避免仿采集通道使用未定义数据。 * **配置项:** 系统配置 * **描述:** 对daq(ACQ)与awg(EXCT-Pump)进行软复位 * **Transaction:** 向0x00000018地址写入4 Byte数据 ```{.line-numbers} 00000018 // address = 0x00000018 00200004 // slot=4, length = 4 Byte 00000003 // {daq_rst, awg_rst} ``` * **配置项:** ACQ MCU指令配置 * **描述:** 向ACQ通道MCU指令空间写入配置指令 * **Transaction:** 向0x00200000地址写入4 Byte数据 ```{.line-numbers} 00200000 // address = 0x00200000 00200004 // slot=4, length = 4 Byte 0000002B // exit x0,x0,0 ``` * **配置项:** EXCT-Pump MCU指令配置 * **描述:** 向EXCT-Pump通道MCU指令空间写入配置指令 * **Transaction:** 向0x00700000地址写入16 Byte数据 ```{.line-numbers} 00700000 // address = 0x00700000 00200010 // slot=4, length = 16 Byte 001007B7 // lui x15, 0x100 0007A083 // lw x1, 0x00(x15) 0000A00B // send x0,x1,0 0000002B // exit x0,x0,0 ``` * **配置项:** EXCT-Pump MCU数据配置 * **描述:** 向EXCT-Pump通道MCU数据空间写入配置数据 * **Transaction:** 向0x00800000地址写入4 Byte数据 ```{.line-numbers} 00800000 // address = 0x00800000 00200004 // slot=4, length = 4 Byte 00000000 // codeword = 0 ``` * **配置项:** 通道控制寄存器配置 * **描述:** 配置波形调制幅度 * **Transaction:** 向0x00900034地址写入4 Byte数据 ```{.line-numbers} 00900034 // address = 0x00900034 00200004 // slot=4, length = 4 Byte 40000000 // amplitud = 0x4000, 归一化值为1 ``` * **配置项:** 通道控制寄存器配置 * **描述:** 配置波形输出模式 * **Transaction:** 向0x00900034地址写入4 Byte数据 ```{.line-numbers} 00900044 // address = 0x00900044 00200004 // slot=4, length = 4 Byte 00000000 // AMP_SEL=0, INTP_SEL=0, MIX_MODE=0, AWG_MODE = 0 ``` * **配置项:** 波形查找表配置 * **描述:** 向EXCT通道波形查找表写入查找表数据 * **Transaction:** 向0x00A00000地址写入4 Byte数据 ```{.line-numbers} 00A00000 // address = 0x00A00000 00200004 // slot=4, length = 4 Byte 00000008 // addr = 0, len = 8 clk ``` * **配置项:** 波形仓库配置 * **描述:** 向EXCT通道波形仓库写入采样点数据 * **Transaction:** 向0x00B00000地址写入256 Byte数据 ```{.line-numbers} 00B00000 // address = 0x00B00000 00200100 // slot=4, length = 256 Byte 00470013 // 128 samples, 8 clk 0076007B FEF60000 FB91FD65 F91FF9F2 FBEFF9A8 057AFFFF 11100B8C 154E14B6 0ABA1208 F33B0000 DBFFE673 D698D622 EC8ADE31 15D0FFFF 3A682A80 40294256 1CF0334C E0BD0000 AF14C422 A9D6A58B DA3EBC1E 27B1FFFF 642A4B0A 681C6E9C 2C945112 D226FFFF 8EBDAA40 8CAF8439 CF9AA71B 30CDFFFF 763C5A63 76187FFA 30A05A2C CFE4FFFF 8DA5A7BD 8FF68568 D2C2AB48 2BE0FFFF 66304FAE 620B6C6B 26BD4958 DB43FFFF AC6DBE0D B1C8A869 E1E4C63C 1BC3FFFF 3D49311B 37873F38 14A1284D EDB4FFFF D952E04F DE9ED908 F444E869 09C2FFFF 1323104E 0F171278 04BF0A1E FC91FFFF FA68FABC FC98FB33 FF46FE14 0042FFFF 00110036 ``` 仿真结果如下图所示: ![sim_exc_1](assets/sim_exc_1.png) ## 3.2. EXCT.2 调制波形输出 调制波形输出功能将用户配置以采样点经过调制处理后发到DAC, 数字信号经过DAC转换成模拟基带信号, 接着基带信号再经过模拟变频电路变频后得到读出激励信号。 实现波形调制输出所需的全部配置项如下表所示 |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |波形映射表|配置码字到波形地址和长度的映射表| |波形仓库|存储映射表对应的波形| |控制寄存器|控制波形的输出模式,驱动模式,调幅| ### 3.2.1. 编程约束 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|波形输出通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| 以下示例是一个用于发出码字为`0x00000400`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ```{.line-numbers} send x0, x0, 0x400 exit x0, x0, 0 ``` ### 3.2.2. 码字约束 对波形调制输出功能有影响的码字如下表所示: |配置项|值|说明| |:-|:-:|:-| |CODEWORD[12]|0|允许波形输出| |CODEWORD[11]|0|使用码字索引波形| |CODEWORD[10]|EN|清零NCO相位| |CODEWORD[7:0]|ID|设置用于指定的波形的ID| 例如码字`0x00000400`可以触发输出形索引ID为`0`对应的波形,使能NCO相位清零。 ### 3.2.3. 控制寄存器配置 |配置项|值|说明| |:-:|:-:|:-| |ACW|acw|设置输出波形的调幅值,amp = acw/2^14| |FCW|fcw|设置NCO调制频率,freq = fcw/2^32*sample_rate| |PCW|pcw|相位控制字,phi = pcw/2^16\*2*pi| |AMP_SEL|0|使用AWG内部调幅值| |INTP_SEL|0|使用邻近插值滤波器| |MIX_MODE|0|NRZ输出模式| |AWG_MODE|1|波形调制输出模式| 例如设置Amplitude寄存器高16位为16‘h4000, Frequency为32'h10000000, Phase高16位为16’h0000, Function寄存器为32’h00000001, 采用NRZ模式将存储在波形仓库中的采样点输出, 经过希尔伯特变换后然后再与频率为250 MHz相位为0的NCO载波调制后输出。 ### 3.2.4. 波形映射表 + 波形仓库 编程过程中发射的波形ID必须要有对应的映射表进行转换, 而编程的映射表必须要有对应的波形进行匹配。 映射表的一个配置项用32比特表示,高16比特对应地址, 低16比特对应长度,地址和长度的单位都是时钟周期, 在FPGA平台上,一个时钟周期对应16个采样点。 例如映射表配置成 ```{.line-numbers} 0x00000080 0x00800040 ``` 当`ID==0`是从0地址输出128个时钟周期的波形(对应2048个采样点),当`ID==1`时,从128地址开始输出一个长度为64个时钟周期的波形(对应1024个采样点),波形起始地址和波形长度。波形地址加上波形长度的访问范围是12比特,对应最大4096个时钟周期波形输出。 ``` S1S2S3...S16 ... S2033...S2048 ... S3057...S3072 ``` 此时波形仓库中的数据应该如上所示,总共存储了192个时钟周期, FPGA的主频为250 MHz,DAC的更新率为4Gsps, 192个时钟周期对应3072个采样点数据, 其中`S1-2048`采样点对应`ID==0`时输出,`S2049-S3072`采样点对应`ID==1`时输出。 调制模式输出时,波形需要经过希尔伯特变换, 而希尔伯特变换器的归一化通带频率为0.06~0.44, 因此采样点的频率需要处于240~1760 MHz, 否则波形会发生显著的畸变。 ### 3.2.5. 配置示例 以下是直接输出一个312.5 MHz波形调制上一个-250 MHz频率的配置示例, 完整配置示例可参考[exc_2_config.txt](./exc_2_config.txt)。 由于激励和采集在一个芯片上,并被同步信号触发, 为了避免仿采集通道使用未定义数据, 本例为采集通道MCU配置了一条退出指令。 * **配置项:** 系统配置 * **描述:** 对daq(ACQ)与awg(EXCT-Pump)进行软复位 * **Transaction:** 向0x00000018地址写入4 Byte数据 ```{.line-numbers} 00000018 // address = 0x00000018 00200004 // slot=4, length = 4 Byte 00000003 // {daq_rst, awg_rst} ``` * **配置项:** ACQ MCU指令配置 * **描述:** 向ACQ通道MCU指令空间写入配置指令 * **Transaction:** 向0x00200000地址写入4 Byte数据 ```{.line-numbers} 00200000 // address = 0x00200000 00200004 // slot=4, length = 4 Byte 0000002B // exit x0,x0,0 ``` * **配置项:** EXCT-Pump MCU指令配置 * **描述:** 向EXCT-Pump通道MCU指令空间写入配置指令 * **Transaction:** 向0x00700000地址写入16 Byte数据 ```{.line-numbers} 00700000 // address = 0x00700000 00200010 // slot=4, length = 16 Byte 001007B7 // lui x15, 0x100 0007A083 // lw x1, 0x00(x15) 0000A00B // send x0,x1,0 0000002B // exit x0,x0,0 ``` * **配置项:** EXCT-Pump MCU数据配置 * **描述:** 向EXCT-Pump控通道MCU数据空间写入配置数据 * **Transaction:** 向0x00800000地址写入4 Byte数据 ```{.line-numbers} 00800000 // address = 0x00800000 00200004 // slot=4, length = 4 Byte 00000000 // codeword = 0 ``` * **配置项:** 通道控制寄存器配置 * **描述:** 配置波形调制幅度 * **Transaction:** 向0x00900034地址写入12 Byte数据 ```{.line-numbers} 00900034 // address = 0x00900034 0020000C // slot=4, length = 12 Byte 40000000 // amplitud = 0x4000, 归一化值为1 F0000000 // frequency = -250 MHz @4 Gsps 00000000 // phase = 0 ``` * **配置项:** 通道控制寄存器配置 * **描述:** 配置波形输出模式 * **Transaction:** 向0x00900044地址写入4 Byte数据 ```{.line-numbers} 00900044 // address = 0x00900044 00200004 // slot=4, length = 4 Byte 00000001 // AMP_SEL=0, INTP_SEL=0, MIX_MODE=0, AWG_MODE = 1 ``` * **配置项:** 波形查找表配置 * **描述:** 向EXCT通道波形查找表写入查找表数据 * **Transaction:** 向0x00A00000地址写入4 Byte数据 ```{.line-numbers} 00A00000 // address = 0x00A00000 00200004 // slot=4, length = 4 Byte 00000008 // addr = 0, len = 8 clk ``` * **配置项:** 波形仓库配置 * **描述:** 向EXCT通道波形仓库写入采样点数据 * **Transaction:** 向0x00B00000地址写入256 Byte数据 ```{.line-numbers} 00B00000 // address = 0x00B00000 00200100 // slot=4, length = 256 Byte 004C000F // 128 samples, 8 clk 00D800A6 FF6E0085 FB8AFD9F F9DEF9FC 0025FBE2 0C020600 10F61046 042E0CEA EBE6F841 DF60E28A F197E464 196A04AF 32D62A79 1F002F2F E6FE050E BBB4CC23 CB47BAE1 110DEA37 5161369E 4CCF59E2 FE9F2C10 A8F5CF08 9C6C9641 EB8FBB08 538422CF 752A7198 2D535CA7 B936F225 818C9050 BAA490C8 329FF53F 7DB4640D 58967980 E5C12304 8CFFAF7A 9C1F862E 01A6C901 60353858 65967049 133F439A B76CE081 A21EA133 DE8EB8BD 300309CD 4EAA4892 27744230 E5C205D7 C4E4CE93 DA6AC9B1 09FBF1EB 26E61CE9 1DC126B9 FF920F4F EA99F270 ECF9E905 FD09F47B 08E40458 08C50A35 023C05AF FDE9FF76 FE1CFD96 FFA1FEF0 0007FFF9 ``` 仿真结果如下图所示,输出频率为 312.5MHz-250MHz=62.5MHz, 32ns输出显示了2个周期波形,符合预期。 ![sim_exc_2](assets/sim_exc_2.png) # 4. ACQ通道 读出采集通道用于处理来自量子比特的返回信号, 对返回信号的处理控制包括模拟调制和数字控制两个部分。 ez-Q 2.5 FPGA平台变频电路沿用ez-Q 2.0的硬件, 目前不支持变频增益控制,LO本振频率控制暂不开放, LO频率固定为5.5 GHz,因此模拟电路无需配置。 采集通道的数字电路输入控制如下图所示 ![readout_awg](assets/readout_daq.png) 数字电路配置项包括MCU指令、MCU数据、参数查找表、滤波器系数表和若干控制寄存器。 相应的功能如下所示: * MCU指令+MCU数据用于控制实验流程和产生执行命令; * 参数表+滤波器系数用于获取指定匹配滤波器系数和提供态判断参数; * 基带输入控制寄存器用于控制采集处理过程; 其中输出控制寄存器可以通过上位机直接配置, 此外基带输出控制寄存器也被映射到了MCU的访存空间, MCU也可以通过修改寄存器来实时控制信号处理行为。 本文暂未涉及到需要实时修改控制寄存器的用例, 默认都是通过上位机直接配置控制寄存器。 ## 4.1. ACQ.1 波形采集 波形采集功能将ADC采集到的原始波形数据采集并上传到上位机。 |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |控制寄存器|控制采集参数| |模拟寄存器|控制变频增益和频率| ### 4.1.1. 编程约束 不同于激励信号输出可以做到背靠背输出, 波形采集需要保证两次采集之间预留50ns的死时间。 其中死时间定义为两次触发的间隔时间减去波形持续的时间。 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|波形采集通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| |5|生成触发码字的死时间应≥50 ns| |6|波形持续采集数据速率应≤ 200 Mbps(数据上报速率)| |7|波形突发采集数据量≤ 128 KB(片内缓存容量)| 以下示例是一个用于发出码字为`0x00001000`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ``` lui x1, 0x1 send x0, x1, 0x0 exit x0, x0, 0 ``` ### 4.1.2. 码字约束 与波形采集相关的码字如下表所示: |配置项|值|说明| |:-|:-:|:-| |CODEWORD[12]|1'h1|采集波形数据| 建议通过设置`0`来关闭其它采集功能选项, 例如码字为`0x00001000`时,表示仅触发波形采集功能, 若开启其它采集选项,采集死时间受不同的功能组合而改变。 ### 4.1.3. 控制寄存器配置 在波形采集实验中,主要配置的寄存器参数包括波形采集的深度和数据回传方式。 下表设置采用数据自动推送,该模式先采集的数据先推送,数据以流模式返回。 |配置项|值|说明| |:-|:-:|:-| |spi_rd_en|1'h0|设置为主动数据推送模式| |sample_depth|sample_depth|要采集数据的深度,16bit, 单位是时钟周期| ### 4.1.4. 配置示例 以下是采集一段长度为64ns波形的示例, 完整配置示例可参考[acq_1_config.txt](./acq_1_config.txt)。 为了方便观察信号,我们将`EXCT.1`示例的输出环回到采集通道。 本示例额外配置了数据阈值请求量`int_threshold`, 以告知仿真器在采集到足够数据后停止运行 并将采集到的数据写入文件。 * **配置项:** 系统配置 * **描述:** 对daq(ACQ)与awg(EXCT-Pump)进行软复位 * **Transaction:** 向0x00000018地址写入4 Byte数据 ```{.line-numbers} 00000018 // address = 0x00000018 00200004 // slot=4, length = 4 Byte 00000003 // {daq_rst, awg_rst} ``` * **配置项:** ACQ MCU指令配置 * **描述:** 向ACQ通道MCU指令空间写入配置指令 * **Transaction:** 向0x00200000地址写入16 Byte数据 ```{.line-numbers} 00200000 // address = 0x00200000 00200010 // slot=4, length = 16 Byte 001007B7 // lui x15, 0x100 0007A083 // lw x1, 0x00(x15) 0000A00B // send x0,x1,0 0000002B // exit x0,x0,0 ``` * **配置项:** ACQ MCU数据配置 * **描述:** 向ACQ通道MCU数据空间写入配置数据 * **Transaction:** 向0x00300000地址写入4 Byte数据 ```{.line-numbers} 00300000 // address = 0x00300000 00200004 // slot=4, length = 4 Byte 00001000 // codeword = 00001000 ``` * **配置项:** ACQ 通道控制寄存器配置 * **描述:** 配置数据模式和采样深度 * **Transaction:** 向0x00400044地址写入8 Byte数据 ```{.line-numbers} 00400044 // address = 0x00400044 00200008 // slot=4, length = 8 Byte 00000000 // spi_rd_en = 0 00000010 // sample_depth = 16 clk ``` * **配置项:** ACQ 通道控制寄存器配置 * **描述:** 配置数据请求阈值 * **Transaction:** 向0x00400050地址写入4 Byte数据 ```{.line-numbers} 00400050 // address = 0x00400050 00200004 // slot=4, length = 4 Byte 00000040 // int_threshold = 64 ``` `EXCT`通道的**MCU指令配置**、**MCU数据配置**、**通道控制寄存器配置**、**波形查找表配置**、**波形仓库配置** 保持与EXCT.1相同,不再赘述。 以下是推送的数据(含帧头) @import "acq_1_pack.txt" 去除帧头的波形数据如下图所示 ![daq_wave](assets/sim_acq_1.png) ## 4.2. ACQ.2 IQ数据采集 IQ采集功能利用解模算法计算输入信号的IQ值, 并将IQ值采集并推送到上位机。 受限于FPGA的计算资源,FPGA平台仅支持系数直读模式,不支持权重计算模式, 因此FPGA平台下需要配置匹配滤波器系数。 而ASIC平台滤波器系数是自动生成的,无该配置项。 以下是ez-Q 2.5 FPGA平台下所需的配置项: |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |控制寄存器|控制解模采集相关参数| |读出控制参数表|定义了解模所用的参数索引| |匹配滤波器系数|定义了解模匹配滤波器系数| |模拟寄存器|控制变频增益和频率| ### 4.2.1. 编程约束 解模采集需要保证两次采集之间预留50ns的死时间。 其中死时间定义为两次触发的间隔时间减去比特最大解模时间。 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|IQ解模数据采集通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| |5|生成触发码字的死时间应≥50 ns| |6|IQ数据持续采集数据速率应≤ 200 Mbps(数据上报速率)| |7|IQ数据突发采集数据量≤ 128 KB(片内缓存容量)| 以下示例是一个用于发出码字为`0xFFFF2110`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ``` lui x1, 0xFFFF2 send x0, x1, 0x110 exit x0, x0, 0 ``` ### 4.2.2. 码字约束 与IQ解模采集相关的码字如下表所示: |配置项|值|说明| |:-|:-|:-| |CODEWORD[31:16]|QUBIT_EN|需要采集的频点,最大16个| |CODEWORD[13]|1'h1|使能IQ数据采集| |CODEWORD[11:10]|2'h0|使用参数表中配置| |CODEWORD[8]|DEMOD_CLR_VAL|IQ数据求和清零| |CODEWORD[4]|DEMOD_SUM_VAL|IQ数据求和使能| |CODEWORD[3:0]|PARA_ID|IQ解模选择的参数| 例如码字为`0xFFFF2110`时,表示仅触发IQ采集功能, 该码字使能了全部16个频点的IQ数据采集功能, 同时使能了IQ求和和IQ求和清零操作, 此时会先执行清零再执行求和,得到单次解模结果, 解模使用的参数为`PARA_ID=0`索引参数。 建议通过设置`0`来关闭其它功能选项, 若开启其它选项,采集死时间受不同的功能组合而改变。 如果需要对`N`次解模IQ进行求和, 那么第一次操作应该使能求和清零和解模求和不使能存储, 中间`N-2`次使能解模求和不使能清零和存储, 最后一次使能存储和解模求和不使能清零。 当需要采集多次求和结果时,重复上述过程即可。 ### 4.2.3. 控制寄存器配置 在IQ采集实验中,主要配置的寄存器参数为采集的深度和数据回传方式和IQ数据的截取范围。 |配置项|值|说明| |:-|:-:|:-| |spi_rd_en|1'h0|设置为主动数据推送模式| |iq_scale|1’h0|选择小iq范围| 上述设置数据自动推送,先采集的数据先推送,仅使能的频点数据返回, 同时采集的多个频点数据先返回频点序号较小的数据,数据以流模式持续推送直至推送完成。 ### 4.2.4. 解模参数配置 码字为`0xFFFF2110`使用了PARA_ID为0的解模参数, 对于每个比特而言,由于只执行解模,仅需要配置参数组中的mtf_idx域。 下表为qubit0的配置结构,由于只用了一组参数,因此只需要配置一组参数。 由于使能了16个qubit,因此每个qubit都需要配置, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值|说明| |:-|:-:|:-| |0x00500000|dds_pfw|无需配置| |0x00500004|mtf_idx|需要配置| ### 4.2.5. 匹配滤波器系数配置 由于解模使用参数配置表中的`mtf_idx`来索引匹配滤波器系数, 因此匹配滤波器系数对应区域需要配置。 例如当`mtf_idx`等于`0x00000020`时, 表示使用从0偏移地址开始的32个地址内存储的匹配滤波器系数。 每个地址i、q数据分别存储16个系数,每个系数占用1个字节 下图是qubit0解模i、q系数的存储示意图, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值| |:-|:-:| |0x00580000|I0...I15| |...|...| |0x005801FC|I496...I511| |0x00584000|Q0...Q15| |...|...| |0x005841FC|Q496...Q511| ### 4.2.6. 配置示例 本例是采集q0到q3解模结果的示例, 本示例额外配置了数据阈值请求量`int_threshold`, 以告知仿真器在采集到足够数据后停止运行 并将采集到的数据写入文件。 完整配置示例可参考[acq_2_config.txt](./acq_2_config.txt)。 为了方便观察信号,我们将`EXCT.1`示例的输出环回到采集通道。 `EXCT`通道的**MCU指令配置**、**MCU数据配置**、**通道控制寄存器配置**、**波形查找表配置** 保持与EXCT.1相同。此外为了方便观察4个频点解模结果, 波形改成了包含[407666666, 437533333, 467800000, 499600000]四个频点的多音信号。 激励通道相关配置不再赘述。 * **配置项:** 系统配置 * **描述:** 对daq(ACQ)与awg(EXCT-Pump)进行软复位 * **Transaction:** 向0x00000018地址写入4 Byte数据 ```{.line-numbers} 00000018 // address = 0x00000018 00200004 // slot=4, length = 4 Byte 00000003 // {daq_rst, awg_rst} ``` * **配置项:** ACQ MCU指令配置 * **描述:** 向ACQ通道MCU指令空间写入配置指令 * **Transaction:** 向0x00200000地址写入16 Byte数据 ```{.line-numbers} 00200000 // address = 0x00200000 00200010 // slot=4, length = 16 Byte 001007B7 // lui x15, 0x100 0007A083 // lw x1, 0x00(x15) 0000A00B // send x0,x1,0 0000002B // exit x0,x0,0 ``` * **配置项:** ACQ MCU数据配置 * **描述:** 向ACQ通道MCU数据空间写入配置数据 * **Transaction:** 向0x00300000地址写入4 Byte数据 ```{.line-numbers} 00300000 // address = 0x00300000 00200004 // slot=4, length = 4 Byte 000f2110 // codeword = 0x000f2110 ``` * **配置项:** ACQ 通道控制寄存器配置 * **描述:** 配置数据模式和采样深度 * **Transaction:** 向0x00400044地址写入4 Byte数据 ```{.line-numbers} 00400044 // address = 0x00400044 00200004 // slot=4, length = 4 Byte 00000000 // spi_rd_en = 0, iq_scale = 0, two_sta_en = 0 ``` * **配置项:** ACQ 通道控制寄存器配置 * **描述:** 配置数据请求阈值 * **Transaction:** 向0x00400050地址写入4 Byte数据 ```{.line-numbers} 00400050 // address = 0x00400050 00200004 // slot=4, length = 4 Byte 00000008 // int_threshold = 8 ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q0匹配滤波器系数查找表 * **Transaction:** 向0x00500004地址写入4 Byte数据 ```{.line-numbers} 00500004 // address = 0x00500004 00200004 // slot=4, length = 4 Byte 00000010 // qubit 0 group 0 para mtf_idx ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q1匹配滤波器系数查找表 * **Transaction:** 向0x00500804地址写入4 Byte数据 ```{.line-numbers} 00500804 // address = 0x00500804 00200004 // slot=4, length = 4 Byte 00000010 // qubit 1 group 0 para mtf_idx ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q2匹配滤波器系数查找表 * **Transaction:** 向0x00501004地址写入4 Byte数据 ```{.line-numbers} 00501004 // address = 0x00501004 00200004 // slot=4, length = 4 Byte 00000010 // qubit 2 group 0 para mtf_idx ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q3匹配滤波器系数查找表 * **Transaction:** 向0x00501804地址写入4 Byte数据 ```{.line-numbers} 00501804 // address = 0x00501804 00200004 // slot=4, length = 4 Byte 00000010 // qubit 3 group 0 para mtf_idx ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q0匹配滤波器系数实部 * **Transaction:** 向0x00580000地址写入256 Byte数据 ```{.line-numbers} 00580000 // address = 0x00580000 00200100 // slot=4, length = 256 Byte 95D42465 // qubit 0 256 mtf_i samples 32E39E81 155B7E6E A9838EC6 7B7440F2 88B90650 4C01B586 F644767A C28C84AD 707D5810 81A2E737 621FCF93 D928687E DE9B8198 5F7E6B2E 8290CA1A 733CEDA5 BD0B547C FCB18589 48787849 8A85B0FB 7C550BBD A5EC3B72 1ACB9082 2D6B7E5F 98819BDD 7E6929D9 92CF1E62 37E8A281 0F587D70 AD848BC1 797745F7 86B4004C 5106B988 F13F747B C78E82A8 6D7E5C16 819EE232 6625D596 D323657E E39F8195 5B7D6E33 838DC514 7540F2A9 B805507B 02B58687 43767A4D 8C83ACF6 7D5911C2 A1E73670 20D09381 28687E63 9C8198D8 7E6C2EDF 90CA195E 3CEEA682 0A537C73 B18589BC 787849FD 84B0FB47 550CBE8A EB3A727C CC9182A4 6A7E601B ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q0匹配滤波器系数虚部 * **Transaction:** 向0x00584000地址写入256 Byte数据 ```{.line-numbers} 00584000 // address = 0x00584000 00200100 // slot=4, length = 256 Byte 4577794B // qubit 0 128 mtf_q samples 8B84AEF8 7D570FC0 A3E93871 1ECE9281 2A697E61 9B8199DA 7E6A2CDD 91CC1B60 3AEBA482 0C557C72 B0858ABE 787847FB 85B1FD49 530ABC89 ED3C737C CA9082A6 6C7E5E19 819CDF2E 6828D898 D020637E E7A18193 597D7036 838CC211 7643F6AC B5024D7A 05B88886 40757B50 8D83A9F2 7D5B14C5 9FE3336E 23D39581 24667E65 9E8196D5 7E6D32E2 8EC6165C 3FF1A882 06517B74 B48688B9 77794C00 84ADF745 580FC18B E837707D CF9281A2 697E621F 8198D929 6B2DDD9B CB1A5F7E ECA58290 547C723B 858ABD0B 7848FBB0 B1FC4978 0BBD8985 3C727C54 9082A5ED 7E5F1ACA 9BDE2E6B 29D99881 1F627E68 A28193CF 7D7037E7 8CC21058 44F7AD84 ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q1匹配滤波器系数实部 * **Transaction:** 向0x00588000地址写入256 Byte数据 ```{.line-numbers} 00588000 // address = 0x00588000 00200100 // slot=4, length = 256 Byte 8AC41862 // qubit 1 128 mtf_i samples 590CB986 CF24697E 00AF838F 306F7C50 A68196DB 757946F3 819DE73B 753CE79D A6F34679 30DB9681 FF507C70 CF9083AF 597E6925 8A86B90C 7E6219C4 8AC31861 5A0CB986 CE24697E 00AF838F 306F7C50 A68196DA 757947F4 819DE63B 753CE79E A5F24579 31DB9681 FF4F7C70 D09083AE 597E6A25 8A86B80B 7E6219C4 8AC31761 5A0DBA86 CE23697E 00B0838F 2F6F7C51 A68195DA 747947F4 819DE63A 753CE89E A5F24579 31DC9781 FE4F7C70 D09083AE 587E6A26 8B86B80B 7E621AC5 8AC21761 5A0DBA86 CE23687E 01B0838F 2F6F7C51 A78195D9 747947F4 819CE53A 753DE89E A5F24579 32DC9781 FE4F7C70 D09083AE 587E6A26 8B85B80A 7E631AC5 ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q1匹配滤波器系数虚部 * **Transaction:** 向0x0058C000地址写入256 Byte数据 ```{.line-numbers} 0058C000 // address = 0x0058C000 00200100 // slot=4, length = 256 Byte 306F7C50 // qubit 1 128 mtf_q samples A68196DB 757946F3 819DE73B 753BE79D A6F34679 30DB9681 FF507C70 CF9083AF 597E6925 8A86B90C 7E6219C4 8AC31861 5A0CB986 CF24697E 00AF838F 306F7C50 A68196DA 757946F4 819DE63B 753CE79E A5F24679 31DB9681 FF507C70 D09083AE 597E6925 8A86B80B 7E6219C4 8AC31861 5A0DBA86 CE24697E 00B0838F 2F6F7C51 A68195DA 747947F4 819DE63B 753CE89E A5F24579 31DC9681 FE4F7C70 D09083AE 597E6A25 8B86B80B 7E6219C5 8AC31761 5A0DBA86 CE23687E 01B0838F 2F6F7C51 A78195D9 747947F4 819CE53A 753DE89E A5F24579 31DC9781 FE4F7C70 D09083AE 587E6A26 8B86B80A 7E631AC5 8AC21761 5A0EBA86 CD23687E 01B0838F ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q2匹配滤波器系数实部 * **Transaction:** 向0x00590000地址写入256 Byte数据 ```{.line-numbers} 00590000 // address = 0x00590000 00200100 // slot=4, length = 256 Byte 83B40C5E // qubit 2 128 mtf_i samples 7435DA92 97E33D78 5703AD82 BC16647E 2CD18E85 EC457A70 F9A6819D 1F697D50 C88A88C4 4D7C6C23 A081A3F5 6E7B49F0 878CCD28 7E661AC0 81AAFF54 7941E79A 90D63173 6010B884 B1085B7E 38DD9482 DF397676 07B08295 12617E5A D48F84B9 42797230 A9819AE8 677E53FE 8B87C11B 7C6E27CC 81A0F14A 7C4CF4A2 8AC9246C 691EC388 A7FB517D 44EB9C81 D22D717A 14BB858E 04587E63 E19682AE 3675773C B38393DB 5F7E5D0B 9183B50E 787433D8 8198E43E 7E5602AC 86BD1765 702BCF8D 9EED467B 4FF8A581 C5206A7D 22C78989 F74E7D6B EF9F81A4 296F7B48 BF868CCE 557E6619 9981AB00 737940E5 8491D732 7E600FB7 83B2095C 7537DC94 ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q2匹配滤波器系数虚部 * **Transaction:** 向0x00594000地址写入256 Byte数据 ```{.line-numbers} 00594000 // address = 0x00594000 00200100 // slot=4, length = 256 Byte 19667E55 // qubit 2 128 mtf_q samples CE8C86BF 487B6F29 A4819FEF 6B7D4DF6 8989C722 7D6A20C5 81A5F94F 7B46ED9D 8DD02B70 6416BD86 AC02577E 3EE39881 D9347478 0DB58392 0C5D7E5E DA9283B4 3C777535 AD8297E2 637E5804 8E85BC15 7A712DD1 819CEB45 7D51FAA6 88C41E69 6C24C98A A3F54C7C 49F1A081 CC276E7C 1AC0878C FE547E67 E79A81A9 30727941 B88490D5 5A7E6111 9582B008 767639DE 8295DE39 7E5B08B1 84B81161 7230D590 9AE74179 54FEA981 C01A677E 28CC8C87 F1497B6E F5A381A0 236C7C4C C4888AC8 507D691E 9D81A6FA 707A45EB 858ED12C 7E6315BC 82AD0358 773DE297 92DA3574 5D0CB483 B50D5E7E 34D99283 E33D7874 02AD8197 16647E57 D08D85BD ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q3匹配滤波器系数实部 * **Transaction:** 向0x00598000地址写入256 Byte数据 ```{.line-numbers} 00598000 // address = 0x00598000 00200100 // slot=4, length = 256 Byte 81A60059 // qubit 3 128 mtf_i samples 7E59FFA5 81A6005A 7E58FEA5 81A7015A 7E58FEA5 81A7025B 7E58FDA4 81A8025B 7E57FCA4 81A8035C 7E57FCA3 81A9035C 7E56FBA3 81A9045C 7E56FBA2 81AA055D 7E55FAA2 81AA055D 7E55F9A1 81AB065E 7E54F9A1 81AB075E 7E54F8A1 81AB075F 7E53F7A0 81AC085F 7E53F7A0 81AC095F 7E52F69F 81AD0960 7E52F59F 81AD0A60 7E51F59F 81AE0A61 7E51F49E 81AE0B61 7E50F49E 81AF0C62 7E50F39D 81AF0C62 7E4FF29D 81B00D62 7E4FF29C 81B00E63 7E4EF19C 81B10E63 7E4EF09C 81B10F64 7D4DF09B 82B21064 7D4DEF9B 82B21064 7D4CEE9B 82B31165 7D4CEE9A 82B31165 7D4BED9A 82B41265 7D4BED99 82B41366 7D4AEC99 82B51366 7D4AEB99 ``` * **配置项:** ACQ 匹配滤波器系数 * **描述:** 配置q3匹配滤波器系数虚部 * **Transaction:** 向0x0059C000地址写入256 Byte数据 ```{.line-numbers} 0059C000 // address = 0x0059C000 00200100 // slot=4, length = 256 Byte 00597E59 // qubit 3 128 mtf_q samples FFA581A6 005A7E59 FEA581A6 015A7E58 FEA481A7 025B7E58 FDA481A7 025B7E57 FCA481A8 035C7E57 FCA381A8 045C7E56 FBA381A9 045D7E56 FAA281A9 055D7E56 FAA281AA 065D7E55 F9A181AA 065E7E55 F8A181AB 075E7E54 F8A181AB 075F7E54 F7A081AC 085F7E53 F7A081AC 09607E53 F69F81AD 09607E52 F59F81AD 0A607E52 F59E81AE 0B617E51 F49E81AE 0B617E51 F39E81AE 0C627E50 F39D81AF 0D627E50 F29D81AF 0D627E4F F19C81B0 0E637E4F F19C81B0 0E637E4E F09C81B1 0F647E4E F09B81B1 10647D4D EF9B82B2 10647D4D EE9A82B2 11657D4C EE9A82B3 12657D4C ED9A82B4 12667D4B EC9982B4 13667D4B EC9982B5 14667D4A EB9982B5 ``` 推送的数据结果如下所示 @import "acq_2_pack.txt" 绘制到iq平面上的结果如下图所示 ![sim_acq_2](assets/sim_acq_2.png) ## 4.3. ACQ.3 态数据采集 态采集功能首先利用解模算法计算IQ值, 接着用态判断算法计算IQ值对应的比特状态, 最后将计算出来的态信息采集并推送到上位机。 态采集功能会利用IQ解模结果, 除配置解模所需参数外还需要额外配置态判断所需参数。 以下是ez-Q 2.5 FPGA平台下所需的配置项: |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |控制寄存器|采集的相关配置| |读出控制参数表|定义了读出所用的参数索引| |匹配滤波器系数|定义了解模匹配滤波器系数| |模拟寄存器|控制变频增益和频率| ### 4.3.1. 编程约束 态采集需要保证两次态采集之间预留50ns的死时间。 其中死时间定义为两次触发的间隔时间减去比特解模解模时间。 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|IQ解模数据采集通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| |5|生成触发码字的死时间应≥50 ns| |6|态持续采集数据速率应≤ 200 Mbps(数据上报速率)| |7|态数据突发采集数据量≤ 128 KB(片内缓存容量)| 以下示例是一个用于发出码字为`0xFFFF4000`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ``` lui x1, 0xFFFF4 send x0, x1, 0x0 exit x0, x0, 0 ``` ### 4.3.2. 码字约束 与态采集相关的码字如下表所示: |配置项|值|说明| |:-|:-|:-| |CODEWORD[31:16]|QUBIT_EN|需要采集的频点,最大16个| |CODEWORD[14]|1'h1|使能态数据采集| |CODEWORD[11:10]|2'h0|使用参数表中配置| |CODEWORD[3:0]|PARA_ID|IQ解模选择的参数| 例如码字为`0xFFFF4000`时,表示仅触发态采集功能, 该码字使能了全部16个频点的态数据采集功能, 解模使用的参数为`PARA_ID=0`索引参数。 建议通过设置`0`来关闭其它功能选项, 若开启其它选项,采集死时间受不同的功能组合而改变。 ### 4.3.3. 控制寄存器配置 在IQ采集实验中,主要配置的寄存器参数为采集的深度和数据回传方式和IQ数据的截取范围。 |配置项|值|说明| |:-|:-:|:-| |spi_rd_en|1'h0|设置为主动数据推送模式| |iq_scale|1’h0|选择小iq范围| |two_state_en|1‘b0|不用两态判定| 上述设置数据自动推送,先采集的数据先推送, 只要发生采集操作即将全部16个qubit数据推送, 数据以流模式持续推送直至推送完成。 ### 4.3.4. 解模参数配置 码字为`0xFFFF4000`使用了PARA_ID为0的解模参数, 对于每个比特而言,需要执行解模和态判断, 因此需要配置参数组中的mtf_idx、ab[0,1,2]、c[0,1,2]域。 下表为qubit0的配置结构,由于只用了一组参数,因此只需要配置一组参数。 由于使能了16个qubit,因此每个qubit都需要配置, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值|说明| |:-|:-:|:-| |0x00500000|dds_pfw|无需配置| |0x00500004|mtf_idx|需要配置| |0x00500008|ab0|需要配置| |0x0050000c|c0|需要配置| |0x00500010|ab1|需要配置| |0x00500014|c1|需要配置| |0x00500018|ab2|需要配置| |0x0050001c|c2|需要配置| ### 4.3.5. 匹配滤波器系数配置 由于解模使用参数配置表中的`mtf_idx`来索引匹配滤波器系数, 因此匹配滤波器系数对应区域需要配置。 例如当`mtf_idx`等于`0x00000020`时, 表示使用从0偏移地址开始的32个地址内存储的匹配滤波器系数。 每个地址i、q数据分别存储16个系数,每个系数占用1个字节 下图是qubit0解模i、q系数的存储示意图, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值| |:-|:-:| |0x00580000|I0...I15| |...|...| |0x005801FC|I496...I511| |0x00584000|Q0...Q15| |...|...| |0x005841FC|Q496...Q511| ### 4.3.6. 配置示例 本例是采集q0到q3态结果的示例, 完整配置示例可参考[acq_3_config.txt](./acq_3_config.txt)。 本示例相比ACQ.2 仅ACQ码字、触发阈值和参数查找表不同。 * 码字差别: 采集数据从IQ数据变为态数据 * 触发阈值:数据量从8个四字节变为1个四字节 * 参数查找表: 由于要进行态判断,需要配置态判断参数 具体差异配置如下所示: * **配置项:** ACQ MCU数据配置 * **描述:** 向ACQ通道MCU数据空间写入配置数据 * **Transaction:** 向0x00300000地址写入4 Byte数据 ```{.line-numbers} 00300000 // address = 0x00300000 00200004 // slot=4, length = 4 Byte 000f4000 // codeword = 0x000f4000 ``` * **配置项:** ACQ 通道控制寄存器配置 * **描述:** 配置数据请求阈值 * **Transaction:** 向0x00400050地址写入4 Byte数据 ```{.line-numbers} 00400050 // address = 0x00400050 00200004 // slot=4, length = 4 Byte 00000001 // int_threshold = 1 ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q0匹配滤波器系数查找表 * **Transaction:** 向0x00500004地址写入28 Byte数据 ```{.line-numbers} 00500004 // address = 0x00500004 0020001C // slot=4, length = 28 Byte 00000010 // qubit 0 group 0 para mtf_idx 80018001 00000000 00007FFF 00000000 7FFF8001 00000000 ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q1匹配滤波器系数查找表 * **Transaction:** 向0x00500804地址写入28 Byte数据 ```{.line-numbers} 00500804 // address = 0x00500804 0020001C // slot=4, length = 28 Byte 00000010 // qubit 1 group 0 para mtf_idx 80018001 00000000 00007FFF 00000000 7FFF8001 00000000 ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q2匹配滤波器系数查找表 * **Transaction:** 向0x00501004地址写入28 Byte数据 ```{.line-numbers} 00501004 // address = 0x00501004 0020001C // slot=4, length = 28 Byte 00000010 // qubit 2 group 0 para mtf_idx 80018001 00000000 00007FFF 00000000 7FFF8001 00000000 ``` * **配置项:** ACQ 参数查找表配置 * **描述:** 配置q3匹配滤波器系数查找表 * **Transaction:** 向0x00501804地址写入28 Byte数据 ```{.line-numbers} 00501804 // address = 0x00501804 0020001C // slot=4, length = 28 Byte 00000010 // qubit 3 group 0 para mtf_idx 80018001 00000000 00007FFF 00000000 7FFF8001 00000000 ``` 推送的数据结果如下所示 @import "acq_3_pack.txt" 上述结果显示q0~q3分别处于2、1、0、1态, 其余未测量的比特处于未定义的3态。 ## 4.4. ACQ.4 计数数据采集 态计数采集功能利用解模算法计算输入信号的IQ值, 接着利用态判断算法到量子比特的状态, 最后对0态、1态、2态和3态进行计数统计, 最后将将每个比特的四个计数值采集并推送到上位机。 受限于FPGA的计算资源,FPGA平台解模仅支持系数直读模式,不支持权重计算模式, 因此FPGA平台下需要配置匹配滤波器系数。 而ASIC平台滤波器系数是自动生成的,无该配置项。 以下是ez-Q 2.5 FPGA平台下所需的配置项: |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |控制寄存器|控制态统计采集相关参数| |读出控制参数表|定义了解模所用的参数索引| |匹配滤波器系数|定义了解模匹配滤波器系数| |模拟寄存器|控制变频增益和频率| ### 4.4.1. 编程约束 解模采集需要保证两次采集之间预留50ns的死时间。 其中死时间定义为两次触发的间隔时间减去比特最大解模时间。 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|IQ解模数据采集通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| |5|生成触发码字的死时间应≥50 ns| |6|IQ数据持续采集数据速率应≤ 200 Mbps(数据上报速率)| |7|IQ数据突发采集数据量≤ 128 KB(片内缓存容量)| 以下示例是一个用于发出码字为`0xFFFF8220`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ``` lui x1, 0xFFFF8 send x0, x1, 0x220 exit x0, x0, 0 ``` ### 4.4.2. 码字约束 与态计数采集相关的码字如下表所示: |配置项|值|说明| |:-|:-|:-| |CODEWORD[31:16]|QUBIT_EN|需要采集的频点,最大16个| |CODEWORD[15]|1'h1|使能态计数数据采集| |CODEWORD[11:10]|2'h0|使用参数表中配置| |CODEWORD[9]|STATE_CLR_VAL|态计数统计清零| |CODEWORD[5]|STATE_STS_VAL|态计数统计使能| |CODEWORD[3:0]|PARA_ID|IQ解模选择的参数| 例如码字为`0xFFFF8220`时,表示仅触发态计数采集功能, 该码字使能了全部16个频点的IQ数据采集功能, 同时使能了计数统计和计数清零操作, 此时会先执行清零再执行统计,得到单次计数结果, 解模使用的参数为`PARA_ID=0`索引参数。 建议通过设置`0`来关闭其它功能选项, 若开启其它选项,采集死时间受不同的功能组合而改变。 态计数一般应用存在多次读出过程的实验中, 对于需要对`N`次读出进行态计数统计的实验, 那么第一次操作应该使能计数清零和计数统计且不使能计数存储, 中间`N-2`次使能计数统计不使能计数清零和计数存储, 最后一次使能计数存储和计数统计不使能计数清零。 当需要采集多次计数统计结果时,重复上述过程即可。 ### 4.4.3. 控制寄存器配置 在态计数采集实验中,主要配置的寄存器参数为数据回传方式和IQ数据的截取范围以及是否使能2态判定。 |配置项|值|说明| |:-|:-:|:-| |spi_rd_en|1'h0|设置为主动数据推送模式| |iq_scale|1’h0|选择小iq范围| |two_state_en|1‘b0|不用两态判定| 上述设置数据自动推送,先采集的数据先推送,仅使能的频点数据返回, 同时采集的多个频点数据先返回频点序号较小的数据,数据以流模式持续推送直至推送完成。 ### 4.4.4. 解模参数配置 码字为`0xFFFF8220`使用了PARA_ID为0的解模参数, 对于每个比特而言,由于只执行解模和态判断, 因此需要配置参数组中的mtf_idx、ab[0,1,2]、c[0,1,2]域。 下表为qubit0的配置结构,由于只用了一组参数,因此只需要配置一组参数。 由于使能了16个qubit,因此每个qubit都需要配置, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值|说明| |:-|:-:|:-| |0x00500000|dds_pfw|无需配置| |0x00500004|mtf_idx|需要配置| |0x00500008|ab0|需要配置| |0x0050000c|c0|需要配置| |0x00500010|ab1|需要配置| |0x00500014|c1|需要配置| |0x00500018|ab2|需要配置| |0x0050001c|c2|需要配置| ### 4.4.5. 匹配滤波器系数配置 由于解模使用参数配置表中的`mtf_idx`来索引匹配滤波器系数, 因此匹配滤波器系数对应区域需要配置。 例如当`mtf_idx`等于`0x00000020`时, 表示使用从0偏移地址开始的32个地址内存储的匹配滤波器系数。 每个地址i、q数据分别存储16个系数,每个系数占用1个字节 下图是qubit0解模i、q系数的存储示意图, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值| |:-|:-:| |0x00580000|I0...I15| |...|...| |0x005801FC|I496...I511| |0x00584000|Q0...Q15| |...|...| |0x005841FC|Q496...Q511| ### 4.4.6. 配置示例 本例是采集q0到q3态统计结果的示例, 完整配置示例可参考[acq_4_config.txt](./acq_4_config.txt)。 该示例在acq.3示例的基础上仅修改了码字和采集数据量。 * 码字: 从`0x000f4000`改成了`0x000f8220`,采集数据不同 * 阈值: 从`0x000000001`改成了`0x00000010`,数据量不同。 差异配置如下所示: * **配置项:** ACQ MCU数据配置 * **描述:** 向ACQ通道MCU数据空间写入配置数据 * **Transaction:** 向0x00300000地址写入4 Byte数据 ```{.line-numbers} 00300000 // address = 0x00300000 00200004 // slot=4, length = 4 Byte 000f8220 // codeword = 0x000f8220 ``` * **配置项:** ACQ 通道控制寄存器配置 * **描述:** 配置数据请求阈值 * **Transaction:** 向0x00400050地址写入4 Byte数据 ```{.line-numbers} 00400050 // address = 0x00400050 00200004 // slot=4, length = 4 Byte 00000010 // int_threshold = 16 ``` 采集到的数据如下所示: @import "acq_4_pack.txt" 上述数据分析如下,与acq.3实验结果吻合。 * q0出现了1次2态,其余态出现0次 * q1出现了1次1态,其余态出现0次 * q2出现了1次0态,其余态出现0次 * q3出现了1次1态,其余态出现0次 ## 4.5. ACQ.5 读出态反馈 态读出反馈功能首先利用解模算法得到IQ值, 接着利用态判断算法计算IQ值对应的比特状态, 最后将计算出来的态信息通过上行和下行反馈端口发出。 以下是ez-Q 2.5 FPGA平台下所需的配置项: |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |控制寄存器|读出的相关配置| |读出控制参数表|定义了读出所用的参数索引| |匹配滤波器系数|定义了解模匹配滤波器系数| |模拟寄存器|控制变频增益和频率| ### 4.5.1. 编程约束 态读出反馈需要保证两次态采集之间预留50ns的死时间。 其中死时间定义为两次触发的间隔时间减去比特解模解模时间。 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|IQ解模数据采集通过发出码字来控制| |3|程序结束应该调用exit来退出运行。| |4|指令和数据的最大容量为16 KB| |5|生成触发码字的死时间应≥50 ns| 以下示例是一个用于发出码字为`0xFFFF00C0`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 ``` lui x1, 0xFFFF0 send x0, x1, 0x0C0 exit x0, x0, 0 ``` ### 4.5.2. 码字约束 与态采集相关的码字如下表所示: |配置项|值|说明| |:-|:-|:-| |CODEWORD[31:16]|QUBIT_EN|需要采集的频点,最大16个| |CODEWORD[11:10]|2'h0|使用参数表中配置| |CODEWORD[7]|上行端口发送使能| |CODEWORD[6]|下行端口发送使能| |CODEWORD[3:0]|PARA_ID|IQ解模选择的参数| 例如码字为`0xFFFF00C0`时,表示仅触发反馈读出功能, 该码字使能了全部16个频点的态数据读出上下行反馈功能, 解模使用的参数为`PARA_ID=0`索引参数。 建议通过设置`0`来关闭其它功能选项, 若开启其它选项,采集死时间受不同的功能组合而改变。 ### 4.5.3. 控制寄存器配置 在态读出反馈实验中,主要配置的寄存器参数为IQ数据的截取范围和态判断的模式。 |配置项|值|说明| |:-|:-:|:-| |iq_scale|1’h0|选择小iq范围| |two_state_en|1‘b0|不用两态判定| ### 4.5.4. 解模参数配置 码字为`0xFFFF00C0`使用了PARA_ID为0的解模参数, 对于每个比特而言,需要执行解模和态判断, 因此需要配置参数组中的mtf_idx、ab[0,1,2]、c[0,1,2]域。 下表为qubit0的配置结构,由于只用了一组参数,因此只需要配置一组参数。 由于使能了16个qubit,因此每个qubit都需要配置, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值|说明| |:-|:-:|:-| |0x00500000|dds_pfw|无需配置| |0x00500004|mtf_idx|需要配置| |0x00500008|ab0|需要配置| |0x0050000c|c0|需要配置| |0x00500010|ab1|需要配置| |0x00500014|c1|需要配置| |0x00500018|ab2|需要配置| |0x0050001c|c2|需要配置| ### 4.5.5. 匹配滤波器系数配置 由于解模使用参数配置表中的`mtf_idx`来索引匹配滤波器系数, 因此匹配滤波器系数对应区域需要配置。 例如当`mtf_idx`等于`0x00000020`时, 表示使用从0偏移地址开始的32个地址内存储的匹配滤波器系数。 每个地址i、q数据分别存储16个系数,每个系数占用1个字节 下图是qubit0解模i、q系数的存储示意图, 不同qubit配置格式相同,仅偏移地址不同,这里不再赘述。 |地址|值| |:-|:-:| |0x00580000|I0...I15| |...|...| |0x005801FC|I496...I511| |0x00584000|Q0...Q15| |...|...| |0x005841FC|Q496...Q511| ### 4.5.6. 配置示例 本例是反馈q0到q3态读出结果的示例, 完整配置示例可参考[acq_5_config.txt](./acq_5_config.txt)。 该示例在acq.4示例的基础上仅修改了码字。 * 码字: 从`0x000f8220`,改成`0x000f82e0`, 将读出结果反馈到局部和全局接口。 差异配置如下所示: * **配置项:** ACQ MCU数据配置 * **描述:** 向ACQ通道MCU数据空间写入配置数据 * **Transaction:** 向0x00300000地址写入4 Byte数据 ```{.line-numbers} 00300000 // address = 0x00300000 00200004 // slot=4, length = 4 Byte 000f82e0 // codeword = 0x000f82e0 ``` 仿真结果如下图所示: ![sim_acq_5](assets/sim_acq_5.png) 可以看到局部反馈端口`loc_lvcmos_t`上的态结果与acq.3实验相同, 全局反馈回环接收数据`glb_fd_in`与acq.3实验相同,符合预期。 # 5. Pump通道 Pump通道用于为参量放大器提供能量,对Pump通道的输出控制包括模拟电路配置。 模拟电路通过小数分配锁相环来合成指定频率,并通过功率驱动电路后输出。 ## 5.1. Pump.1 开关输出 Pump开关输出功能使用与激励信号同一个MCU来产生码字, 通道利用码字来触发产生一个指定脉冲宽度的数字信号, 并利用这个数字信号使能Pump通道微波信号输出, 从而实现泵浦通道与激励信号实时同步输出。 |配置项|说明| |:-:|:-| |MCU指令|用于产生码字的指令| |MCU数据|非必要配置,配合MCU指令| |控制寄存器|控制脉冲输出的宽度| |模拟寄存器|控制Pump的频率和功率| ### 5.1.1. 编程约束 |说明项|说明内容| |:-:|:-| |1|MCU数据根据需要配置,若存在访存指令则需配置,否则可不配置| |2|波形输出通过发出码字来控制| |3|程序结束应该调用exit来退出运行| |4|指令和数据的最大容量为16 KB| 以下示例是一个用于发出码字为`0x00000300`的汇编程序, 该程序不存在访存指令,可不配置MCU数据。 程序通过`send`指令发送码字信号,并通过`exit`指令退出运行。 由于使能了仅脉冲输出,因此没有配置波形和索引表。 ```{.line-numbers} lui x1, 0x00001 send x0, x1, 0x300 exit x0, x0, 0 ``` ### 5.1.2. 码字约束 与使能脉冲输出相关的控制码字如下: |配置项|值|说明| |:-|:-:|:-| |CODEWORD[12]|PULSE_ONLY|仅使能脉冲输出| |CODEWORD[8]|1|使能Pump脉冲输出| CODEWORD[12]控制了是否在输出脉冲时输出波形, 当使能波形输出时,需要同时配置好EXCT通道相关配置。 * 码字`0x00001100`可以触发输出pump通道使能控制脉冲而不触发波形输出, 此时脉冲的宽度等于pump_width指定的长度。 * 码字`0x00000100`可以触发输出Pump通道使能脉冲并同时输出波形, 此时使能脉冲的长度等于波形长度加上pump_width指定的长度。 ### 5.1.3. 控制寄存器配置 控制器寄存器主要包括对使能脉冲的延迟和宽度的配置。 |配置项|值|说明| |:-:|:-:|:-| |pump_inv|0|不反转极性,默认低电平输出| |pump_ctrl|{delay,width}|pump脉冲输出延迟和宽度| ### 5.1.4. 模拟寄存器 模拟寄存器用于配置模拟电路生成pump信号的参数 |配置项|值|说明| |:-|:-|:-| |pump_freq|FCW|输出频率控制字,freq = FCW*1000| |pump_power|PCW|PCW范围[-1100,-300],码值与输出功率正相关| |pump_enable|32'h11|使能pump通道模拟输出| ### 5.1.5. 配置示例 本示例是配置Pump通道输出, 数字部分配置在EXCT.1的基础上存在以下修改, 以下是差异项配置: * 码字:使能Pump脉冲输出 * 控制寄存器: 设置Pump脉冲的延迟和附加宽度 数字完整配置示例可参考[pump_1_dig_cfg.txt](./pump_1_dig_cfg.txt)。 * **配置项:** EXCT-Pump MCU数据配置 * **描述:** 向EXCT-Pump通道MCU数据空间写入配置数据 * **Transaction:** 向0x00800000地址写入4 Byte数据 ```{.line-numbers} 00800000 // address = 0x00800000 00200004 // slot=4, length = 4 Byte 00000100 // codeword = 0x000000100 ``` * **配置项:** Pump 通道控制寄存器 * **描述:** 设置Pump通道脉冲控制寄存器 * **Transaction:** 向0x00900044地址写入8 Byte数据 ```{.line-numbers} 00900044 // address = 0x00900044 00200008 // slot=4, length = 8 Byte 00000000 // PUMP_INV=0 00010010 // delay = 1, width = 16 ``` 数字部分仿真结果如下图所示,可以看到脉冲输出持续了96ns(24个时钟周期), 其中8个时钟周期是波形输出时间,16个时钟周期是附加持续时间,与预期符合。 ![sim_pump_1](assets/sim_pump_1.png) 模拟部分配置需要设置输出频率、输出功率并使能输出。 模拟完整配置示例可参考[pump_1_ana_cfg.txt](./pump_1_ana_cfg.txt)。 * **配置项:** Pump 通道模拟配置 * **描述:** 设置Pump通道输出频率 * **Transaction:** 向0x00200000地址写入4 Byte数据 ```{.line-numbers} 00200000 // address = 0x00200000 00280004 // slot=5, length = 4 Byte 006ACFC0 // pump frequency = 7GHz ``` * **配置项:** Pump 通道模拟配置 * **描述:** 设置Pump通道输出功率 * **Transaction:** 向0x00300000地址写入4 Byte数据 ```{.line-numbers} 00300000 // address = 0x00300000 00280004 // slot=5, length = 4 Byte FFFFFF38 // pump power = 15 dbm ``` * **配置项:** Pump 通道模拟配置 * **描述:** 设置Pump通道输出开启 * **Transaction:** 向0x00400000地址写入4 Byte数据 ```{.line-numbers} 00400000 // address = 0x00400000 00280004 // slot=5, length = 4 Byte 00000011 // pump output enable ``` 注意:受制于混频板的硬件限制, ``` 对混频板的参数配置需要预留一定等待时间, 建议每执行一项配置后等待10毫秒再执行。 ``` ## 5.2. Pump.2 连续输出 Pump连续输出功能通过配置寄存器令使能脉冲始终处于高电平, 从而允许pump通道始终输出微波信号。 连续输出所需配置项如下表所示: |配置项|说明| |:-:|:-| |控制寄存器|控制脉冲输出的极性| |模拟寄存器|控制Pump的频率和功率| ### 5.2.1. 码字约束 Pump通道连续输出功能本身无需编程MCU, 但是当需要触发RI波形输出时, 必须禁止码字Pump脉冲输出功能 ### 5.2.2. 控制寄存器配置 控制器寄存器主要包括对使能脉冲的延迟和宽度的配置。 |配置项|值|说明| |:-:|:-:|:-| |pump_inv|1|反转极性,控制脉冲默认输出高电平| ### 5.2.3. 模拟寄存器 |配置项|值|说明| |:-|:-|:-| |pump_freq|FCW|输出频率控制字,freq = FCW*1000| |pump_power|PCW|PCW范围[-1300,-200],码值与输出功率正相关| |pump_enable|32'h11|使能pump通道模拟输出| ### 5.2.4. 配置示例 本用例模拟配置与Pump.1用例相同,示例可参考[pump_1_ana_cfg.txt](./pump_1_ana_cfg.txt)。 数字部分配置仅需要设置pump_en的极性为取反, 并且生成码字时不能使能pump_en。 数字完整配置示例可参考[pump_2_dig_cfg.txt](./pump_2_dig_cfg.txt)。 * **配置项:** 系统配置 * **描述:** 对daq(ACQ)与awg(EXCT-Pump)进行软复位 * **Transaction:** 向0x00000018地址写入4 Byte数据 ```{.line-numbers} 00000018 // address = 0x00000018 00200004 // slot=4, length = 4 Byte 00000003 // {daq_rst, awg_rst} ``` * **配置项:** ACQ 通道MCU指令配置 * **描述:** 退出MCU运行 * **Transaction:** 向0x00200000地址写入4 Byte数据 ```{.line-numbers} 00200000 // address = 0x00200000 00200004 // slot=4, length = 4 Byte 0000002B // exit x0, x0, 0 ``` * **配置项:** EXCT-Pump 通道MCU指令配置 * **描述:** 退出MCU运行 * **Transaction:** 向0x00700000地址写入4 Byte数据 ```{.line-numbers} 00700000 // address = 0x00700000 00200004 // slot=4, length = 4 Byte 0000002B // exit x0, x0, 0 ``` * **配置项:** EXCT-Pump 通道控制寄存器配置 * **描述:** 配置Pump脉冲极性 * **Transaction:** 向0x00900044地址写入4 Byte数据 ```{.line-numbers} 00900044 // address = 00900044 00200004 // slot=4, length = 4 Byte 00000010 // PUMP_INV = 1 ``` 仿真结果如下图所示,将极性取反后, `pump_en`输出始终为高电平, 模拟部分配置保持与pump.1相同, 此时模拟开关始终打开, pump信号保持持续输出。 ![sim_pump_2](assets/sim_pump_2.png) # 6. 功能项汇总 ## 6.1. 激励通道功能汇总 @import "激励通道.csv" ## 6.2. 采集通道功能汇总 @import "采集通道.csv" ## 6.3. 采集通道功能汇总 @import "泵浦通道.csv"