#-------------- TOOLS -------------------
TOOLCH= ~/.icestudio/apio/packages/tools-oss-cad-suite/bin/
LOAD=   ~/raspcloud/FPGA/lpc11loader/
LOAD2=  ~/raspcloud/FPGA/iceRAM/
#-------------------------------------------------------
# SOURCES
#-------------------------------------------------------
SRCS = system.v gus16v8.v uart_simple.v breakpoint.v romGUS.hex

#-------------------------------------------------------
#-- Objetivo por defecto: hacer simulacion y sintesis
#-------------------------------------------------------
all: sim

#-------------------------------------------------------
#-- Fuentes de la ROM
#-------------------------------------------------------	
romGUS.hex:	romGUS.s Makefile
	python3 llvm-gus16/gus16_asm_rev5/gus16_asm.py $< -o $@ -f hex

#----------------------------------------------
#-- make sim
#----------------------------------------------
#-- Objetivo para hacer la simulacion del
#-- banco de pruebas
#----------------------------------------------
sim: romGUS.hex
	iverilog tb.v -o tb.out -DSIMULATION -DSIM 
	./tb.out
	gtkwave tb.vcd tb.gtkw &
	
#-------------------------------------------------------
# Carga en FPGA
#-------------------------------------------------------
# directo a ConfigRAM en FPGA
sint: main.bin
	$(LOAD)iceload -c $<

sintsr: mainsr.bin
	$(LOAD)iceload -c $<

sintal: mainal.bin
	$(LOAD2)iceram $<
	
# Grabación en Flash SPI
burn: main.bin
	$(LOAD)iceload -p $<

# Sólo terminal serie
term:
	$(LOAD)iceload -t

termal:
	$(LOAD)iceload -t -d /dev/ttyUSB1
	
#------------------------------
#-- Sintesis completa
#------------------------------
main.bin:	main.asc
	$(TOOLCH)icepack -s $< $@
	
main.asc: main.json pines_icecream.pcf
	$(TOOLCH)nextpnr-ice40 --hx4k --pcf pines_icecream.pcf \
	  --json $< --asc $@ --package tq144 2>pnr.log

main.json: main.v $(SRCS)
	$(TOOLCH)yosys -p "synth_ice40 -top main" -o $@ $< pll.v >sint.log


mainsr.bin:	mainsr.asc
	$(TOOLCH)icepack -s $< $@
	
mainsr.asc: mainsr.json pines_simretro.pcf
	$(TOOLCH)nextpnr-ice40 --hx4k --pcf pines_simretro.pcf \
	  --json $< --asc $@ --package tq144 2>pnr.log

mainsr.json: main.v $(SRCS) pllsr.v
	$(TOOLCH)yosys -p "synth_ice40 -top main" -o $@ $< pllsr.v >sint.log
	

mainal.json:	mainal.v pll.v $(SRCS)
	$(TOOLCH)yosys -p "synth_ice40 -top main" -o $@ $< pll.v >sint.log
	
mainal.asc: mainal.json pines_Alhambra.pcf
	$(TOOLCH)nextpnr-ice40 --hx4k --pcf pines_Alhambra.pcf \
	  --json $< --asc $@ --package tq144 2>pnr.log

mainal.bin:	mainal.asc
	$(TOOLCH)icepack -s $< $@


onlycore.asc:	onlycore.v gus16v8.v 
	$(TOOLCH)yosys -p "synth_ice40" -o _tmp_.json onlycore.v >sint.log
	$(TOOLCH)nextpnr-ice40 --hx4k --pcf pinesplain.pcf --json _tmp_.json --asc $@ --package tq144 2>pnr.log

onlycore7.asc:	onlycore7.v gus16v7.v 
	$(TOOLCH)yosys -p "synth_ice40" -o _tmp_.json onlycore7.v >sint.log
	$(TOOLCH)nextpnr-ice40 --hx4k --pcf pinesplain.pcf --json _tmp_.json --asc $@ --package tq144 2>pnr.log

	
#-- Limpiar todo
clean:
	rm -f *.asc *.blif *.out *.vcd *.json *.log *.lst *~ abc.history
#empaquetar
pack:
	make -C util8 clean
	tar czvf - --directory=.. gus16_v8/pll.v gus16_v8/gus16v8.v gus16_v8/main.v gus16_v8/uart_simple.v \
	gus16_v8/mainal.v gus16_v8/breakpoint.v gus16_v8/pines_Alhambra.pcf \
	gus16_v8/tb.v gus16_v8/system.v gus16_v8/onlycore.v gus16_v8/pines_icecream.pcf \
	gus16_v8/Makefile gus16_v8/pines_simretro.pcf gus16_v8/pinesplain.pcf \
	gus16_v8/romGUS.s gus16_v8/romGUS.hex gus16_v8/doc/GUSv8.pdf gus16_v8/app \
	gus16_v8/doc/GUS16.pdf gus16_v8/llvm-gus16 gus16_v8/gus16v8_base.v gus16_v8/doperm.c >gus16_v8.tgz
	cp gus16_v8.tgz ~/raspcloud/public_html/gus16_v8.tgz
	cp doc/GUS16.pdf ~/raspcloud/public_html/GUS16.pdf
	cp doc/GUSv8.pdf ~/raspcloud/public_html/GUSv8.pdf
	
plainhex:	plainhex.c
	gcc -w -O2 -o $@ $<
	
.PHONY: all clean

	
