summaryrefslogtreecommitdiff
path: root/Makefile
blob: 8b7bf3a5c7b060befc4d814e8d464fd2a5d4cce1 (plain)
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
# ==============================================================================
# CONFIGURATION
# ==============================================================================
PROJECT_NAME = lisp_coproc
CONFIG_FILE  = config.json

# Tool Paths
LIBRELANE    = librelane
VERILATOR    = verilator

# PDK Paths (Standard Volare location)
PDK_ROOT     ?= $(HOME)/.ciel/ciel/sky130/versions/0fe599b2afb6708d281543108caf8310912f54af/
PDK          = sky130A
LIB_VERILOG  = $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v
PRIM_VERILOG = $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hd/verilog/primitives.v

# Simulation Flags
VERILATOR_FLAGS = --binary -j 0 --timing --trace --top-module tb_$(PROJECT_NAME) \
                  -Wno-fatal -Wno-style -Wno-lint

# ==============================================================================
# TARGETS
# ==============================================================================
.PHONY: all rtl harden gls clean

# 1. Default: Run the full pipeline (RTL -> GDS -> Check)
all: rtl harden gls

# 2. RTL Verification: Runs your Golden SystemVerilog Testbench
rtl:
	@echo "\n=== [1/3] Running RTL Verification ==="
	$(VERILATOR) $(VERILATOR_FLAGS) \
		-DGL_SIM=0 \
		rtl/tb_$(PROJECT_NAME).sv rtl/$(PROJECT_NAME).sv
	./obj_dir/Vtb_$(PROJECT_NAME)
	@echo ">>> RTL Verification Passed <<<"

# 3. Hardening: Runs LibreLane (Synthesis, Place & Route)
# Note: Uses --run-tag to create a predictable folder name for the GLS step
harden:
	@echo "\n=== [2/3] Running LibreLane Hardening ==="
	$(LIBRELANE) --flow Classic \
		--run-tag automated_run \
		--overwrite \
		$(CONFIG_FILE)
	@echo ">>> Hardening Complete <<<"

# 4. Gate-Level Simulation (GLS): Verifies the final GDSII netlist
# Finds the netlist generated by the 'harden' step
GL_NETLIST = runs/automated_run/final/nl/$(PROJECT_NAME).nl.v

gls:
	@echo "\n=== [3/3] Running Gate-Level Simulation (GLS) ==="
	$(VERILATOR) $(VERILATOR_FLAGS) \
		-DGL_SIM=1 -DFUNCTIONAL -DUNIT_DELAY=\#1 \
		-I$(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hd/verilog \
		rtl/tb_$(PROJECT_NAME).sv \
		$(GL_NETLIST) \
		$(LIB_VERILOG) $(PRIM_VERILOG)
	./obj_dir/Vtb_$(PROJECT_NAME)
	@echo ">>> GLS Verification Passed <<<"

# Clean up build artifacts
clean:
	rm -rf obj_dir runs/automated_run $(PROJECT_NAME).vcd