修正:单写单读从站写入访问时序问题
This commit is contained in:
@@ -406,27 +406,27 @@ trait SlaveParserRW{ this: SlaveParserBase =>
|
|||||||
|
|
||||||
when( downRecParser.io.subMsgReq.fire & downRecParser.io.subMsgReq.bits.devIndex === localDevIndex ){
|
when( downRecParser.io.subMsgReq.fire & downRecParser.io.subMsgReq.bits.devIndex === localDevIndex ){
|
||||||
addrw := downRecParser.io.subMsgReq.bits.address
|
addrw := downRecParser.io.subMsgReq.bits.address
|
||||||
} .elsewhen( isWrite ){
|
} .elsewhen( isWrite & downRecParser.io.data.fire ){
|
||||||
addrw := addrw + 1.U
|
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.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).addrw := addrw(10,0)
|
||||||
io.sram_w(0).dataw := downRecParser.io.data.bits
|
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).addrw := addrw(10,0)
|
||||||
io.sram_w(1).dataw := downRecParser.io.data.bits
|
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).addrw := addrw(10,0)
|
||||||
io.sram_w(2).dataw := downRecParser.io.data.bits
|
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).addrw := addrw(10,0)
|
||||||
io.sram_w(3).dataw := downRecParser.io.data.bits
|
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 ){
|
when( upRecParser.io.subMsgReq.fire & upRecParser.io.subMsgReq.bits.devIndex === localDevIndex ){
|
||||||
addrr := upRecParser.io.subMsgReq.bits.address
|
addrr := upRecParser.io.subMsgReq.bits.address
|
||||||
} .elsewhen( isRead ){
|
} .elsewhen( isRead & upRecParser.io.data.fire ){
|
||||||
addrr := addrr + 1.U
|
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(
|
io.lvds.addrSel := Mux1H(Seq(
|
||||||
isRead -> readSMAddr(10,0)
|
isRead -> readSMAddr(10,0),
|
||||||
isWrite -> addrw(10,0)
|
isWrite -> addrw(10,0),
|
||||||
))
|
))
|
||||||
assert( ~(isRead & isWrite) )
|
assert( ~(isRead & isWrite) )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
io.sram_r(0).enr := isRead & isRDSM1
|
io.sram_r(0).enr := isRead & isRDSM1 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
|
||||||
io.sram_r(1).enr := isRead & isRDSM3
|
io.sram_r(1).enr := isRead & isRDSM3 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
|
||||||
io.sram_r(2).enr := isRead & isRDSM5
|
io.sram_r(2).enr := isRead & isRDSM5 & ( upRecParser.io.subMsgReq.fire | upRecParser.io.data.fire )
|
||||||
io.sram_r(3).enr := isRead & isRDSM7
|
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(0).addrr := readSMAddr(10,0)
|
||||||
io.sram_r(1).addrr := readSMAddr(10,0)
|
io.sram_r(1).addrr := readSMAddr(10,0)
|
||||||
|
|||||||
Reference in New Issue
Block a user