|
1 |
| - |
2 |
| -# Don't run anything by default |
3 |
| -.PHONY: all |
4 |
| -all: |
5 |
| - |
6 |
| -# Custom project configuration |
7 |
| --include ./project.mk |
8 |
| - |
9 |
| -# Don't delete these |
10 |
| -.PRECIOUS: build/%.d build/%.blif build/%.bin build/%.asc |
11 |
| - |
12 |
| -# Top module |
13 |
| -TOP ?= top |
14 |
| - |
15 |
| -# Tool paths |
16 |
| - |
17 |
| -# Use apio toolchain |
18 |
| -TOOLCHAIN = $(HOME)/.apio/packages/toolchain-icestorm/bin |
19 |
| -export PATH := $(TOOLCHAIN):$(PATH) |
20 |
| - |
21 |
| -YOSYS ?= yosys |
22 |
| -PNR ?= arachne-pnr |
23 |
| -ICEPACK ?= icepack |
24 |
| -ICEPROG ?= iceprog |
25 |
| -TINYPROG ?= tinyprog |
26 |
| -ICETIME ?= icetime |
27 |
| -IVERILOG ?= iverilog |
28 |
| -GTKWAVE ?= gtkwave |
29 |
| - |
30 |
| -SHARE_ICEBOX = $$(dirname $$(which $(ICETIME)))/../share/icebox |
31 |
| - |
32 |
| -ifeq ($(USE_SUDO),1) |
33 |
| -ICEPROG := sudo $$(which $(ICEPROG)) |
34 |
| -TINYPROG := sudo $$(which $(TINYPROG)) |
35 |
| -endif |
36 |
| - |
37 |
| -MAKEDEPS = ./make-deps |
38 |
| - |
39 |
| -# Board-specific configuration |
40 |
| - |
41 |
| -BOARD ?= icestick |
42 |
| - |
43 |
| -YOSYS_OPTS = |
44 |
| - |
45 |
| -ifeq ($(BOARD),icestick) |
46 |
| -PNR_OPTS = -d 1k -P tq144 |
47 |
| -DEVICE = hx1k |
48 |
| -CHIPDB = 1k |
49 |
| -PROG = $(ICEPROG) |
50 |
| -endif |
51 |
| - |
52 |
| -ifeq ($(BOARD),bx) |
53 |
| -PNR_OPTS = -d 8k -P cm81 |
54 |
| -DEVICE = lp8k |
55 |
| -CHIPDB = 8k |
56 |
| -PROG = $(TINYPROG) -p |
57 |
| -endif |
58 |
| - |
59 |
| -ifndef VERBOSE |
60 |
| -PNR_OPTS := -q $(PNR_OPTS) |
61 |
| -YOSYS_OPTS := -q $(YOSYS_OPTS) |
62 |
| -endif |
63 |
| - |
64 |
| -# Dependencies |
65 |
| - |
66 |
| -build/%.d: %.v $(MAKEDEPS) |
67 |
| - @mkdir -p $(dir $@) |
68 |
| - @$(MAKEDEPS) $(@:.d=.bx.blif) $< > $@ |
69 |
| - @$(MAKEDEPS) $(@:.d=.icestick.blif) $< >> $@ |
70 |
| - @$(MAKEDEPS) $(@:.d=.out) $< >> $@ |
71 |
| - |
72 |
| -# Synthesis |
73 |
| - |
74 |
| -build/%.$(BOARD).blif: %.v build/%.d |
75 |
| - $(YOSYS) $(YOSYS_OPTS) \ |
76 |
| - -p "verilog_defines -DBOARD_$(BOARD) -DBOARD=$(BOARD)" \ |
77 |
| - -p "read_verilog -noautowire $<" \ |
78 |
| - -p "synth_ice40 -top $(TOP) -blif $@" |
79 |
| - |
80 |
| -build/%.$(BOARD).asc: build/%.$(BOARD).blif pcf/$(BOARD).pcf |
81 |
| - $(PNR) -p pcf/$(BOARD).pcf $(PNR_OPTS) $< -o $@ |
82 |
| - |
83 |
| -build/%.bin: build/%.asc |
84 |
| - $(ICEPACK) $< $@ |
85 |
| - |
86 |
| -# Simulation |
87 |
| - |
88 |
| -build/%.out: %.v build/%.d |
89 |
| - $(IVERILOG) -DVCD_FILE=\"build/$(<:.v=.vcd)\" -o $@ $< |
90 |
| - |
91 |
| -# Top-level goals (flash, sim, run, time) |
92 |
| - |
93 |
| -flash sim run time:: |
94 |
| -ifeq ($(V),) |
95 |
| - $(error Define target name first, e.g.: make run V=myfile.v) |
96 |
| -endif |
97 |
| - |
98 |
| -.PHONY: flash |
99 |
| -flash:: build/$(V:.v=.$(BOARD).bin) |
100 |
| - $(PROG) $< |
101 |
| - |
102 |
| -.PHONY: sim |
103 |
| -sim:: run |
104 |
| - $(GTKWAVE) build/$(V:.v=.vcd) |
105 |
| - |
106 |
| -.PHONY: run |
107 |
| -run:: build/$(V:.v=.out) |
108 |
| - ./$< |
109 |
| - |
110 |
| -.PHONY: time |
111 |
| -time:: build/$(V:.v=.$(BOARD).asc) |
112 |
| - $(ICETIME) -d $(DEVICE) -C $(SHARE_ICEBOX)/chipdb-$(CHIPDB).txt $< |
113 |
| - |
114 |
| -# Cleanup |
115 |
| - |
116 |
| -.PHONY: clean |
117 |
| -clean: |
118 |
| - rm -f build/* |
119 |
| - |
120 |
| -include $(wildcard build/*.d) |
| 1 | +include fpga-tools/fpga.mk |
0 commit comments