###################################################################### # # DESCRIPTION: Verilator Example: Small Makefile # # This calls the object directory makefile. That allows the objects to # be placed in the "current directory" which simplifies the Makefile. # # This file ONLY is placed under the Creative Commons Public Domain, for # any use, without warranty, 2020 by Wilson Snyder. # SPDX-License-Identifier: CC0-1.0 # ###################################################################### # Check for sanity to avoid later confusion ifneq ($(words $(CURDIR)),1) $(error Unsupported: GNU Make cannot build in directories containing spaces, build elsewhere: '$(CURDIR)') endif ###################################################################### # Set up variables # If $VERILATOR_ROOT isn't in the environment, we assume it is part of a # package install, and verilator is in your path. Otherwise find the # binary relative to $VERILATOR_ROOT (such as when inside the git sources). ifeq ($(VERILATOR_ROOT),) VERILATOR = verilator else export VERILATOR_ROOT VERILATOR = $(VERILATOR_ROOT)/bin/verilator endif VERILATOR_FLAGS = # Generate C++ in executable form VERILATOR_FLAGS += -cc --exe # Generate makefile dependencies (not shown as complicates the Makefile) #VERILATOR_FLAGS += -MMD # Optimize VERILATOR_FLAGS += -Os -x-assign 0 --unroll-count 90000 # Multithreading doesn't really seem to improve the speed... #VERILATOR_FLAGS += --threads 4 # Warn abount lint issues; may not want this on less solid designs VERILATOR_FLAGS += -Wall # Make waveforms #VERILATOR_FLAGS += --trace # Run Verilator in debug mode #VERILATOR_FLAGS += --debug # Add this trace to get a backtrace in gdb #VERILATOR_FLAGS += --gdbbt # Input files for Verilator VERILATOR_INPUT = -f input.vc top.v -y modules sim_main.cpp control.cpp # Test arguments for model TEST_ARGS = -t 0 #EXE = numactl -m 0 -C 0,1 -- obj_dir/Vtop EXE = obj_dir/Vtop ###################################################################### default: notrace .PHONY: trace trace: @echo @echo "-- VERILATE ----------------" # $(VERILATOR) $(VERILATOR_FLAGS) --trace --trace-depth 1 $(VERILATOR_INPUT) $(VERILATOR) $(VERILATOR_FLAGS) --trace $(VERILATOR_INPUT) @echo @echo "-- BUILD -------------------" $(MAKE) -j -C obj_dir -f ../Makefile_obj @echo @echo "-- RUN ---------------------" #@rm -rf logs #@mkdir -p logs rm -f logs/* $(EXE) +trace $(TEST_ARGS) @echo @echo "-- DONE --------------------" @echo "To see waveforms, open vlt_dump.vcd in a waveform viewer" @echo ###################################################################### .PHONY: notrace notrace: @echo @echo "-- VERILATE ----------------" $(VERILATOR) $(VERILATOR_FLAGS) $(VERILATOR_INPUT) @echo @echo "-- BUILD -------------------" $(MAKE) -j -C obj_dir -f ../Makefile_obj @echo @echo "-- RUN ---------------------" $(EXE) $(TEST_ARGS) @echo @echo "-- DONE --------------------" @echo ###################################################################### .PHONY: test test: @echo @echo "-- VERILATE ----------------" $(VERILATOR) $(VERILATOR_FLAGS) $(VERILATOR_INPUT) @echo @echo "-- BUILD -------------------" $(MAKE) -j -C obj_dir -f ../Makefile_obj @echo @echo "-- RUN ---------------------" $(EXE) @echo @echo "-- DONE --------------------" @echo # Other targets show-config: $(VERILATOR) -V maintainer-copy:: clean mostlyclean distclean maintainer-clean:: -rm -rf obj_dir logs *.log *.dmp *.vpd coverage.dat core