gateware

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

nextpnr-ecp5.mk (2483B)


      1 ## Copyright 2020 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_CONFIG := $(PROJECT_OBJDIR)/$(PROJECT_NAME)_out.config
      9 PROJECT_LINT := $(PROJECT_OBJDIR)/$(PROJECT_NAME).lint
     10 PROJECT_JSON := $(PROJECT_OBJDIR)/$(PROJECT_NAME).json
     11 PROJECT_YS := $(PROJECT_OBJDIR)/$(PROJECT_NAME).ys
     12 PROJECT_BIT := out/$(PROJECT_NAME).bit
     13 PROJECT_SVF := out/$(PROJECT_NAME).svf
     14 
     15 PROJECT_VLG_SRCS := $(filter %.v %.sv,$(PROJECT_SRCS)) 
     16 PROJECT_LPF_SRCS := $(filter %.lpf,$(PROJECT_SRCS))
     17 
     18 $(PROJECT_YS): _SRCS := $(PROJECT_VLG_SRCS)
     19 $(PROJECT_YS): _JSON := $(PROJECT_JSON)
     20 $(PROJECT_YS): _DEFS := $(PROJECT_VERILOG_DEFS)
     21 $(PROJECT_YS): $(PROJECT_SRCS) $(PROJECT_DEF) build/nextpnr-ecp5.mk
     22 	@mkdir -p $(dir $@)
     23 	@echo GENERATING: $@
     24 	@echo verilog_defines -DHEX_PATHS -DYOSYS > $@
     25 	@for def in $(_DEFS); do echo verilog_defines -D$$def; done >> $@
     26 	@for src in $(_SRCS); do echo read_verilog -sv $$src; done >> $@
     27 	@echo synth_ecp5 -top top -json $(_JSON) >> $@
     28 
     29 $(PROJECT_LINT): _SRCS := $(PROJECT_VLG_SRCS)
     30 $(PROJECT_LINT): $(PROJECT_SRCS)
     31 	@mkdir -p $(dir $@)
     32 	@echo LINTING: $@
     33 	@$(VERILATOR) --top-module top --lint-only $(_SRCS)
     34 	@touch $@
     35 
     36 $(PROJECT_JSON): _LOG := $(PROJECT_OBJDIR)/$(PROJECT_NAME).yosys.log
     37 $(PROJECT_JSON): $(PROJECT_YS) $(PROJECT_LINT)
     38 	@mkdir -p $(dir $@)
     39 	@echo SYNTHESIZING: $@
     40 	@$(YOSYS) -s $< 2>&1 | tee $(_LOG)
     41 
     42 $(PROJECT_CONFIG): _OPTS := $(PROJECT_NEXTPNR_OPTS)
     43 $(PROJECT_CONFIG): _LPF := $(foreach lpf,$(PROJECT_LPF_SRCS),--lpf $(lpf))
     44 $(PROJECT_CONFIG): _LOG := $(PROJECT_OBJDIR)/$(PROJECT_NAME).nextpnr.log
     45 $(PROJECT_CONFIG): _JSON := $(PROJECT_JSON)
     46 $(PROJECT_CONFIG): $(PROJECT_JSON) $(PROJECT_LPF_SRCS)
     47 	@mkdir -p $(dir $@)
     48 	@echo PLACING-AND-ROUTING: $@
     49 	$(NEXTPNR_ECP5) --json $(_JSON) --textcfg $@ $(_OPTS) $(_LPF) 2>&1 | tee $(_LOG)
     50 
     51 $(PROJECT_BIT): _CONFIG := $(PROJECT_CONFIG)
     52 $(PROJECT_BIT): _BIT := $(PROJECT_BIT)
     53 $(PROJECT_BIT): $(PROJECT_CONFIG)
     54 	@mkdir -p $(dir $@)
     55 	@echo GENERATING: $@
     56 	@$(ECPPACK) $(_CONFIG) $(_BIT) --compress
     57 
     58 $(PROJECT_SVF): _CONFIG := $(PROJECT_CONFIG)
     59 $(PROJECT_SVF): _SVF := $(PROJECT_SVF)
     60 $(PROJECT_SVF): $(PROJECT_CONFIG)
     61 	@mkdir -p $(dir $@)
     62 	@echo GENERATING: $@
     63 	@$(ECPPACK) --svf $(_SVF) $(_CONFIG) --compress
     64 
     65 $(PROJECT_NAME): $(PROJECT_BIT)
     66 
     67 ALL_TARGETS += $(PROJECT_NAME)
     68 ALL_BUILDS += $(PROJECT_NAME)
     69 
     70 TARGET_$(PROJECT_NAME)_DESC := build ecp5 bitfile: $(PROJECT_BIT)
     71