修正:单写单读从站写入访问时序问题

This commit is contained in:
Ruige Lee
2025-05-16 14:51:52 +08:00
parent f20efe5b25
commit d5db3aebdb

View File

@@ -406,27 +406,27 @@ trait SlaveParserRW{ this: SlaveParserBase =>
when( downRecParser.io.subMsgReq.fire & downRecParser.io.subMsgReq.bits.devIndex === localDevIndex ){
addrw := downRecParser.io.subMsgReq.bits.address
} .elsewhen( isWrite ){
} .elsewhen( isWrite & downRecParser.io.data.fire ){
addrw := addrw + 1.U
}
io.lvds.isEnW := isWrite & isWRReg
io.lvds.isEnW := isWrite & isWRReg & downRecParser.io.data.fire
io.lvds.dataw := downRecParser.io.data.bits
io.sram_w(0).enw := isWrite & isWRSM0
io.sram_w(0).enw := isWrite & isWRSM0 & downRecParser.io.data.fire
io.sram_w(0).addrw := addrw(10,0)
io.sram_w(0).dataw := downRecParser.io.data.bits
io.sram_w(1).enw := isWrite & isWRSM2
io.sram_w(1).enw := isWrite & isWRSM2 & downRecParser.io.data.fire
io.sram_w(1).addrw := addrw(10,0)
io.sram_w(1).dataw := downRecParser.io.data.bits
io.sram_w(2).enw := isWrite & isWRSM4
io.sram_w(2).enw := isWrite & isWRSM4 & downRecParser.io.data.fire
io.sram_w(2).addrw := addrw(10,0)
io.sram_w(2).dataw := downRecParser.io.data.bits
io.sram_w(3).enw := isWrite & isWRSM6
io.sram_w(3).enw := isWrite & isWRSM6 & downRecParser.io.data.fire
io.sram_w(3).addrw := addrw(10,0)
io.sram_w(3).dataw := downRecParser.io.data.bits
@@ -480,7 +480,7 @@ trait SlaveParserRW{ this: SlaveParserBase =>
when( upRecParser.io.subMsgReq.fire & upRecParser.io.subMsgReq.bits.devIndex === localDevIndex ){
addrr := upRecParser.io.subMsgReq.bits.address
} .elsewhen( isRead ){
} .elsewhen( isRead & upRecParser.io.data.fire ){
addrr := addrr + 1.U
}
@@ -513,20 +513,20 @@ trait SlaveParserRW{ this: SlaveParserBase =>
}
io.lvds.isEnR := isRead & isRDReg
io.lvds.isEnR := isRead & isRDReg & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
io.lvds.addrSel := Mux1H(Seq(
isRead -> readSMAddr(10,0)
isWrite -> addrw(10,0)
isRead -> readSMAddr(10,0),
isWrite -> addrw(10,0),
))
assert( ~(isRead & isWrite) )
io.sram_r(0).enr := isRead & isRDSM1
io.sram_r(1).enr := isRead & isRDSM3
io.sram_r(2).enr := isRead & isRDSM5
io.sram_r(3).enr := isRead & isRDSM7
io.sram_r(0).enr := isRead & isRDSM1 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
io.sram_r(1).enr := isRead & isRDSM3 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
io.sram_r(2).enr := isRead & isRDSM5 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
io.sram_r(3).enr := isRead & isRDSM7 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
io.sram_r(0).addrr := readSMAddr(10,0)
io.sram_r(1).addrr := readSMAddr(10,0)