2k fifo抽出到顶层
This commit is contained in:
@@ -8,6 +8,8 @@ class SMUnitIO extends Bundle {
|
|||||||
val enq = Flipped(Decoupled(UInt(8.W)))
|
val enq = Flipped(Decoupled(UInt(8.W)))
|
||||||
val deq = Decoupled(UInt(8.W))
|
val deq = Decoupled(UInt(8.W))
|
||||||
|
|
||||||
|
val sram = Vec(4, new SRAM2kIO)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class SMUnitBase extends Module {
|
abstract class SMUnitBase extends Module {
|
||||||
@@ -21,10 +23,14 @@ abstract class SMUnitBase extends Module {
|
|||||||
|
|
||||||
|
|
||||||
val dataBuf =
|
val dataBuf =
|
||||||
for ( _ <- until 4 ) yield {
|
for ( i <- 0 until 4 ) yield {
|
||||||
Module( new Queue(UInt(8.W), 2048, useSyncReadMem = true) )
|
val mdl = Module( new SRAM2kFifo )
|
||||||
|
io.sram(i) <> mdl.io.sram
|
||||||
|
mdl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
val wPtr = RegInit(0.U((2+1).W))
|
val wPtr = RegInit(0.U((2+1).W))
|
||||||
val rPtr = RegInit(0.U((2+1).W))
|
val rPtr = RegInit(0.U((2+1).W))
|
||||||
|
|
||||||
|
|||||||
52
src/main/scala/backBoard/shin/SRAMFifo.scala
Normal file
52
src/main/scala/backBoard/shin/SRAMFifo.scala
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package BACK
|
||||||
|
|
||||||
|
import chisel3._
|
||||||
|
import chisel3.util._
|
||||||
|
|
||||||
|
class SRAM2kIO extends Bundle {
|
||||||
|
val addrr = Output(UInt(11.W))
|
||||||
|
val addrw = Output(UInt(11.W))
|
||||||
|
|
||||||
|
val dataw = Output( UInt(8.W) )
|
||||||
|
val datar = Input( UInt(8.W) )
|
||||||
|
val enw = Output(Bool())
|
||||||
|
val enr = Output(Bool())
|
||||||
|
}
|
||||||
|
|
||||||
|
class SRAM2kFifoIO extends Bundle {
|
||||||
|
val sram = new SRAM2kIO
|
||||||
|
|
||||||
|
val enq = Flipped(Decoupled(UInt(8.W)))
|
||||||
|
val deq = Decoupled(UInt(8.W))
|
||||||
|
}
|
||||||
|
|
||||||
|
class SRAM2kFifo extends Module {
|
||||||
|
val io: SRAM2kFifoIO = IO(new SRAM2kFifoIO)
|
||||||
|
|
||||||
|
val wptr = RegInit(0.U((11+1).W))
|
||||||
|
val rptr = RegInit(0.U((11+1).W))
|
||||||
|
|
||||||
|
val isFull = (wptr.extract(11) =/= rptr.extract(11)) & (wptr(10,0) === rptr(10,0))
|
||||||
|
val isEmpty = (wptr === rptr)
|
||||||
|
|
||||||
|
|
||||||
|
io.sram.addrr := rptr(10,0)
|
||||||
|
io.sram.addrw := wptr(10,0)
|
||||||
|
|
||||||
|
io.sram.dataw := io.enq.bits
|
||||||
|
io.deq.bits := io.sram.datar
|
||||||
|
io.sram.enw := io.enq.fire
|
||||||
|
io.sram.enr := true.B
|
||||||
|
|
||||||
|
io.enq.ready := ~isFull
|
||||||
|
io.deq.valid := ~isEmpty
|
||||||
|
|
||||||
|
when( io.enq.fire ){
|
||||||
|
wptr := wptr + 1.U
|
||||||
|
}
|
||||||
|
|
||||||
|
when( io.deq.fire ){
|
||||||
|
rptr := rptr + 1.U
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user