FPGA開発日記

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

自作CPUのSpikeモデルシミュレータ環境の変更 (2. Spikeの設定変更)

自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。

前回、モデルシミュレータが途中でハングしてしまっていたのだが、一度全部Cleanしてやり直すと多分ちゃんと動いている。

ただ、それでも通常のベンチマーク動作用のモードとLiteX環境用のモードでいろいろ変更することが多い。 特に、SpikeはスタートアドレスがDefineで決め打ちされているのがきつい。

  • riscv-isa-sim/riscv/platform.h
#define DEFAULT_RSTVEC     0x00000000
#define CLINT_BASE         0x02000000
#define CLINT_SIZE         0x000c0000
#define PLIC_BASE          0x0c000000

このDEFAULT_RSTVECで最初のpcが決まってしまう。--pc=オプションで決定できるのBootROMを動かした後のとび先であり、BootROMも0x1000に固定してあるのでこれもメモリマップを移すのが面倒くさい。 これらも変更できるようにいろいろ改造するとなると、かなり面倒なのでやはり独自のシミュレーション環境を構築することになり、面倒だな...

例えば、--pc=0x0で実行すると、以下のようにBootROMのロード値がエラーとなる。

Set ToHost Addr 80001000
initial_spike opening ../../../tests/riscv-tests-elf/dhrystone.riscv ...
spike iss done
GPR[05](32) <= 0000000000001000
GPR[11](64) <= 0000000000001020
5175 : RTL(1,1) Exception Cause = CSR Update Flush(27) PC=000000001008, Inst=f1402573, csrr    a0, mhartid
GPR[10](33) <= 0000000000000000
MR8(0x0000000000001018)=>0000000000000000
==========================================
Wrong GPR[05](35): RTL = 0000000080000000, ISS = 0000000000000000
==========================================
===============================
SIMULATION FINISH : FAIL (CODE=100)
RUNNING TIME : 5207
===============================