前回、VexRiscvに対してでもアプリを適用し、donutプログラムを動作させたのであった。今度は、自作CPUに対して適用させたいと思う。
まずいろいろ調査したのだが、VexRiscvと自作CPUはメモリマップが違うので、プログラムの再コンパイルを行う必要がある。 どのCPUを使うのかについては、ビルドパスを指定するだけで対応可能だ。
./demo.py --build-path [LiteXの各CPU向けビルドパス]
これ、どういう仕組みになっているのか不思議だったのだが、Makefileを見てみると、各ビルドディレクトリに含まれているソフトウェアライブラリを使ってリンクすることで、それぞれの環境に対応しているようだ。確かに、これは便利。
demo.elf: $(OBJECTS) $(CC) $(LDFLAGS) -T linker.ld -N -o $@ \ $(OBJECTS) \ $(PACKAGES:%=-L$(BUILD_DIR)/software/%) \ -Wl,--whole-archive \ -Wl,--gc-sections \ -Wl,-Map,$@.map \ $(LIBS:lib%=-l%)
というわけで動かすと、意外と一発で動作した(自分のコアをまだ信用していない)。
litex_sim --cpu-type=scariv --output scariv_build --integrated-rom-init=./litex/litex/soc/software/demo/demo.bin
donutプログラムを動かすと、多少時間はかかるがちゃんと動作した。すばらしい!