QEMU の RISC-V(1. RISC-V量子拡張の対応方針)

RISC-V量子拡張は, 「RiscV.RV32IU」として @k_yamaz 蛙 が提案しています.
(詳しくは, 技術ブログ Qiita に投稿した RISC-Vの量子計算拡張 をご参照ください. )
思いつきなどをメモしていきます.

RISC-V量子拡張を定義して, その QPU をエミュレートするには, QEMU で「RISC-V ISA U Extension (RISC-V 量子拡張) 」を動作させることを考えます.
まず, QEMU をコンパイルする環境を構築します.

以下により ${RISCV}/bin に qemu-system-riscv32 がインストールされる開発環境が準備できます.

1
2
3
4
5
$ git clone https://github.com/qemu/qemu.git
$ cd qemu
$ mkdir build
$ cd build
$ ../configure --target-list=riscv32-softmmu --prefix=${RISCV}

この開発環境で, RISC-V U Extension を追加していきます.
RISC-V の仮想CPUのコードは, target/riscv にあります.

まず手始めに, cpu.h に Extension の定義を追加しましょう.

1
2
3
4
#define RVI RV('I')
#define RVE RV('E') /* E and I are mutually exclusive */
:
#define RVU RV('U')

とある RVI, RVE, … です. 量子拡張はU としましたが, RVU が定義されています. ということは, U Extension は予約されているようです.
これは事前の調査不足だったでしょうか. しかし, https://en.wikichip.org/wiki/risc-v/standard_extensions などで調べても, U は使われていないようです.
QEMU のコード上では, target/riscv/cpu.c,target/riscv/csr.c に許容される Extension として登場しているだけのようです.
影響が読みきれないですが, 今後の課題として調査が必要そうです.

まずは, target/riscv に量子拡張を追加して QEMU 上で, ベアメタルプログラミングを行う環境を作っていく方針で進めていきます.