blob: 5838b33fbfe304a99a4a1661b4a9b2d4985b75af (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
HDL_DIR = hdl
BUILD = build
DEVICE = GW5A-LV25MG121NES
FAMILY = GW5A-25A
TOP = pic_top
CST = primer25k.cst
MODULE = -m ghdl
STD = --std=08
# Synthesizable sources (no testbenches, no VHDL file-I/O packages)
SYN_FILES = \
$(HDL_DIR)/common.vhd \
$(HDL_DIR)/decoder.vhd \
$(HDL_DIR)/fifo.vhd \
$(HDL_DIR)/uart.vhd \
$(HDL_DIR)/onewire.vhd \
$(HDL_DIR)/timer0.vhd \
$(HDL_DIR)/ALU.vhd \
$(HDL_DIR)/stack.vhd \
$(HDL_DIR)/dpram.vhd \
$(HDL_DIR)/state_machine.vhd \
$(HDL_DIR)/PIC.vhd \
$(HDL_DIR)/prog_rom.vhd \
$(HDL_DIR)/pic_top.vhd
# Simulation adds the hex-reader package and testbenches
SIM_FILES = \
$(HDL_DIR)/common.vhd \
$(HDL_DIR)/decoder.vhd \
$(HDL_DIR)/hexfile_reader.vhd \
$(HDL_DIR)/fifo.vhd \
$(HDL_DIR)/uart.vhd \
$(HDL_DIR)/onewire.vhd \
$(HDL_DIR)/timer0.vhd \
$(HDL_DIR)/ALU.vhd \
$(HDL_DIR)/stack.vhd \
$(HDL_DIR)/dpram.vhd \
$(HDL_DIR)/state_machine.vhd \
$(HDL_DIR)/PIC.vhd
TB_FILES = \
$(HDL_DIR)/tb_stack.vhd \
$(HDL_DIR)/tb_pic.vhd
all: $(BUILD)/$(TOP).fs
$(BUILD):
mkdir -p $@
# Synthesize
$(BUILD)/$(TOP).json: $(SYN_FILES) | $(BUILD)
ghdl -a $(STD) --workdir=$(BUILD) $(SYN_FILES)
yosys $(MODULE) -p "ghdl $(STD) --workdir=$(BUILD) $(TOP); synth_gowin -json $@ -family gw5a -nolutram"
# Place and route
$(BUILD)/$(TOP)_pnr.json: $(BUILD)/$(TOP).json $(CST)
nextpnr-himbaechel --json $< --write $@ \
--device $(DEVICE) --vopt family=GW5A-25A --vopt cst=$(CST) \
--vopt sspi_as_gpio --freq 50 --report $(BUILD)/$(TOP)_timing.json
# Pack bitstream
$(BUILD)/$(TOP).fs: $(BUILD)/$(TOP)_pnr.json
gowin_pack --sspi_as_gpio --cpu_as_gpio -d $(FAMILY) -o $@ $<
sim: $(SIM_FILES) $(TB_FILES) | $(BUILD)
ghdl -a $(STD) --workdir=$(BUILD) $(SIM_FILES) $(TB_FILES)
ghdl -e $(STD) --workdir=$(BUILD) -o $(BUILD)/tb_stack tb_stack
ghdl -r $(STD) --workdir=$(BUILD) tb_stack
ghdl -e $(STD) --workdir=$(BUILD) -o $(BUILD)/tb_pic tb_pic
ghdl -r $(STD) --workdir=$(BUILD) tb_pic --vcd=$(BUILD)/tb_pic.vcd
$(BUILD)/pic_top.dot: $(SYN_FILES) | $(BUILD)
ghdl -a $(STD) --workdir=$(BUILD) $(SYN_FILES)
yosys $(MODULE) -p "ghdl $(STD) --workdir=$(BUILD) $(TOP); show -format dot -prefix $(BUILD)/pic_top"
$(BUILD)/uart.dot: $(HDL_DIR)/fifo.vhd $(HDL_DIR)/uart.vhd | $(BUILD)
ghdl -a $(STD) --workdir=$(BUILD) $(HDL_DIR)/fifo.vhd $(HDL_DIR)/uart.vhd
yosys $(MODULE) -p "ghdl $(STD) --workdir=$(BUILD) uart; show -format dot -prefix $(BUILD)/uart"
clean:
rm -rf $(BUILD)
.PHONY: all sim clean
|