diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 614d347a..ec7980f5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,4 +22,4 @@ jobs: # Use a login shell to ensure that the environment is set up correctly shell: bash -l -e -o pipefail {0} run: | - make elab + make vlt-elab diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b0fe2fe..ca1cfd8b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,10 +16,20 @@ variables: VLOG: questa-2022.3 vlog -64 VOPT: questa-2022.3 vopt -64 -elab: +vlt-elab: timeout: 10min script: - - make elab + - make vlt-elab + +vsim-elab: + timeout: 10min + script: + - make vsim-elab + +vcs-elab: + timeout: 10min + script: + - make vcs-elab .test-tpl: needs: diff --git a/Makefile b/Makefile index d2f33634..07f45813 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,51 @@ BENDER ?= bender VERILATOR ?= verilator +VSIM ?= vsim +VCS_SEPP ?= + +# Suppress vlog-2583: always_comb/always_latch conflict checks are deferred to vopt +VLOG_FLAGS += -suppress 2583 + +VSIM_BUILDDIR = $(abspath build/vsim) +VCS_BUILDDIR = $(abspath build/vcs) # All modules in src/ with a top-level module declaration, minus skipped ones -SV_MODULES = $(patsubst src/%.sv,%,$(shell grep -l "^module " src/*.sv)) -ELAB_TARGETS = $(addprefix elab-,$(SV_MODULES)) +SV_MODULES = $(patsubst src/%.sv,%,$(shell grep -l "^module " src/*.sv)) +VLT_ELAB_TARGETS = $(addprefix vlt-elab-,$(SV_MODULES)) -.PHONY: all elab $(ELAB_TARGETS) +.PHONY: all vlt-elab $(VLT_ELAB_TARGETS) vsim-elab vcs-elab clean -all: elab +all: vlt-elab vsim-elab vcs-elab # Re-run bender checkout only when Bender.yml changes .bender/.checkout: Bender.yml $(BENDER) checkout @touch $@ -elab: $(ELAB_TARGETS) +vlt-elab: $(VLT_ELAB_TARGETS) -$(ELAB_TARGETS): elab-%: .bender/.checkout +$(VLT_ELAB_TARGETS): vlt-elab-%: .bender/.checkout $(VERILATOR) --cc \ - $(shell $(BENDER) script verilator -t rtl) \ + $(shell $(BENDER) script verilator) \ --top-module $* \ -Wno-fatal \ -j $(shell nproc) + +$(VSIM_BUILDDIR) $(VCS_BUILDDIR): + mkdir -p $@ + +$(VSIM_BUILDDIR)/elaborate.tcl: Bender.yml | $(VSIM_BUILDDIR) .bender/.checkout + $(BENDER) script vsim --vlog-arg="$(VLOG_FLAGS) " > $@ + +vsim-elab: $(VSIM_BUILDDIR)/elaborate.tcl + cd $(VSIM_BUILDDIR) && $(VSIM) -c -do "source $<; quit" + +$(VCS_BUILDDIR)/elaborate.sh: Bender.yml | $(VCS_BUILDDIR) .bender/.checkout + $(BENDER) script vcs > $@ + chmod +x $@ + +vcs-elab: $(VCS_BUILDDIR)/elaborate.sh + cd $(VCS_BUILDDIR) && $(VCS_SEPP) $< + +clean: + rm -rf build/ diff --git a/iis-env.sh b/iis-env.sh index f4b51fd4..21020f39 100644 --- a/iis-env.sh +++ b/iis-env.sh @@ -1,3 +1,5 @@ #!/usr/bin/env bash export VERILATOR="oseda -2026.04 verilator" +export VSIM="questa-2023.4 vsim" +export VCS_SEPP="vcs-2024.09"