|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
请教各位大大,我用RocketchipGenerator生成boom核的CPU,连接了AXI、X2P和UART简单跑一下,生成CPU之前我改过了bootrom,代码如下:
- li s0, DRAM_BASE
- csrr a0, mhartid
- // la a1, _dtb
- jr s0
- .word 0
- .word 0
复制代码 运行时jr s0没有执行,前面两条都执行了,请问各位这是为什么呀,本人菜鸟,跪谢!!!
////////////////////////////////////////////////////////////////////////////////////////////////
后来我查看了RocketchipGenerator中生成bootrom的相关代码:
- object GenerateBootROM {
- def apply(p: Parameters, address: BigInt, configString: String) = {
- val romdata = Files.readAllBytes(Paths.get(p(BootROMFile)))
- val rom = ByteBuffer.wrap(romdata)
- rom.order(ByteOrder.LITTLE_ENDIAN)
- require(address == address.toInt)
- val configStringAddr = address.toInt + rom.capacity
- //require(rom.getInt(12) == 0,
- // "Config string address position should not be occupied by code")
- //rom.putInt(12, configStringAddr)
- rom.array() ++ (configString.getBytes.toSeq)
- }
- }
复制代码
请问被注释掉的三行是什么意思呢?因为这三行会把我自己改动的bootrom内容覆盖掉,所以注释掉了,这个和跳转指令不执行有关系吗?
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
原本的bootrom代码是这样子的:
- .text
- .global _start
- _start:
- // This boot ROM doesn't know about any boot devices, so it just spins,
- // waiting for the debugger to load a program and change the PC.
- j _start // reset vector
- .word 0 // reserved
- .word 0 // reserved
- .word 0 // pointer to config string
- .word 0 // default trap vector
- .word 0
- .word 0
- .word 0
复制代码 |
|