LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。
前回までの試行で、Verilatorを起動することはできたが、いくつかの環境整備ができていない。defineの挿入ができずコンパイルが失敗していたのだった。
いろいろ調査すると、そもそもLiteXの環境ではdefine
を直接操作するのが難しそうだ。
以下のコマンドには、define
を挿入するオプションが入っていない。
- litex_scariv/litex/litex/build/sim/core/Makefile
.PHONY: sim sim: $(OBJS_SIM) | mkdir verilator -Wno-fatal -O3 $(CC_SRCS) --top-module sim --exe \ -DPRINTF_COND=0 \ $(SRCS_SIM_CPP) $(OBJS_SIM) \ --top-module sim \ $(if $(THREADS), --threads $(THREADS),) \ -CFLAGS "$(CFLAGS) -I$(SRC_DIR)" \ -LDFLAGS "$(LDFLAGS)" \ --trace \ $(if $(TRACE_FST), --trace-fst,) \ $(if $(COVERAGE), --coverage,) \ --unroll-count 256 \ --output-split 5000 \ --output-split-cfuncs 500 \ --output-split-ctrace 500 \ $(INC_DIR) \ -Wno-BLKANDNBLK \ -Wno-WIDTH \ -Wno-COMBDLY \ -Wno-CASEINCOMPLETE \ --relative-includes make -j$(JOBS) -C $(OBJ_DIR) -f Vsim.mk Vsim
したがって、以下のようなdefine
を挿入するためだけのファイルを作成してみる。
- ../pythondata-cpu-scariv/pythondata_cpu_scariv/system_verilog/src/litex_defines.svh
define RV64
# Add Verilog sources. # TODO: use Flist.cv64a6_imafdc_sv39 and Flist.cv32a6_imac_sv0 instead + basedir = get_data_mod("cpu", "scariv").data_location + platform.add_source(os.path.join(basedir, "src", "litex_defines.svh")) + platform.add_source(os.path.join(basedir, "src", "riscv_common_pkg.sv")) + platform.add_source(os.path.join(basedir, "src", "riscv_fpu_imafdc_pkg.sv")) + platform.add_source(os.path.join(basedir, "src", "riscv64_pkg.sv")) + platform.add_source(os.path.join(basedir, "src", "scariv_standard_conf_pkg.sv"))
これで再度コンパイルを実行してみる。そうするとVerilatorのコンパイルまでは進んだのだが、メモリの使い過ぎで落ちてしまった。少し調整が必要だな。
これは、Verilatorの以下のオプションを外すことで回避できるらしい。要するにメモリの使い過ぎだ。
diff --git a/litex/build/sim/core/Makefile b/litex/build/sim/core/Makefile index e662f27f..a1ce368b 100644 --- a/litex/build/sim/core/Makefile +++ b/litex/build/sim/core/Makefile @@ -45,17 +45,19 @@ sim: $(OBJS_SIM) | mkdir --trace \ $(if $(TRACE_FST), --trace-fst,) \ $(if $(COVERAGE), --coverage,) \ - --unroll-count 256 \ - --output-split 5000 \ - --output-split-cfuncs 500 \ - --output-split-ctrace 500 \ $(INC_DIR) \ -Wno-BLKANDNBLK \ -Wno-WIDTH \ -Wno-COMBDLY \ -Wno-CASEINCOMPLETE \ --relative-includes - make -j$(JOBS) -C $(OBJ_DIR) -f Vsim.mk Vsim + make -j16 -C $(OBJ_DIR) -f Vsim.mk Vsim