优化core的tl接口,两拍握手,指令速度从5拍一条指令变为4拍一条指令
This commit is contained in:
@@ -34,27 +34,27 @@ class Picorv32_tl(edge: TLEdgeOut)(implicit p: Parameters) extends BackModule{
|
|||||||
core.io.irq := io.irq
|
core.io.irq := io.irq
|
||||||
io.eoi := core.io.eoi
|
io.eoi := core.io.eoi
|
||||||
|
|
||||||
val tlStateNext = Wire( UInt(2.W) )
|
// val tlStateNext = Wire( UInt(2.W) )
|
||||||
val tlStateCurr = RegNext(tlStateNext, 0.U)
|
// val tlStateCurr = RegNext(tlStateNext, 0.U)
|
||||||
|
|
||||||
tlStateNext := Mux1H(Seq(
|
// tlStateNext := Mux1H(Seq(
|
||||||
(tlStateCurr === 0.U) -> Mux( core.io.mem_valid, 1.U, 0.U ), //IDLE
|
// (tlStateCurr === 0.U) -> Mux( core.io.mem_valid, 1.U, 0.U ), //IDLE
|
||||||
(tlStateCurr === 1.U) -> Mux( io.tla.fire, 2.U, 1.U ), //A FIRE
|
// (tlStateCurr === 1.U) -> Mux( io.tla.fire, 2.U, 1.U ), //A FIRE
|
||||||
(tlStateCurr === 2.U) -> Mux( io.tld.fire, 0.U, 2.U ), //D FIRE
|
// (tlStateCurr === 2.U) -> Mux( io.tld.fire, 0.U, 2.U ), //D FIRE
|
||||||
))
|
// ))
|
||||||
|
|
||||||
val tlaValid = RegInit(false.B)
|
val isTlaValidAck = RegInit(true.B)
|
||||||
|
|
||||||
when( io.tla.fire ){
|
when( io.tla.fire ){
|
||||||
tlaValid := false.B
|
isTlaValidAck := false.B
|
||||||
} .elsewhen( tlStateCurr === 0.U & tlStateNext === 1.U ){
|
} .elsewhen( io.tld.fire ){
|
||||||
tlaValid := true.B
|
isTlaValidAck := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
core.io.mem_ready := io.tld.fire
|
core.io.mem_ready := io.tld.fire
|
||||||
core.io.mem_rdata := io.tld.bits.data
|
core.io.mem_rdata := io.tld.bits.data
|
||||||
io.tld.ready := true.B
|
io.tld.ready := true.B
|
||||||
io.tla.valid := tlaValid
|
io.tla.valid := isTlaValidAck & core.io.mem_valid
|
||||||
|
|
||||||
when( core.io.mem_wstrb.orR ){
|
when( core.io.mem_wstrb.orR ){
|
||||||
io.tla.bits :=
|
io.tla.bits :=
|
||||||
|
|||||||
Reference in New Issue
Block a user