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]

Я пробовал и другие способы. Кто-нибудь может предложить?

0 ответов

Другие вопросы по тегам