# QRAM 内存定义(qram YAML) English · **简体中文** 内存数据不写入程序序列化文本(见 [RIR](rir.md)),而是作为执行输入另行绑定。本文定义绑定文件 `*.qram.yaml` 的格式:一个文件描述一组 QRAM 段(`qram_segments` 列表),执行时按入口资源名与程序交叉校验。 ```yaml qram_segments: - name: values # 存储名字,代码中按此索引 address_length: 2 # 地址位宽 word_length: 3 # 数据字位宽 type: uint # 数据类型:uint / sint / fixedpoint data: [1, 2, 4, 7] # 具体数据,稠密数组,下标即地址 ``` ## 字段 | 字段 | 类型 | 约束 | 说明 | |------|------|------|------| | `qram_segments` | list | 必填,顶层唯一键 | 一组 QRAM 定义 | | `name` | string | 非空,文件内唯一 | 存储名字,执行时与入口资源名精确匹配 | | `address_length` | integer | 1..64 | 地址位宽,对应 RIR QRAM 的 `address_width` | | `word_length` | integer | 1..64 | 数据字位宽,对应 RIR QRAM 的 `data_width` | | `type` | string | `uint` / `sint` / `fixedpoint` | data 的源数据类型,加载时按其编码为无符号字 | | `data` | 数组 | 见下表 | 稠密源数据数组,下标即地址 | 三种数据类型的取值范围与编码: | type | data 元素范围 | 加载时编码为无符号字 | |------|--------------|---------------------| | `uint` | 无符号整数,0 .. 2^`word_length` − 1 | 原样 | | `sint` | 有符号整数,−2^(`word_length`−1) .. 2^(`word_length`−1) − 1 | 二补码位模式 | | `fixedpoint` | 定点数,[0, 1) | 乘以 2^`word_length` 后向零截断(与 `FixedFormat.encode` 同口径) | ## 语义规则 - 加载期按 `word_length` 本地校验每个源数据(范围见上表),越界即报错;`data` 长度不能超过 2^`address_length`,短于它时高位单元按零补齐(padding)。 - 段名在文件内必须唯一。 - 执行期以程序内的 QRAM 声明为准:{obj}`check_memory ` 要求段的资源名集合与入口声明完全一致、不多不少;编码后的字必须落在程序声明位宽内,`address_length`/`word_length` 与程序声明不一致不单独报错。 - {obj}`dump_qram_yaml ` 产出的段类型恒为 `uint`(执行器侧的字已是位宽内无符号整数)。 ## Python API ```python from oracq import dump_qram_yaml, load_qram_yaml, simulate memory = load_qram_yaml("memory.qram.yaml") # -> {"values": [1, 2, 4, 7]} state = simulate(program, memory) # 与既有 memory 参数完全兼容 text = dump_qram_yaml(program, memory) # 规整校验后输出文本,由调用方写盘 ``` {obj}`load_qram_yaml ` 返回资源名到稠密字数组的映射(已按 type 编码并补零到全长),与 {obj}`simulate `、{obj}`run_pysparq `、{obj}`run_originir ` 的 `memory` 参数同形。`dump_qram_yaml` 先经 `check_memory` 交叉校验并把稀疏字典稠密化,再按入口资源声明顺序生成段;入口无 QRAM 资源时输出空 `qram_segments`。 ## CLI ```bash oracq run closed.rir.yaml --memory memory.qram.yaml ``` `--memory` 只接受本格式。结构或数据不合法时以退出码 2 报中文错误,不会静默截断。全部子命令见[命令行](../manual/cli.md)。 ## Schema 结构约束见 [qram-memory.schema.json](schemas/qram-memory.schema.json),含按 `type` 分支的 `data` 元素类型约束。跨字段约束(数组长度对 `address_length`、字值范围对 `word_length` 与 `type`、段名唯一)无法用 JSON Schema 表达,由 Python 加载器强制。