From 70a32ed86f0ad95bad9fa218793a17dcaa7e6ac4 Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Mon, 24 Sep 2018 12:43:29 +0200 Subject: [PATCH] sim/verilator: add multithread support (default=1) --- litex/boards/targets/sim.py | 6 ++++-- litex/build/sim/core/Makefile | 1 + litex/build/sim/verilator.py | 12 ++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/litex/boards/targets/sim.py b/litex/boards/targets/sim.py index 4673569f..f9255250 100755 --- a/litex/boards/targets/sim.py +++ b/litex/boards/targets/sim.py @@ -144,6 +144,8 @@ def main(): parser = argparse.ArgumentParser(description="Generic LiteX SoC Simulation") builder_args(parser) soc_sdram_args(parser) + parser.add_argument("--threads", default=1, + help="set number of threads (default=1)") parser.add_argument("--rom-init", default=None, help="rom_init file") parser.add_argument("--ram-init", default=None, @@ -183,10 +185,10 @@ def main(): **soc_kwargs) builder_kwargs["csr_csv"] = "csr.csv" builder = Builder(soc, **builder_kwargs) - vns = builder.build(run=False, sim_config=sim_config) + vns = builder.build(run=False, threads=args.threads, sim_config=sim_config) if args.with_analyzer: soc.analyzer.export_csv(vns, "analyzer.csv") - builder.build(build=False, sim_config=sim_config) + builder.build(build=False, threads=args.threads, sim_config=sim_config) if __name__ == "__main__": diff --git a/litex/build/sim/core/Makefile b/litex/build/sim/core/Makefile index 733ea531..daba3dda 100644 --- a/litex/build/sim/core/Makefile +++ b/litex/build/sim/core/Makefile @@ -27,6 +27,7 @@ sim: mkdir $(OBJS_SIM) verilator -Wno-fatal -O3 --cc dut.v --top-module dut --exe \ $(SRCS_SIM_CPP) $(OBJS_SIM) \ --top-module dut \ + --threads $(THREADS) \ -CFLAGS "$(CFLAGS) -I$(SRC_DIR)" \ -LDFLAGS "$(LDFLAGS)" \ -trace $(INC_DIR) diff --git a/litex/build/sim/verilator.py b/litex/build/sim/verilator.py index 1e6176ea..833685e1 100644 --- a/litex/build/sim/verilator.py +++ b/litex/build/sim/verilator.py @@ -103,13 +103,13 @@ def _generate_sim_config(config): tools.write_to_file("sim_config.js", content) -def _build_sim(platform, build_name, verbose): +def _build_sim(platform, build_name, threads, verbose): makefile = os.path.join(core_directory, 'Makefile') build_script_contents = """\ rm -rf obj_dir/ -make -C . -f {} +make -C . -f {} THREADS={} mkdir -p modules && cp obj_dir/*.so modules -""".format(makefile) +""".format(makefile, threads) build_script_file = "build_" + build_name + ".sh" tools.write_to_file(build_script_file, build_script_contents, force_unix=True) @@ -145,8 +145,8 @@ def _run_sim(build_name, as_root=False): class SimVerilatorToolchain: def build(self, platform, fragment, build_dir="build", build_name="dut", - toolchain_path=None, serial="console", build=True, run=True, verbose=True, - sim_config=None): + toolchain_path=None, serial="console", build=True, run=True, threads=1, + verbose=True, sim_config=None): os.makedirs(build_dir, exist_ok=True) os.chdir(build_dir) @@ -173,7 +173,7 @@ class SimVerilatorToolchain: if sim_config: _generate_sim_config(sim_config) - _build_sim(platform, build_name, verbose) + _build_sim(platform, build_name, threads, verbose) if run: _run_sim(build_name, as_root=sim_config.has_module("ethernet")) -- 2.30.2