ちょっとRVC付きのNaxRiscvについてRTLシミュレーションの流し方をまとめておく。
- ビルド対象について、
withRvc
を有効化しておく。
diff --git a/src/main/scala/naxriscv/Gen.scala b/src/main/scala/naxriscv/Gen.scala index 031ce67..b33862e 100644 --- a/src/main/scala/naxriscv/Gen.scala +++ b/src/main/scala/naxriscv/Gen.scala @@ -529,7 +529,7 @@ object Gen64 extends App{ withRdTime = false, aluCount = 2, decodeCount = 2, - withRvc = false, + withRvc = true, withDebug = false, withEmbeddedJtagTap = false, debugTriggers = 4,
$ sbt "runMain naxriscv.Gen64" $ cd $NAXRISCV/src/test/cpp/naxriscv $ make compile
RTLシミュレーションの方法:
$ ./obj_dir/VNaxRiscv --trace --trace-ref --name coremark --load-elf ../../../../ext/NaxSoftware/baremetal/coremark/build/rv64imac/coremark.elf --pass-symbol pass
2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 2166532 Total time (secs): 2166532.000000 Iterations/Sec : 0.000005 Iterations : 10 Compiler version : GCC11.1.0 Compiler flags : -DPERFORMANCE_RUN=1 -march=rv64imac -mabi=lp64 -mcmodel=medany -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -I../driver -O3 -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -DCORE_DEBUG=0 -lgcc -lc -nostartfiles -ffreestanding -Wl,-Bstatic,-T,../common/app.ld,-Map,coremark.map,--print-memory-usage Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0xfcaf Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 0.000005 / GCC11.1.0 -DPERFORMANCE_RUN=1 -march=rv64imac -mabi=lp64 -mcmodel=medany -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -I../driver -O3 -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -DCORE_DEBUG=0 -lgcc -lc -nostartfiles -ffreestanding -Wl,-Bstatic,-T,../common/app.ld,-Map,coremark.map,--print-memory-usage / STACK 4.62 Coremark/MHz SUCCESS coremark
こうして波形も確認することができる。これはRVCの命令がディスパッチされているところ。 ソースコードでの挙動の予想と違い、RVC命令はAlignerではまだ16ビット命令表現のままだった。