2025-09-08 17:05:04 -07:00

65 lines
1.9 KiB
Makefile

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