diff options
Diffstat (limited to 'bootrom/bram.mk')
-rw-r--r-- | bootrom/bram.mk | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/bootrom/bram.mk b/bootrom/bram.mk new file mode 100644 index 0000000..2c7875a --- /dev/null +++ b/bootrom/bram.mk @@ -0,0 +1,79 @@ +ifndef _BRAM_MK +_BRAM_MK := # defined + +BRAM_ADDR := 0x1000 + +BASEDIR := $(dir $(lastword $(MAKEFILE_LIST))) +BASEDIR := $(BASEDIR:/=) +DATADIR := $(BASEDIR)/common + +LDSCRIPT := $(DATADIR)/bram.ld +MEMSCRIPT := $(DATADIR)/mem.awk + +BITFILEDIR := $(BASEDIR)/../bitfile +BITFILE_VERSION ?= 0-1 + +BITFILE := $(BITFILEDIR)/freedom-e300-arty-$(BITFILE_VERSION).bit +CFGFILE := $(BITFILEDIR)/FreedomE-$(BITFILE_VERSION).cfg +MEMINFO := $(BITFILEDIR)/freedom-e300-arty-$(BITFILE_VERSION).mmi +BRAM_INST := `cat $(BITFILEDIR)/freedom-e300-arty-$(BITFILE_VERSION)-bootrom.txt` + +XLEN = 32 +BRAM_WIDTH=64 + +all: mcs + +$(BITFILE): + @echo "In order to get Version $(BITFILE_VERSION) of the bitfile:" + @echo "" + @cat $(BITFILEDIR)/README.md + +CC := ../../toolchain/bin/riscv$(XLEN)-unknown-elf-gcc +UPDATEMEM ?= updatemem + +CDEFINES += -DCFG_STRING=\"$(CFGFILE)\" + +CFLAGS ?= -m$(XLEN) -O2 -std=c11 -pedantic -Wall \ + -nostartfiles -fno-common -mcmodel=medany -g \ + $(CDEFINES) + +LDFLAGS ?= -T$(LDSCRIPT) -static -nostdlib +OBJCOPY ?= objcopy +elf: $(PROG).elf +hex: $(PROG).hex +mem: $(PROG).impl.mem +mcs: $(PROG).mcs + +$(PROG).elf: $(SRCS) $(EXTRAS) $(CFGFILE) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRCS) + +$(PROG).hex: $(PROG).elf + $(OBJCOPY) -S -O verilog --change-addresses -$(BRAM_ADDR) $< $@ + +# Manually reverse the byte order due to limitations in UpdateMEM. +# Per UG898: "When UpdateMEM inputs data, it takes data from data input +# files in Bit Lane sized chunks from the most right value first to the +# left most. For example, if the first 64 bits of input data are +# 0xB47DDE02826A8419 then the value 0xB4 is the first value to be set +# into a Block RAM." +$(PROG).impl.mem: $(PROG).hex $(MEMSCRIPT) + awk -v WIDTH=$(BRAM_WIDTH) -v REVERSE=1 -f $(MEMSCRIPT) $< > $@ + +.PHONY: $(PROG).mcs +$(PROG).mcs : $(BITFILE) $(PROG).impl.mem + @echo "" + @echo "" + @echo "TO COMPLETE THE BUILD OF $(PROG).mcs, " + @echo "ENTER THE FOLLOWING IN THE VIVADO TCL WINDOW:" + @echo "" + @echo "cd `pwd`" + @echo "" + @echo "exec $(UPDATEMEM) -meminfo $(MEMINFO) -data $(PROG).impl.mem -proc $(BRAM_INST) -bit $(BITFILE) --out $(PROG).bit -force" + @echo "" + @echo "write_cfgmem -format mcs -interface spix4 -size 16 -loadbit {up 0x0 $(PROG).bit} -file $(PROG).mcs -force" + @echo "" + +clean: + rm -f -- $(foreach ext,elf hex impl.mem bit mcs,$(PROG).$(ext)) + +endif # _BRAM_MK |