# quad-encoder-i2c-yosys — Icarus sim + Yosys synth (klayout.com Part 3)
# Set LIBERTY to your .lib, or set PDK_ROOT (and optionally PDK) so the default path resolves.

PDK     ?= sky130A
LIBERTY ?= $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib

.PHONY: sim sim-i2c synth clean

sim:
	mkdir -p sim
	iverilog -g2012 -o sim/tb_quad_counter.vvp rtl/quad_decoder.v rtl/updown_counter32.v tb/tb_quad_counter.v
	cd sim && vvp tb_quad_counter.vvp

sim-i2c:
	mkdir -p sim
	iverilog -g2012 -o sim/tb_i2c_count_read.vvp rtl/quad_decoder.v rtl/updown_counter32.v rtl/i2c_slave_regs.v rtl/encoder_top.v tb/tb_i2c_count_read.v
	cd sim && vvp tb_i2c_count_read.vvp

synth:
	mkdir -p synth
	@test -f "$(LIBERTY)" || (echo "Liberty not found: $(LIBERTY)"; echo "export LIBERTY=/path/to/sky130_fd_sc_hd__tt_025C_1v80.lib"; echo "or export PDK_ROOT=/path/to/pdk/root  (expects \$$PDK_ROOT/\$$PDK/libs.ref/...)"; exit 1)
	sed "s|@LIBERTY@|$(LIBERTY)|g" synth/synth.ys.in > synth/synth_run.ys
	yosys -s synth/synth_run.ys

clean:
	rm -rf sim/*.vvp sim/*.vcd synth/encoder_top_gl.v synth/synth_run.ys
