我正在尝试在 CSR 中创建一个新寄存器。到目前为止,我可以成功地从测试程序向它写入值,但是当我尝试写入 32 位或更多位的东西时,火箭芯片会添加前导 1。例如,如果我尝试将其编写0x80000000
为0xffffffff800000000
. 我已经追踪了数据路径,并且数据进入 CSR 时已经损坏。任何关于实际情况的指导都会很棒。
下面是我如何实现寄存器。
val addr_PCStart = 0x800
val reg_PCStart = RegInit(0.U(csrFile.vaddrBitsExtended.W))
val addr_PCEnd = addr_PCStart + 1
val reg_PCEnd = RegInit(0.U(csrFile.vaddrBitsExtended.W))
csrFile.read_mapping += addr_PCStart -> reg_PCStart
csrFile.read_mapping += addr_PCEnd -> reg_PCEnd
when(csrFile.csr_wen) {
when (csrFile.decoded_addr(addr_PCStart)) {
reg_PCStart := csrFile.wdata(csrFile.vaddrBitsExtended-1,0)
}
when(csrFile.decoded_addr(addr_PCEnd)) {
reg_PCEnd := csrFile.wdata(csrFile.vaddrBitsExtended-1,0)
}
}