FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-Vのランダムテストジェネレータ AAPGを試す

AAPGはRISC-V向けのランダムパタンジェネレータだ。Pythonで記述されており簡単にインストールできる。

pip3 install aapg

以下のコマンドでセットアップできる。

$ aapg setup
[INFO]    - root                      : aapg started
[INFO]    - root                      : (2.2.6) Automated Assembly Program Generator - aapg
[INFO]    - root                      : Command received: setup
[INFO]    - aapg.env.env_setup        : Build setup started
[INFO]    - root                      : Setup directory built in /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work

work/config.yamlを眺めていく。

priv-mode:
  mode: m

これはMモードのみを使用するということかな?

isa-instruction-distribution:
  rel_sys: 0
  rel_sys.csr: 0
  rel_rv32i.ctrl: 0
  rel_rv32i.compute: 1
  rel_rv32i.data: 0
  rel_rv32i.fence: 0
  rel_rv64i.compute: 0
  rel_rv64i.data: 0
  rel_rv32m: 0
  rel_rv64m: 0
  rel_rv32a: 0
  rel_rv64a: 0
  rel_rv32f: 0
  rel_rv64f: 0
  rel_rv32d: 0
  rel_rv64d: 0

rv32の算術演算命令しか使わないということ?

  rel_rvc.ctrl: 0
  rel_rvc.compute: 0
  rel_rvc.sp: 0
  rel_rvc.data: 0
  rel_rvc.fdata: 0

  rel_rv32c.compute: 0
  rel_rv32c.ctrl: 0
  rel_rv32c.fdata: 0

  rel_rv64c.compute: 0
  rel_rv64c.data: 0

Compressed命令は使わないということ?

float-rounding:
  rne: 10
  rtz: 10
  rdn: 10
  rup: 10
  rmm: 10

浮動小数点の丸めモードの指定?

branch-control:
  backward-probability: 0.5
  block-size: 7

分岐命令の制御、ブラックサイズのコントロール

とりあえずここから先はあまり関係なさそうなので、命令を生成してみようじゃないか。

aapg gen

work/asm/out_config_00000.Sが生成された。

aapg gen
[INFO]    - root                      : aapg started
[INFO]    - root                      : (2.2.6) Automated Assembly Program Generator - aapg
[INFO]    - root                      : Command received: gen
[INFO]    - root                      : Number of programs to generate: 1
[INFO]    - root                      : Linker script generation started
[INFO]    - aapg.gen_random_program   : work/./config.yaml
[INFO]    - aapg.gen_random_program   : Creating a config file as : work/config.ini
[INFO]    - aapg.gen_random_program   : work/config.ini
[INFO]    - aapg.gen_random_program   : /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work/config.ini
[INFO]    - aapg.gen_random_program   : Setting up the Makefile
[INFO]    - root                      : Linker script generation completed
[INFO]    - root                      : Program number: 0 started
[INFO]    - aapg.gen_random_program   : Command [GEN] invoked. Random program generation started
[INFO]    - aapg.gen_random_program   : Config file path: work/config.ini
[INFO]    - aapg.gen_random_program   : Config filename: config.ini
[INFO]    - aapg.gen_random_program   : Output directory selected: /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work/asm
[WARNING] - aapg.gen_random_program   : Output directory exists
[INFO]    - aapg.gen_random_program   : Output file path: /home/msyksphinz/work/riscv/msrh/msrh_master/tests/aapg/work/asm/out_config_00000.S
[INFO]    - aapg.program_generator    : Adding pre-program macro
[INFO]    - aapg.program_generator    : Creating Prelude
[INFO]    - aapg.program_generator    : User functions received user-functions i_cache_thrash
[INFO]    - aapg.gen_random_program   : Program generation completed

分岐命令は出ないんだね。そして全命令にラベルが付いてるってことか。

ちなみに1000本ランダムテストを生成するためには以下のようにする。

aapg gen --num_programs 1000