119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
######################################################################
 | 
						|
#
 | 
						|
# 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
 | 
						|
VERILATOR_COVERAGE = verilator_coverage
 | 
						|
else
 | 
						|
export VERILATOR_ROOT
 | 
						|
VERILATOR = $(VERILATOR_ROOT)/bin/verilator
 | 
						|
VERILATOR_COVERAGE = $(VERILATOR_ROOT)/bin/verilator_coverage
 | 
						|
endif
 | 
						|
 | 
						|
VERILATOR_FLAGS =
 | 
						|
# Generate SystemC in executable form
 | 
						|
VERILATOR_FLAGS += -sc --exe
 | 
						|
# Generate makefile dependencies (not shown as complicates the Makefile)
 | 
						|
#VERILATOR_FLAGS += -MMD
 | 
						|
# Optimize
 | 
						|
# VERILATOR_FLAGS += -x-assign fast
 | 
						|
# Warn abount lint issues; may not want this on less solid designs
 | 
						|
VERILATOR_FLAGS += -Wall
 | 
						|
# Make waveforms
 | 
						|
VERILATOR_FLAGS += --trace
 | 
						|
# Check SystemVerilog assertions
 | 
						|
VERILATOR_FLAGS += --assert
 | 
						|
# Generate coverage analysis
 | 
						|
# VERILATOR_FLAGS += --coverage
 | 
						|
# Run Verilator in debug mode
 | 
						|
#VERILATOR_FLAGS += --debug
 | 
						|
# Add this trace to get a backtrace in gdb
 | 
						|
#VERILATOR_FLAGS += --gdbbt
 | 
						|
# Specify top module
 | 
						|
TOP_MODULE = isp
 | 
						|
VERILATOR_FLAGS += -top $(TOP_MODULE)
 | 
						|
# Input files for Verilator
 | 
						|
VERILATOR_INPUT = ../isp.v sc_main.cpp ../Demosaic/demosaic2.v ../Crop/*.v ../FIFO/*.v ../Merge/*.v ../RAM/*.v
 | 
						|
 | 
						|
# Check if SC exists via a verilator call (empty if not)
 | 
						|
SYSTEMC_EXISTS := $(shell $(VERILATOR) --get-supported SYSTEMC)
 | 
						|
 | 
						|
######################################################################
 | 
						|
 | 
						|
ifneq ($(SYSTEMC_EXISTS),)
 | 
						|
default: run
 | 
						|
else
 | 
						|
default: nosc
 | 
						|
endif
 | 
						|
 | 
						|
run:
 | 
						|
	@echo
 | 
						|
	@echo "-- Verilator tracing example"
 | 
						|
 | 
						|
	@echo
 | 
						|
	@echo "-- VERILATE ----------------"
 | 
						|
	$(VERILATOR) $(VERILATOR_FLAGS) $(VERILATOR_INPUT)
 | 
						|
 | 
						|
	@echo
 | 
						|
	@echo "-- COMPILE -----------------"
 | 
						|
# To compile, we can either
 | 
						|
# 1. Pass --build to Verilator by editing VERILATOR_FLAGS above.
 | 
						|
# 2. Or, run the make rules Verilator does:
 | 
						|
#	$(MAKE) -j -C obj_dir -f Vtop.mk
 | 
						|
# 3. Or, call a submakefile where we can override the rules ourselves:
 | 
						|
	$(MAKE) -j -C obj_dir -f V$(TOP_MODULE).mk
 | 
						|
 | 
						|
	@echo
 | 
						|
	@echo "-- RUN ---------------------"
 | 
						|
	@rm -rf logs
 | 
						|
	@mkdir -p logs
 | 
						|
	obj_dir/V$(TOP_MODULE) +trace
 | 
						|
 | 
						|
	@echo
 | 
						|
	@echo "-- COVERAGE ----------------"
 | 
						|
	@rm -rf logs/annotated
 | 
						|
	$(VERILATOR_COVERAGE) --annotate logs/annotated logs/coverage.dat
 | 
						|
 | 
						|
	@echo
 | 
						|
	@echo "-- DONE --------------------"
 | 
						|
	@echo "To see waveforms, open vlt_dump.vcd in a waveform viewer"
 | 
						|
	@echo
 | 
						|
 | 
						|
 | 
						|
######################################################################
 | 
						|
# Other targets
 | 
						|
 | 
						|
nosc:
 | 
						|
	@echo
 | 
						|
	@echo "%Skip: SYSTEMC_INCLUDE not in environment"
 | 
						|
	@echo "(If you have SystemC see the README, and rebuild Verilator)"
 | 
						|
	@echo
 | 
						|
 | 
						|
show-config:
 | 
						|
	$(VERILATOR) -V
 | 
						|
 | 
						|
maintainer-copy::
 | 
						|
clean mostlyclean distclean maintainer-clean::
 | 
						|
	-rm -rf obj_dir logs *.log *.dmp *.vpd coverage.dat core
 |