我尝试在 Nexys4 DDR 板上启动并运行 Rocket Chip 版本。到目前为止,我设法生成了verilog,综合了设计并附加了一个jtag探针(segger jlink)。可以通过 openocd 和 gdb 访问寄存器和内存。加载一小段 asm 后,内核开始执行,但在第一条执行指令之后直接跳转到 0x0000000。我假设它是陷阱,并且由于陷阱向量未初始化,核心最终为 0。有人知道如何解决这个问题吗?
内核的模拟同时适用于 verilator 和 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>