#=============================================================================== # CAM Top Synthesis Makefile # Targets: synth, hier, flat, clean # Usage: # make -C hw/syn synth (defaults, output in build/) # make -C hw/syn synth OUT_DIR=/some/path (mirror artifacts) # make -C hw/syn synth NUM_ROWS=8192 (override parameter) # make -C hw/syn hier (hierarchy-only pass) # make -C hw/syn flat (flattened-synthesis pass) # make -C hw/syn clean (remove build/) #=============================================================================== # ── Configurable variables (defaults) ───────────────────────────────────────── YOSYS ?= yosys TOP ?= cam_top NUM_ROWS ?= 4096 HASH_BITS ?= 512 LANES ?= 8 TOPK_K ?= 4 FIFO_DEPTH ?= 16 OUT_DIR ?= build # ── TOP enforcement (only cam_top is supported) ─────────────────────────────── ifneq ($(TOP),cam_top) $(error error: only TOP=cam_top is supported) endif # ── Internal build directory ────────────────────────────────────────────────── BUILD_DIR := build # ── Fixed script and artifact names ─────────────────────────────────────────── HIER_SCRIPT := synth_cam_top_hier.ys FLAT_SCRIPT := synth_cam_top_flat.ys HIER_LOG := yosys_hier.log FLAT_LOG := yosys_flat.log HIER_JSON := cam_top_hier_resources.json FLAT_JSON := cam_top_flat_resources.json SYNTH_V := cam_top_synth.v ARTIFACTS := $(HIER_JSON) $(FLAT_JSON) $(SYNTH_V) $(HIER_LOG) $(FLAT_LOG) # ── Yosys command-line defines (always passed) ──────────────────────────────── # cam_params.svh uses `ifndef guards, so -D on the Yosys CLI overrides defaults. # Use -D NAME=value syntax (Yosys 0.62); do NOT use -define. YOSYS_DEFINES := -D NUM_ROWS=$(NUM_ROWS) -D HASH_BITS=$(HASH_BITS) -D LANES=$(LANES) -D TOPK_K=$(TOPK_K) -D FIFO_DEPTH=$(FIFO_DEPTH) # ── Targets ─────────────────────────────────────────────────────────────────── .PHONY: synth hier flat clean # ── Hierarchy resource reference pass ───────────────────────────────────────── hier: mkdir -p $(BUILD_DIR) $(YOSYS) $(YOSYS_DEFINES) -l $(BUILD_DIR)/$(HIER_LOG) -s $(HIER_SCRIPT) # ── Flattened Xilinx synthesis pass ─────────────────────────────────────────── flat: mkdir -p $(BUILD_DIR) $(YOSYS) $(YOSYS_DEFINES) -l $(BUILD_DIR)/$(FLAT_LOG) -s $(FLAT_SCRIPT) # ── Full synthesis: hier + flat, then mirror artifacts to OUT_DIR if different ─ synth: hier flat @if [ "$(abspath $(OUT_DIR))" != "$(abspath $(BUILD_DIR))" ]; then \ set -e; \ echo "Mirroring artifacts to $(OUT_DIR) ..."; \ mkdir -p "$(OUT_DIR)"; \ for f in $(ARTIFACTS); do \ if [ ! -f "$(BUILD_DIR)/$$f" ]; then \ echo "error: missing artifact $(BUILD_DIR)/$$f" >&2; \ exit 1; \ fi; \ cp "$(BUILD_DIR)/$$f" "$(OUT_DIR)/$$f"; \ done; \ fi # ── Clean ───────────────────────────────────────────────────────────────────── clean: rm -rf $(BUILD_DIR)