Я пытаюсь установить и запустить версию Rocket Chip на плате Nexys4 DDR. Пока мне удалось сгенерировать verilog, синтезировать дизайн и прикрепить зонд jtag (segger jlink). Доступ к регистрам и памяти можно получить через openocd и gdb. После загрузки небольшого фрагмента asm ядро начинает выполнение, но сразу после первой выполненной инструкции переходит на 0x0000000. Я предполагаю, что это ловушки, и поскольку вектор ловушек не инициализирован, ядро заканчивается на 0. Кто-нибудь знает, как это исправить?
Симуляция ядра работает как с верилятором, так и с vcs. В обоих случаях ядро без проблем выполняет три инструкции asm.
Протестированный код asm:
.section .text
.global _start
_start:
add x0,x0,x0
add x0,x0,x0
j _start
связано с этим скриптом:
SECTIONS
{
. = 0x80000000;
.text : { *(.text) }
}
Дамп объекта:
Disassembly of section .text:
0000000080000000 <_start>:
80000000: 00000033 add zero,zero,zero
80000004: 00000033 add zero,zero,zero
80000008: ff9ff06f j 80000000 <_start>