SRecord ширина памяти до 64 в выводе файла Vmem
Я хочу иметь 64-битную ширину памяти для формата VMEM в SRecord вместо 32-битной по умолчанию, в руководстве SRecord сказано:
−VMem [ширина памяти] Будет записан файл формата Verilog VMEM. Ширина памяти может быть 8, 16, 32, 64 или 128 бит; по умолчанию 32, если не указано. (Описание этого формата файла см. в srec_vmem(5).) Вам может понадобиться использовать фильтр -byte-swap, чтобы получить желаемый порядок байтов.
Я хочу иметь 64-битную ширину памяти, но я не знаю, где мне добавить эту опцию. Ниже приведен мой make-файл:
SW_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
COMPILER ?= gcc
ifeq ($(COMPILER),gcc)
RISCV_CC := riscv32-unknown-elf-gcc
RISCV_DUMP := riscv32-unknown-elf-objdump
RISCV_OBCP := riscv32-unknown-elf-objcopy
ARCH := rv32imv
LD_SCRIPT := $(SW_DIR)/link.ld
else ifeq ($(COMPILER),llvm)
RISCV_CC := /opt/llvm/install/bin/clang
RISCV_DUMP := /opt/llvm/install/bin/llvm-objdump
RISCV_OBCP := /opt/llvm/install/bin/llvm-objcopy
ARCH := rv32imzve32x
CC_SPECIFIC_OPTIONS := -fuse-ld=lld
LD_SCRIPT := $(SW_DIR)/lld_link.ld
endif
RISCV_FLAGS := -march=$(ARCH) -mabi=ilp32 -static -mcmodel=medany \
-fvisibility=hidden -nostdlib -nostartfiles -Wall \
$(CC_SPECIFIC_OPTIONS)
CFLAGS := $(CFLAGS) -I$(SW_DIR)/lib/
PROG ?= code8
OBJ ?= code8.o
# add crt0 to object files
RISCV_OBJ := $(SW_DIR)/crt0.o $(OBJ) $(SW_DIR)/lib/uart.o $(SW_DIR)/lib/runtime.o
all: $(PROG).vmem
dump: $(PROG).elf
$(RISCV_DUMP) -D $<
$(PROG).elf: $(RISCV_OBJ) $(LD_SCRIPT)
$(RISCV_CC) $(RISCV_FLAGS) -T $(LD_SCRIPT) $(LDFLAGS) $(RISCV_OBJ) -o $@
%.o: %.c
$(RISCV_CC) $(RISCV_FLAGS) $(CFLAGS) -c -o $@ $<
%.o: %.S
$(RISCV_CC) $(RISCV_FLAGS) $(ASFLAGS) -c -o $@ $<
# currently unusable due to problems with byte order
# (see https://github.com/riscv/riscv-tools/issues/168#issuecomment-554973539)
#%.vmem: %.elf
# $(OBJCOPY) -O verilog --verilog-data-width 4 $^ $@
# workaround (requires srecord):
# note: start address must be reset manually because it is lost in bin file
%.vmem: %.bin
srec_cat $^ -binary -offset 0x0000 -byte-swap 4 -o $@ -vmem
%.bin: %.elf
$(RISCV_OBCP) -O binary $^ $@
clean:
rm -f *.o *.elf *.bin *.vmem
include $(SW_DIR)/toolchain.mk
Я пытался сделать это так, но выдает ошибку (опция error isunknown):
%.vmem: %.bin
srec_cat $^ -binary -offset 0x0000 -byte-swap 4 -o $@ -vmem[64]
Я пробовал и другие способы. Кто-нибудь может предложить?