123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- ifeq ($(MEM_INIT_FILE),)
- MEM_INIT_FILE := $(wildcard $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
- endif
- ifeq ($(ELF2DAT),)
- ELF2DAT := elf2dat
- endif
- ifeq ($(ELF2HEX),)
- ELF2HEX := elf2hex
- endif
- ifeq ($(ELF2FLASH),)
- ELF2FLASH := elf2flash
- endif
- ifeq ($(FLASH2DAT),)
- FLASH2DAT := flash2dat
- endif
- ifeq ($(ALT_FILE_CONVERT),)
- ALT_FILE_CONVERT := alt-file-convert
- endif
- ifeq ($(NM),)
- NM := nios2-elf-nm
- endif
- ifeq ($(MKDIR),)
- MKDIR := mkdir -p
- endif
- ifeq ($(RM),)
- RM := rm -f
- endif
- ifeq ($(CP),)
- CP := cp
- endif
- ifeq ($(ECHO),)
- ECHO := echo
- endif
- MEM_INIT_DIR ?= mem_init
- HDL_SIM_DIR ?= $(MEM_INIT_DIR)/hdl_sim
- ifdef QUARTUS_PROJECT_DIR
- MEM_INIT_INSTALL_DIR ?= $(patsubst %/,%,$(QUARTUS_PROJECT_DIR))
- ifdef SOPC_NAME
- HDL_SIM_INSTALL_DIR ?= $(patsubst %/,%,$(QUARTUS_PROJECT_DIR))/$(SOPC_NAME)_sim
- endif
- endif
- MEM_INIT_DESCRIPTOR_FILE ?= $(MEM_INIT_DIR)/meminit.spd
- MEM_INIT_QIP_FILE ?= $(MEM_INIT_DIR)/meminit.qip
- BOOT_LOADER_PATH ?= $(SOPC_KIT_NIOS2)/components/altera_nios2
- BOOT_LOADER_CFI ?= $(BOOT_LOADER_PATH)/boot_loader_cfi.srec
- BOOT_LOADER_CFI_BE ?= $(BOOT_LOADER_PATH)/boot_loader_cfi_be.srec
- .PHONY: default_mem_init
- ifeq ($(QSYS),1)
- default_mem_init: mem_init_generate
- else
- default_mem_init: mem_init_install
- endif
- define post-process-info
- @echo Post-processing to create $@...
- endef
- target_stem = $(notdir $(basename $@))
- mem_start_address = $($(target_stem)_START)
- mem_end_address = $($(target_stem)_END)
- mem_span = $($(target_stem)_SPAN)
- mem_width = $($(target_stem)_WIDTH)
- mem_hex_width = $($(target_stem)_HEX_DATA_WIDTH)
- mem_endianness = $($(target_stem)_ENDIANNESS)
- mem_create_lanes = $($(target_stem)_CREATE_LANES)
- mem_pad_flag = $($(target_stem)_PAD_FLAG)
- mem_reloc_input_flag = $($(target_stem)_RELOC_INPUT_FLAG)
- mem_no_zero_fill_flag = $($(target_stem)_NO_ZERO_FILL_FLAG)
- flash_mem_epcs_flag = $($(target_stem)_EPCS_FLAGS)
- flash_mem_cfi_flag = $($(target_stem)_CFI_FLAGS)
- flash_mem_boot_loader_flag = $($(target_stem)_BOOT_LOADER_FLAG)
- elf2dat_extra_args = $(mem_pad_flag)
- elf2hex_extra_args = $(mem_no_zero_fill_flag)
- elf2flash_extra_args = $(flash_mem_cfi_flag) $(flash_mem_epcs_flag) $(flash_mem_boot_loader_flag)
- flash2dat_extra_args = $(mem_pad_flag) $(mem_reloc_input_flag)
- ACDS_VERSION := 18.1
- SIM_OPTIMIZE ?= 0
- RESET_ADDRESS ?= 0x00040000
- NIOS2_ELF_FORMAT ?= elf32-littlenios2
- MEM_0 := nios2_uc_onchip_memory2
- $(MEM_0)_NAME := onchip_memory2
- $(MEM_0)_MEM_INIT_FILE_PARAM_NAME := INIT_FILE
- HEX_FILES += $(MEM_INIT_DIR)/$(MEM_0).hex
- MEM_INIT_INSTALL_FILES += $(MEM_INIT_INSTALL_DIR)/$(MEM_0).hex
- DAT_FILES += $(HDL_SIM_DIR)/$(MEM_0).dat
- HDL_SIM_INSTALL_FILES += $(HDL_SIM_INSTALL_DIR)/$(MEM_0).dat
- SYM_FILES += $(HDL_SIM_DIR)/$(MEM_0).sym
- HDL_SIM_INSTALL_FILES += $(HDL_SIM_INSTALL_DIR)/$(MEM_0).sym
- $(MEM_0)_START := 0x00040000
- $(MEM_0)_END := 0x00071fff
- $(MEM_0)_SPAN := 0x00032000
- $(MEM_0)_HIERARCHICAL_PATH := onchip_memory2
- $(MEM_0)_WIDTH := 32
- $(MEM_0)_HEX_DATA_WIDTH := 32
- $(MEM_0)_ENDIANNESS := --little-endian-mem
- $(MEM_0)_CREATE_LANES := 0
- .PHONY: onchip_memory2
- onchip_memory2: check_elf_exists $(MEM_INIT_DIR)/$(MEM_0).hex $(HDL_SIM_DIR)/$(MEM_0).dat $(HDL_SIM_DIR)/$(MEM_0).sym
- .PHONY: mem_init_install mem_init_generate mem_init_clean
- ifeq ($(QSYS),1)
- mem_init_install:
- $(error Deprecated Makefile Target: '$@'. Use target 'mem_init_generate' and then add $(MEM_INIT_QIP_FILE) to your Quartus II Project)
- else
- ifneq ($(MEM_INIT_INSTALL_DIR),)
- mem_init_install: $(MEM_INIT_INSTALL_FILES)
- endif
- ifneq ($(HDL_SIM_INSTALL_DIR),)
- mem_init_install: $(HDL_SIM_INSTALL_FILES)
- endif
- mem_init_install: mem_init_generate
- ifeq ($(MEM_INIT_INSTALL_DIR),)
- @echo "WARNING: MEM_INIT_INSTALL_DIR not set. Set your QUARTUS_PROJECT_DIR environment variable."
- endif
- ifeq ($(HDL_SIM_INSTALL_DIR),)
- @echo "WARNING: HDL_SIM_INSTALL_DIR not set. Set your QUARTUS_PROJECT_DIR and SOPC_NAME environment variable."
- endif
- $(MEM_INIT_INSTALL_FILES): $(MEM_INIT_INSTALL_DIR)/%: $(MEM_INIT_DIR)/%
- @$(MKDIR) $(@D)
- @$(CP) -v $< $@
- $(HDL_SIM_INSTALL_FILES): $(HDL_SIM_INSTALL_DIR)/%: $(HDL_SIM_DIR)/%
- @$(MKDIR) $(@D)
- @$(CP) -v $< $@
- endif
- mem_init_generate: hex dat sym flash $(MEM_INIT_DESCRIPTOR_FILE) $(MEM_INIT_QIP_FILE)
- mem_init_clean:
- @$(RM) -r $(MEM_INIT_DIR) $(HDL_SIM_DIR) $(FLASH_FILES)
- .PHONY: hex dat sym flash
- hex: check_elf_exists $(HEX_FILES)
- dat: check_elf_exists $(DAT_FILES)
- sym: check_elf_exists $(SYM_FILES)
- flash: check_elf_exists $(FLASH_FILES)
- .PHONY: check_elf_exists
- check_elf_exists: $(ELF)
- ifeq ($(ELF),)
- $(error ELF var not set in mem_init.mk)
- endif
- $(filter-out $(FLASH_DAT_FILES),$(DAT_FILES)): %.dat: $(ELF)
- $(post-process-info)
- @$(MKDIR) $(@D)
- $(ELF2DAT) --infile=$< --outfile=$@ \
- --base=$(mem_start_address) --end=$(mem_end_address) --width=$(mem_width) \
- $(mem_endianness) --create-lanes=$(mem_create_lanes) $(elf2dat_extra_args)
- $(foreach i,0 1 2 3 4 5 6 7,%_lane$(i).dat): %.dat
- @true
- ELF_TO_HEX_CMD_NO_BOOTLOADER = $(ELF2HEX) $< $(mem_start_address) $(mem_end_address) --width=$(mem_hex_width) \
- $(mem_endianness) --create-lanes=$(mem_create_lanes) $(elf2hex_extra_args) $@
-
- ELF_TO_HEX_CMD_WITH_BOOTLOADER = $(ALT_FILE_CONVERT) -I $(NIOS2_ELF_FORMAT) -O hex --input=$< --output=$@ \
- --base=$(mem_start_address) --end=$(mem_end_address) --reset=$(RESET_ADDRESS) \
- --out-data-width=$(mem_hex_width) $(flash_mem_boot_loader_flag)
- ELF_TO_HEX_CMD = $(strip $(if $(flash_mem_boot_loader_flag), \
- $(ELF_TO_HEX_CMD_WITH_BOOTLOADER), \
- $(ELF_TO_HEX_CMD_NO_BOOTLOADER) \
- ))
- $(HEX_FILES): %.hex: $(ELF)
- $(post-process-info)
- @$(MKDIR) $(@D)
- $(ELF_TO_HEX_CMD)
- $(SYM_FILES): %.sym: $(ELF)
- $(post-process-info)
- @$(MKDIR) $(@D)
- $(NM) -n $< > $@
- $(FLASH_FILES): %.flash: $(ELF)
- $(post-process-info)
- @$(MKDIR) $(@D)
- $(ELF2FLASH) --input=$< --outfile=$@ --sim_optimize=$(SIM_OPTIMIZE) $(mem_endianness) \
- $(elf2flash_extra_args)
- gen_spd_entry.BASE_FILE = $(basename $(notdir $1))
- gen_spd_entry.PARAM_NAME = $($(gen_spd_entry.BASE_FILE)_MEM_INIT_FILE_PARAM_NAME)
- gen_spd_entry.MEM_PATH = $($(gen_spd_entry.BASE_FILE)_HIERARCHICAL_PATH)
- gen_spd_entry.SETTINGS = $(strip \
- path=\"$1\" \
- type=\"$2\" \
- $(if $(gen_spd_entry.PARAM_NAME),initParamName=\"$(gen_spd_entry.PARAM_NAME)\") \
- $(if $(gen_spd_entry.MEM_PATH),memoryPath=\"$(gen_spd_entry.MEM_PATH)\") \
- )
- define gen_spd_entry
- $(ECHO) "<file $(gen_spd_entry.SETTINGS) />" >> $3
- endef
- $(MEM_INIT_DESCRIPTOR_FILE).DAT_FILESET := $(patsubst $(dir $(MEM_INIT_DESCRIPTOR_FILE))%,%,$(DAT_FILES))
- $(MEM_INIT_DESCRIPTOR_FILE).HEX_FILESET := $(patsubst $(dir $(MEM_INIT_DESCRIPTOR_FILE))%,%,$(HEX_FILES))
- $(MEM_INIT_DESCRIPTOR_FILE): %.spd: $(MEM_INIT_FILE)
- $(post-process-info)
- @$(MKDIR) $(@D)
- @$(RM) $@
- @$(ECHO) "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
- @$(ECHO) "<simPackage>" >> $@
- @$(foreach dat_file,$($@.DAT_FILESET),$(call gen_spd_entry,$(dat_file),DAT,$@) &&)true
- @$(foreach hex_file,$($@.HEX_FILESET),$(call gen_spd_entry,$(hex_file),HEX,$@) &&)true
- @$(ECHO) "</simPackage>" >> $@
- .DELETE_ON_ERROR: $(MEM_INIT_DESCRIPTOR_FILE)
- $(MEM_INIT_QIP_FILE): %.qip: $(MEM_INIT_FILE)
- $(post-process-info)
- @$(MKDIR) $(@D)
- @$(RM) $@
- @$(ECHO) "set_global_assignment -name SEARCH_PATH $$::quartus(qip_path)" > $@
- .DELETE_ON_ERROR: $(MEM_INIT_QIP_FILE)
|