放弃当拍握手策略
This commit is contained in:
@@ -159,21 +159,21 @@ class BackSysImp(outer: BackSys) extends LazyModuleImp(outer) with HasBackParame
|
|||||||
gpio.io.mem.valid := pico.io.mem.valid & pico.io.mem.addr(13,12) === "b10".U & ~pico.io.mem.instr
|
gpio.io.mem.valid := pico.io.mem.valid & pico.io.mem.addr(13,12) === "b10".U & ~pico.io.mem.instr
|
||||||
|
|
||||||
pico.io.mem.ready :=
|
pico.io.mem.ready :=
|
||||||
Mux( pico.io.mem.instr, sram.io.mem.ready,
|
// Mux( pico.io.mem.instr, sram.io.mem.ready,
|
||||||
Mux1H(Seq(
|
Mux1H(Seq(
|
||||||
(pico.io.mem.addr(13,12) === "b00".U ) -> sram.io.mem.ready,
|
(pico.io.mem.addr(13,12) === "b00".U ) -> sram.io.mem.ready,
|
||||||
(pico.io.mem.addr(13,12) === "b01".U ) -> cdr.io.mem.ready,
|
(pico.io.mem.addr(13,12) === "b01".U ) -> cdr.io.mem.ready,
|
||||||
(pico.io.mem.addr(13,12) === "b10".U ) -> gpio.io.mem.ready,
|
(pico.io.mem.addr(13,12) === "b10".U ) -> gpio.io.mem.ready,
|
||||||
))
|
))
|
||||||
)
|
// )
|
||||||
pico.io.mem.rdata :=
|
pico.io.mem.rdata :=
|
||||||
Mux( pico.io.mem.instr, sram.io.mem.rdata,
|
// Mux( pico.io.mem.instr, sram.io.mem.rdata,
|
||||||
Mux1H(Seq(
|
Mux1H(Seq(
|
||||||
(pico.io.mem.addr(13,12) === "b00".U ) -> sram.io.mem.rdata,
|
(pico.io.mem.addr(13,12) === "b00".U ) -> sram.io.mem.rdata,
|
||||||
(pico.io.mem.addr(13,12) === "b01".U ) -> cdr.io.mem.rdata,
|
(pico.io.mem.addr(13,12) === "b01".U ) -> cdr.io.mem.rdata,
|
||||||
(pico.io.mem.addr(13,12) === "b10".U ) -> gpio.io.mem.rdata,
|
(pico.io.mem.addr(13,12) === "b10".U ) -> gpio.io.mem.rdata,
|
||||||
))
|
))
|
||||||
)
|
// )
|
||||||
|
|
||||||
sram.io.mem.wdata := pico.io.mem.wdata
|
sram.io.mem.wdata := pico.io.mem.wdata
|
||||||
cdr.io.mem.wdata := pico.io.mem.wdata
|
cdr.io.mem.wdata := pico.io.mem.wdata
|
||||||
|
|||||||
@@ -41,16 +41,14 @@ class SimpleSRAM()(implicit p: Parameters) extends BackModule{
|
|||||||
// } .otherwise { io.mem.rdata := Cat( mem(io.mem.addr(11,2)).reverse ) }
|
// } .otherwise { io.mem.rdata := Cat( mem(io.mem.addr(11,2)).reverse ) }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
val isReadAck = RegInit(false.B)
|
val isAck = RegInit(false.B)
|
||||||
when( io.mem.fire ){
|
when( io.mem.fire ){
|
||||||
isReadAck := false.B
|
isAck := false.B
|
||||||
} .elsewhen( io.mem.valid & io.mem.wstrb === 0.U ){
|
} .elsewhen( io.mem.valid & ~isAck ){
|
||||||
isReadAck := true.B
|
isAck := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
io.mem.ready :=
|
io.mem.ready := isAck
|
||||||
( io.mem.wstrb =/= 0.U & true.B ) |
|
|
||||||
( io.mem.wstrb === 0.U & isReadAck )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ trait TLCDRRx{ this: TLCDRBase =>
|
|||||||
|
|
||||||
rxFifo.reset := reset.asBool | isTLWriteSoftReset
|
rxFifo.reset := reset.asBool | isTLWriteSoftReset
|
||||||
|
|
||||||
rxFifo.io.deq.ready := isTLReadRxFifo
|
// rxFifo.io.deq.ready := isTLReadRxFifo
|
||||||
|
|
||||||
|
|
||||||
when( isTLWriteSoftReset ){
|
when( isTLWriteSoftReset ){
|
||||||
@@ -217,9 +217,37 @@ class TLCDR()(implicit p: Parameters) extends TLCDRBase() with TLCDRTx with TLCD
|
|||||||
dirSel := io.mem.wdata
|
dirSel := io.mem.wdata
|
||||||
}
|
}
|
||||||
|
|
||||||
io.mem.ready :=
|
val isAck = RegInit(false.B)
|
||||||
( io.mem.wstrb =/= 0.U & txFifo.io.enq.ready) |
|
val rdata = Reg(UInt(32.W))
|
||||||
( io.mem.wstrb === 0.U & Mux( io.mem.addr(4,0) === "h1c".U, rxFifo.io.deq.valid, true.B ) )
|
|
||||||
|
when( io.mem.fire ){
|
||||||
|
isAck := false.B
|
||||||
|
} .elsewhen( io.mem.valid & ~isAck ){
|
||||||
|
when( io.mem.wstrb =/= 0.U & txFifo.io.enq.ready ){
|
||||||
|
isAck := true.B
|
||||||
|
} .otherwise{
|
||||||
|
when( io.mem.addr(4,0) === "h1c".U & rxFifo.io.deq.valid ){
|
||||||
|
isAck := true.B
|
||||||
|
rdata := rxFifo.io.deq.bits
|
||||||
|
|
||||||
|
} .elsewhen( io.mem.addr(4,0) === "h18".U ){
|
||||||
|
isAck := true.B
|
||||||
|
rdata := rxLen
|
||||||
|
} .elsewhen( io.mem.addr(4,0) === "h0".U ){
|
||||||
|
isAck := true.B
|
||||||
|
rdata := Cat( isRxValid, isRxError, isTxBusy, isTxFull, isTxError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
rxFifo.io.deq.ready := io.mem.valid & ~isAck & io.mem.addr(4,0) === "h1c".U & rxFifo.io.deq.valid
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
io.mem.ready := isAck
|
||||||
|
// ( io.mem.wstrb =/= 0.U & txFifo.io.enq.ready) |
|
||||||
|
// ( io.mem.wstrb === 0.U & Mux( io.mem.addr(4,0) === "h1c".U, rxFifo.io.deq.valid, true.B ) )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -229,12 +257,12 @@ class TLCDR()(implicit p: Parameters) extends TLCDRBase() with TLCDRTx with TLCD
|
|||||||
io.interrupt(3) := intRxEnd
|
io.interrupt(3) := intRxEnd
|
||||||
|
|
||||||
|
|
||||||
io.mem.rdata :=
|
io.mem.rdata := rdata
|
||||||
Mux1H(Seq(
|
// Mux1H(Seq(
|
||||||
isTLReadStatus -> Cat( isRxValid, isRxError, isTxBusy, isTxFull, isTxError),
|
// isTLReadStatus -> ,
|
||||||
isTLReadRxLen -> rxLen,
|
// isTLReadRxLen -> rxLen,
|
||||||
isTLReadRxFifo -> rxFifo.io.deq.bits
|
// isTLReadRxFifo -> rxFifo.io.deq.bits
|
||||||
))
|
// ))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user