Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 26 additions & 3 deletions cmake/FetchVerilator.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,38 @@ set(VERILATOR_TAG "v5.044" CACHE STRING "Verilator version to build")
# - bison, flex (for parser)
# - python3 (for code generation)

# On macOS, pass compiler and Homebrew include paths so Verilator's autoconf
# picks up the right toolchain (needed for coroutine / C++20 support).
if(APPLE)
if(EXISTS "/opt/homebrew")
set(_BREW "/opt/homebrew")
else()
set(_BREW "/usr/local")
endif()
set(_VERILATOR_ENV
"CXX=${CMAKE_CXX_COMPILER}"
"CC=${CMAKE_C_COMPILER}"
"PATH=${_BREW}/opt/bison/bin:${_BREW}/opt/flex/bin:$ENV{PATH}"
"CPPFLAGS=-I${_BREW}/opt/flex/include"
)
else()
set(_VERILATOR_ENV "")
endif()

ExternalProject_Add(verilator_ext
GIT_REPOSITORY https://github.com/verilator/verilator.git
GIT_TAG ${VERILATOR_TAG}
GIT_SHALLOW TRUE
GIT_SUBMODULES "" # No submodules needed
PREFIX ${CMAKE_BINARY_DIR}/verilator
CONFIGURE_COMMAND autoconf COMMAND ./configure --prefix=<INSTALL_DIR>
BUILD_COMMAND make -j${NPROC}
INSTALL_COMMAND make install
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${_VERILATOR_ENV}
autoconf
COMMAND ${CMAKE_COMMAND} -E env ${_VERILATOR_ENV}
./configure --prefix=<INSTALL_DIR>
BUILD_COMMAND ${CMAKE_COMMAND} -E env ${_VERILATOR_ENV}
make -j${NPROC}
INSTALL_COMMAND ${CMAKE_COMMAND} -E env ${_VERILATOR_ENV}
make install
BUILD_IN_SOURCE TRUE
)

Expand Down
15 changes: 11 additions & 4 deletions tests/fsm_extract/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,19 @@ SIM_BINS := $(addprefix $(BUILD_DIR)/Vtb_,$(addsuffix _equiv,$(FSM_NAMES)))

all: sim

# --- Transform + generate testbench (grouped target, Make >= 4.3) ---
transformed_%_fsm.v tb_%_fsm_equiv.sv &: %_fsm.sv gen_equiv.tcl $(SLANG_SO)
# --- Transform + generate testbench ---
# Yosys produces both transformed_%_fsm.v and tb_%_fsm_equiv.sv in one shot.
# Use a stamp file so it works with Make < 4.3 (no grouped-target &: syntax).
.PRECIOUS: .stamp_%_fsm
.stamp_%_fsm: %_fsm.sv gen_equiv.tcl $(SLANG_SO)
$(YOSYS) -m $(SLANG_SO) -p "tcl gen_equiv.tcl $*_fsm"
@touch $@

transformed_%_fsm.v: .stamp_%_fsm ;
tb_%_fsm_equiv.sv: .stamp_%_fsm ;

# --- Build Verilator binary ---
$(BUILD_DIR)/Vtb_%_fsm_equiv: transformed_%_fsm.v %_fsm.sv tb_%_fsm_equiv.sv
$(BUILD_DIR)/Vtb_%_fsm_equiv: transformed_%_fsm.v %_fsm.sv tb_%_fsm_equiv.sv | .stamp_%_fsm
$(VERILATOR) --binary --timing --debug \
-Wno-WIDTHEXPAND -Wno-WIDTHTRUNC -Wno-CASEINCOMPLETE \
--top-module tb_$*_fsm_equiv \
Expand All @@ -37,4 +44,4 @@ sim: $(SIM_BINS)
@for bin in $^; do $$bin || exit 1; done

clean:
rm -rf $(BUILD_DIR) transformed_*_fsm.v tb_*_fsm_equiv.sv _ports.json
rm -rf $(BUILD_DIR) transformed_*_fsm.v tb_*_fsm_equiv.sv .stamp_*_fsm _ports.json
Loading