gateware

A collection of little open source FPGA hobby projects
git clone http://frotz.net/git/gateware.git
Log | Files | Refs | README

nextpnr-ice40.mk (1933B)


      1 ## Copyright 2018 Brian Swetland <swetland@frotz.net>
      2 ##
      3 ## Licensed under the Apache License, Version 2.0 
      4 ## http://www.apache.org/licenses/LICENSE-2.0
      5 
      6 PROJECT_OBJDIR := out/-nextpnr-/$(PROJECT_NAME)
      7 
      8 PROJECT_BIN := out/$(PROJECT_NAME).bin
      9 PROJECT_ASC := $(PROJECT_OBJDIR)/$(PROJECT_NAME).asc
     10 PROJECT_LINT := $(PROJECT_OBJDIR)/$(PROJECT_NAME).lint
     11 PROJECT_JSON := $(PROJECT_OBJDIR)/$(PROJECT_NAME).json
     12 PROJECT_YS := $(PROJECT_OBJDIR)/$(PROJECT_NAME).ys
     13 
     14 PROJECT_VLG_SRCS := $(filter %.v %.sv,$(PROJECT_SRCS)) 
     15 PROJECT_PCF_SRCS := $(filter %.pcf,$(PROJECT_SRCS))
     16 
     17 $(PROJECT_YS): _SRCS := $(PROJECT_VLG_SRCS)
     18 $(PROJECT_YS): _JSON := $(PROJECT_JSON)
     19 $(PROJECT_YS): $(PROJECT_SRCS) $(PROJECT_DEF) build/nextpnr-ice40.mk
     20 	@mkdir -p $(dir $@)
     21 	@echo GENERATING: $@
     22 	@echo verilog_defines -DHEX_PATHS -DYOSYS > $@
     23 	@for src in $(_SRCS); do echo read_verilog -sv $$src; done >> $@
     24 	@echo synth_ice40 -top top -json $(_JSON) >> $@
     25 
     26 $(PROJECT_LINT): _SRCS := $(PROJECT_VLG_SRCS)
     27 $(PROJECT_LINT): $(PROJECT_SRCS)
     28 	@mkdir -p $(dir $@)
     29 	@echo LINTING: $@
     30 	@$(VERILATOR) --top-module top --lint-only $(_SRCS)
     31 	@touch $@
     32 
     33 $(PROJECT_JSON): _LOG := $(PROJECT_OBJDIR)/$(PROJECT_NAME).yosys.log
     34 $(PROJECT_JSON): $(PROJECT_YS) $(PROJECT_LINT)
     35 	@mkdir -p $(dir $@)
     36 	@echo SYNTHESIZING: $@
     37 	@$(YOSYS) -s $< 2>&1 | tee $(_LOG)
     38 
     39 $(PROJECT_ASC): _OPTS := $(PROJECT_NEXTPNR_OPTS)
     40 $(PROJECT_ASC): _PCF := $(foreach pcf,$(PROJECT_PCF_SRCS),--pcf $(pcf))
     41 $(PROJECT_ASC): _LOG := $(PROJECT_OBJDIR)/$(PROJECT_NAME).nextpnr.log
     42 $(PROJECT_ASC): $(PROJECT_JSON) $(PROJECT_PCF_SRCS)
     43 	@mkdir -p $(dir $@)
     44 	@echo PLACING-AND-ROUTING: $@
     45 	@$(NEXTPNR_ICE40) --asc $@ --json $< $(_PCF) $(_OPTS) 2>&1 | tee $(_LOG)
     46 
     47 $(PROJECT_BIN): $(PROJECT_ASC)
     48 	@mkdir -p $(dir $@)
     49 	@echo PACKING: $@
     50 	@$(ICEPACK) $< $@
     51 
     52 $(PROJECT_NAME): $(PROJECT_BIN)
     53 
     54 ALL_TARGETS += $(PROJECT_NAME)
     55 ALL_BUILDS += $(PROJECT_NAME)
     56 
     57 TARGET_$(PROJECT_NAME)_DESC := build ice40 bitfile: $(PROJECT_BIN)
     58