| # SPDX-License-Identifier: Apache-2.0 | |
| # Usage: | |
| # make clean all | |
| # make prog | |
| NAME = fpga_top | |
| DEPS = \ | |
| ../usb2uart.v \ | |
| ../usb_cdc/usb_cdc/phy_tx.v \ | |
| ../usb_cdc/usb_cdc/phy_rx.v \ | |
| ../usb_cdc/usb_cdc/sie.v \ | |
| ../usb_cdc/usb_cdc/ctrl_endp.v \ | |
| ../usb_cdc/usb_cdc/in_fifo.v \ | |
| ../usb_cdc/usb_cdc/out_fifo.v \ | |
| ../usb_cdc/usb_cdc/bulk_endp.v \ | |
| ../usb_cdc/usb_cdc/usb_cdc.v \ | |
| ../usb_cdc/examples/common/hdl/prescaler.v \ | |
| ../usb_cdc/examples/common/hdl/fifo_if.v \ | |
| pll.v \ | |
| ../verilog-uart/rtl/uart_rx.v \ | |
| ../verilog-uart/rtl/uart_tx.v \ | |
| ../verilog-uart/rtl/uart.v | |
| PIN_DEF = fpga_pins.pcf | |
| # TinyFPGA-BX | |
| FPGA_SIZE = 8k | |
| FPGA_TYPE = lp | |
| FPGA_PACK = cm81 | |
| CLK_MHZ = 48 | |
| all: sint time | |
| pll.v: | |
| icepll -i 16 -o $(CLK_MHZ) -m -f $@ | |
| sim: $(NAME)_tb.vcd | |
| gtkwave $< $(<:.vcd=.gtkw) & | |
| $(NAME)_tb.vcd: $(NAME).v $(DEPS) $(NAME)_tb.v | |
| sint: $(NAME).bin | |
| $(NAME).json: $(NAME).v $(DEPS) | |
| $(NAME).asc: $(NAME).json $(PIN_DEF) | |
| prog: $(NAME).bin | |
| tinyprog -p $< | |
| time: $(NAME).rpt | |
| .SUFFIXES: .asc .bin .json .v .vcd .rpt | |
| .asc.rpt: | |
| icetime -d $(FPGA_TYPE)$(FPGA_SIZE) -mtr $@ $< | |
| .v.vcd: | |
| iverilog $^ -o $(@:.vcd=.out) | |
| ./$(@:.vcd=.out) | |
| .v.json: | |
| yosys -q -p 'synth_ice40 -top $(NAME) -json $@' $^ | |
| .json.asc: | |
| nextpnr-ice40 --$(FPGA_TYPE)$(FPGA_SIZE) --freq $(CLK_MHZ) --opt-timing --package $(FPGA_PACK) --pcf $(PIN_DEF) --json $< --asc $@ | |
| .asc.bin: | |
| icepack $< $@ | |
| clean: | |
| rm -f *.bin *.asc *.json *.out *.vcd *.rpt pll.v | |
| .PHONY: all sim sint prog clean time |