@@ -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,14 +41,16 @@ 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 isAck = RegInit(false.B)
|
val isReadAck = RegInit(false.B)
|
||||||
when( io.mem.fire ){
|
when( io.mem.fire ){
|
||||||
isAck := false.B
|
isReadAck := false.B
|
||||||
} .elsewhen( io.mem.valid & ~isAck ){
|
} .elsewhen( io.mem.valid & io.mem.wstrb === 0.U ){
|
||||||
isAck := true.B
|
isReadAck := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
io.mem.ready := isAck
|
io.mem.ready :=
|
||||||
|
( 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,37 +217,9 @@ class TLCDR()(implicit p: Parameters) extends TLCDRBase() with TLCDRTx with TLCD
|
|||||||
dirSel := io.mem.wdata
|
dirSel := io.mem.wdata
|
||||||
}
|
}
|
||||||
|
|
||||||
val isAck = RegInit(false.B)
|
io.mem.ready :=
|
||||||
val rdata = Reg(UInt(32.W))
|
( 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 ) )
|
||||||
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 ) )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -257,12 +229,12 @@ class TLCDR()(implicit p: Parameters) extends TLCDRBase() with TLCDRTx with TLCD
|
|||||||
io.interrupt(3) := intRxEnd
|
io.interrupt(3) := intRxEnd
|
||||||
|
|
||||||
|
|
||||||
io.mem.rdata := rdata
|
io.mem.rdata :=
|
||||||
// Mux1H(Seq(
|
Mux1H(Seq(
|
||||||
// isTLReadStatus -> ,
|
isTLReadStatus -> Cat( isRxValid, isRxError, isTxBusy, isTxFull, isTxError),
|
||||||
// isTLReadRxLen -> rxLen,
|
isTLReadRxLen -> rxLen,
|
||||||
// isTLReadRxFifo -> rxFifo.io.deq.bits
|
isTLReadRxFifo -> rxFifo.io.deq.bits
|
||||||
// ))
|
))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user