fix(mem): addr错误
This commit is contained in:
parent
f6412b0e8c
commit
ff56c013ef
|
@ -56,6 +56,7 @@ class DataMemoryAccess(implicit val config: CpuConfig) extends Module {
|
||||||
val valid = io.memoryUnit.in.mem_en
|
val valid = io.memoryUnit.in.mem_en
|
||||||
val src1 = io.memoryUnit.in.src_info.src1_data
|
val src1 = io.memoryUnit.in.src_info.src1_data
|
||||||
val src2 = io.memoryUnit.in.src_info.src2_data
|
val src2 = io.memoryUnit.in.src_info.src2_data
|
||||||
|
val imm = io.memoryUnit.in.info.imm
|
||||||
val func = io.memoryUnit.in.info.op
|
val func = io.memoryUnit.in.info.op
|
||||||
val inst = io.memoryUnit.in.info.inst
|
val inst = io.memoryUnit.in.info.inst
|
||||||
|
|
||||||
|
@ -105,9 +106,9 @@ class DataMemoryAccess(implicit val config: CpuConfig) extends Module {
|
||||||
switch(state) {
|
switch(state) {
|
||||||
is(s_idle) { // calculate address
|
is(s_idle) { // calculate address
|
||||||
lsExe.in.mem_en := io.memoryUnit.in.mem_en && !atomReq
|
lsExe.in.mem_en := io.memoryUnit.in.mem_en && !atomReq
|
||||||
lsExe.in.mem_addr := src1 + src2
|
lsExe.in.mem_addr := src1 + imm
|
||||||
lsExe.in.info.op := func
|
lsExe.in.info.op := func
|
||||||
lsExe.in.wdata := io.memoryUnit.in.src_info.src2_data
|
lsExe.in.wdata := src2
|
||||||
io.memoryUnit.out.ready := lsExe.dataMemory.in.ready || scInvalid
|
io.memoryUnit.out.ready := lsExe.dataMemory.in.ready || scInvalid
|
||||||
state := s_idle
|
state := s_idle
|
||||||
|
|
||||||
|
@ -164,7 +165,7 @@ class DataMemoryAccess(implicit val config: CpuConfig) extends Module {
|
||||||
lsExe.in.mem_en := true.B
|
lsExe.in.mem_en := true.B
|
||||||
lsExe.in.mem_addr := src1
|
lsExe.in.mem_addr := src1
|
||||||
lsExe.in.info.op := Mux(atomWidthD, LSUOpType.sd, LSUOpType.sw)
|
lsExe.in.info.op := Mux(atomWidthD, LSUOpType.sd, LSUOpType.sw)
|
||||||
lsExe.in.wdata := io.memoryUnit.in.src_info.src2_data
|
lsExe.in.wdata := src2
|
||||||
io.memoryUnit.out.ready := lsExe.dataMemory.in.ready
|
io.memoryUnit.out.ready := lsExe.dataMemory.in.ready
|
||||||
when(lsExe.dataMemory.in.ready) {
|
when(lsExe.dataMemory.in.ready) {
|
||||||
state := s_idle;
|
state := s_idle;
|
||||||
|
@ -188,5 +189,6 @@ class DataMemoryAccess(implicit val config: CpuConfig) extends Module {
|
||||||
io.memoryUnit.out.ex.exception(storeAddrMisaligned) := lsExe.out.storeAddrMisaligned
|
io.memoryUnit.out.ex.exception(storeAddrMisaligned) := lsExe.out.storeAddrMisaligned
|
||||||
io.memoryUnit.out.ex.exception(loadAccessFault) := lsExe.out.loadAccessFault
|
io.memoryUnit.out.ex.exception(loadAccessFault) := lsExe.out.loadAccessFault
|
||||||
io.memoryUnit.out.ex.exception(storeAccessFault) := lsExe.out.storeAccessFault
|
io.memoryUnit.out.ex.exception(storeAccessFault) := lsExe.out.storeAccessFault
|
||||||
|
io.memoryUnit.out.ex.tval := io.dataMemory.out.addr
|
||||||
io.memoryUnit.out.rdata := lsExe.out.rdata
|
io.memoryUnit.out.rdata := lsExe.out.rdata
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue