PROJECT=SynthKS
VHDL_SOURCE = synth_ksb_top.vhd wave_gen.vhd i2c_config.vhd \
	audio_pll.vhd audio_ctrl.vhd rnd_gen.vhd ksb_wave_gen.vhd

MAP_ARGS = --family=CycloneII
FIT_ARGS = --part=EP2C35F672C6
ASM_ARGS =
GHDL_ARGS = --std=93c

all: $(PROJECT).sof quartus_results

tests: tb_i2c_config.ghw tb_audio_ctrl.ghw tb_rnd_gen.ghw tb_ksb_wave_gen.ghw

tb_%.ghw: tb_%
	./$< --wave=$@

tb_i2c_config: tb_i2c_config.vhd i2c_config.vhd i2c_receiver_model.vhd i2c_timing_checker.vhd
	ghdl -a $(GHDL_ARGS) $^
	ghdl -e $(GHDL_ARGS) $@

tb_audio_ctrl: tb_audio_ctrl.vhd audio_codec_model.vhd audio_ctrl.vhd wave_gen.vhd
	ghdl -a $(GHDL_ARGS) $^
	ghdl -e $(GHDL_ARGS) $@

tb_rnd_gen: tb_rnd_gen.vhd rnd_gen.vhd
	ghdl -a $(GHDL_ARGS) $^
	ghdl -e $(GHDL_ARGS) $@

tb_ksb_wave_gen: tb_ksb_wave_gen.vhd ksb_wave_gen.vhd rnd_gen.vhd
	ghdl -a $(GHDL_ARGS) $^
	ghdl -e $(GHDL_ARGS) $@

clean:
	
	rm -f tb_* *.o *.cf filelist

# -------------------------------------------
# -------------- ALTERA QUARTUS -------------

filelist:
	rm -f filelist && \
	for file in $(VHDL_SOURCE); \
	do echo --source $$file >> filelist; \
	done

quartus_results:
	grep "^Warning:" $(PROJECT).map.rpt
	grep "^Error:" $(PROJECT).map.rpt $(PROJECT).fit.rpt $(PROJECT).asm.rpt || true

$(PROJECT).map.rpt: filelist $(PROJECT).qdf $(VHDL_SOURCE)
	quartus_map $(MAP_ARGS) -f filelist $(PROJECT)

$(PROJECT).fit.rpt: $(PROJECT).map.rpt
	quartus_fit $(FIT_ARGS) $(PROJECT)

$(PROJECT).sof: $(PROJECT).fit.rpt
	quartus_asm $(ASM_ARGS) $(PROJECT)

program: $(PROJECT).sof
	quartus_pgm -m JTAG -c 1 -o p\;$(PROJECT).sof