TOP := top CNSTRFILE := constraints.xdc PART := xc7z007sclg400-1 HW_SERVER := localhost:3121 HW_TARGET := $(HW_SERVER)/xilinx_tcf/Xilinx/* HW_DEVICE := xc7z007s_1 SRCDIR := $(realpath src) DCPDIR := dcp BINDIR := bin TBDIR := $(realpath tb) DUMPDIR := dump TBBINDIR := $(BINDIR)/tb SCRIPT_SYNTH := $(shell realpath tcl/synth.tcl) SCRIPT_IMPL := $(shell realpath tcl/impl.tcl) SCRIPT_GENBIT := $(shell realpath tcl/genbit.tcl) SCRIPT_PROGDEV := $(shell realpath tcl/prog_device.tcl) SCRIPT_RUNTB := $(shell realpath sh/runtb.sh) SCRIPT_TBLOGVCD := $(shell realpath tcl/tblogvcd.tcl) VERILATORFLAGS := --cc -Wno-WIDTH -Wno-UNOPTFLAT --trace --trace-structs --binary -I$(SRCDIR) -I$(TBDIR) default: all all : synth impl genbit synth : $(DCPDIR)/default.synth.dcp impl : $(DCPDIR)/default.impl.dcp genbit : $(BINDIR)/default.bit prog_device : prog_device.default clean : @if [ -d $(DCPDIR) ]; then rm -r $(DCPDIR); fi @if [ -d $(BINDIR) ]; then rm -r $(BINDIR); fi ### Synthesis/implementation/programming rules $(DCPDIR)/%.synth.dcp : $(wildcard $(SRCDIR)/*.v) mkdir -p $(DCPDIR) vivado -nolog -nojournal -mode batch -source $(SCRIPT_SYNTH) -tclargs $@ $(PART) $(TOP) $^ $(DCPDIR)/%.impl.dcp : $(DCPDIR)/%.synth.dcp vivado -nolog -nojournal -mode batch -source $(SCRIPT_IMPL) -tclargs $@ $< $(CNSTRFILE) $(BINDIR)/%.bit : $(DCPDIR)/%.impl.dcp mkdir -p $(BINDIR) vivado -nolog -nojournal -mode batch -source $(SCRIPT_GENBIT) -tclargs $@ $< prog_device.% : $(BINDIR)/%.bit vivado -nolog -nojournal -mode batch -source $(SCRIPT_PROGDEV) -tclargs $< $(HW_SERVER) $(HW_TARGET) $(HW_DEVICE) ### Testbench rules .NOTINTERMEDIATE : $(TBBINDIR)/%/dump.vcd $(TBBINDIR)/%/dump.vcd : $(wildcard $(TBDIR)/*.v) $(wildcard $(SRCDIR)/*.v) mkdir -p $(TBBINDIR)/$* cd $(TBBINDIR)/$* && $(SCRIPT_RUNTB) $(SCRIPT_TBLOGVCD) $* $^ viewdump.% : $(TBBINDIR)/%/dump.vcd nohup gtkwave $< &> /dev/null & runtb.% : $(TBBINDIR)/%/dump.vcd