自作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 ===============================