-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
114 lines (89 loc) · 2.59 KB
/
Copy pathMakefile
File metadata and controls
114 lines (89 loc) · 2.59 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
PROJECT_DIR := /home/mcrparadox/work/MAC
LIBRELANE_DIR := $(HOME)/librelane
# LibreLane configuration
STAGE := mac_stage1
LL_DESIGNS_DIR := $(LIBRELANE_DIR)/designs
LL_DESIGN_LINK := $(LL_DESIGNS_DIR)/$(STAGE)
PROJECT_DESIGN := $(PROJECT_DIR)/flow/librelane/$(STAGE)
# Simulation configuration (Verilator)
TOP := mac_top
RTL_DIR := rtl/mac
TB_DIR := tb
OBJ_DIR := obj_dir
VERILATOR := verilator
VFLAGS := --cc --exe --trace --sv -Wall --x-assign unique --x-initial unique -I$(RTL_DIR)
RTL_SRCS := $(RTL_DIR)
TB_CPP := $(TB_DIR)/mac_tb.cpp
# Default target
.PHONY: all
all: build
# ---------------- Simulation flow ------------------------
.PHONY: sim
sim: waves
.PHONY: verilate
verilate: .stamp.verilate
.stamp.verilate: $(TB_CPP) $(RTL_SRCS)/*.sv
@echo
@echo "### VERILATING ###"
$(VERILATOR) $(VFLAGS) \
$(RTL_SRCS)/mac_top.sv \
--top-module $(TOP) \
--exe $(TB_CPP)
@touch $@
$(OBJ_DIR)/V$(TOP): .stamp.verilate
@echo
@echo "### BUILDING SIM ###"
$(MAKE) -C $(OBJ_DIR) -f V$(TOP).mk V$(TOP)
.PHONY: build
build: $(OBJ_DIR)/V$(TOP)
waveform.vcd: $(OBJ_DIR)/V$(TOP)
@echo
@echo "### SIMULATING ###"
./$(OBJ_DIR)/V$(TOP)
.PHONY: waves
waves: waveform.vcd
@echo
@echo "### WAVES ###"
gtkwave waveform.vcd
.PHONY: lint
lint:
$(VERILATOR) --lint-only --sv $(RTL_SRCS)
sim-clean:
rm -rf $(OBJ_DIR)
rm -f .stamp.verilate waveform.vcd
# ---------------- LibreLane flow --------------------------
.PHONY: flow
flow:
cd $(LIBRELANE_DIR) && . $(HOME)/librelane-venv/bin/activate && \
python3 -m librelane --dockerized --pdk-root $(HOME)/.ciel/ciel $(PROJECT_DIR)/flow/librelane/$(STAGE)/config.json
.PHONY: extract-violations
extract-violations:
@python3 scripts/extract_violations.py
.PHONY: flow-prune
flow-prune:
@echo "Pruning LibreLane runs and extracts (keeping latest)..."
@set -e; \
RUN_DIR="$(PROJECT_DIR)/flow/librelane/$(STAGE)/runs"; \
EXT_DIR="$(PROJECT_DIR)/flow/librelane/$(STAGE)/extracts"; \
\
if [ -d "$$RUN_DIR" ]; then \
LATEST_RUN=$$(ls -dt $$RUN_DIR/RUN_* 2>/dev/null | head -n 1); \
if [ -n "$$LATEST_RUN" ]; then \
find $$RUN_DIR -mindepth 1 -maxdepth 1 -type d ! -path "$$LATEST_RUN" -exec rm -rf {} +; \
fi; \
else \
echo "No runs directory found."; \
fi; \
\
if [ -d "$$EXT_DIR" ]; then \
if [ -n "$$LATEST_RUN" ]; then \
LATEST_NAME=$$(basename $$LATEST_RUN); \
find $$EXT_DIR -mindepth 1 -maxdepth 1 -type d ! -name "$$LATEST_NAME" -exec rm -rf {} +; \
fi; \
else \
echo "No extracts directory found."; \
fi
# ----------------------------------------------------------
# Global clean
.PHONY: clean
clean: sim-clean flow-prune