2k fifo抽出到顶层

This commit is contained in:
Ruige Lee
2025-04-17 10:55:00 +08:00
parent 4962e217dd
commit 19a23c9b16
2 changed files with 60 additions and 2 deletions

View File

@@ -8,6 +8,8 @@ class SMUnitIO extends Bundle {
val enq = Flipped(Decoupled(UInt(8.W)))
val deq = Decoupled(UInt(8.W))
val sram = Vec(4, new SRAM2kIO)
}
abstract class SMUnitBase extends Module {
@@ -21,10 +23,14 @@ abstract class SMUnitBase extends Module {
val dataBuf =
for ( _ <- until 4 ) yield {
Module( new Queue(UInt(8.W), 2048, useSyncReadMem = true) )
for ( i <- 0 until 4 ) yield {
val mdl = Module( new SRAM2kFifo )
io.sram(i) <> mdl.io.sram
mdl
}
val wPtr = RegInit(0.U((2+1).W))
val rPtr = RegInit(0.U((2+1).W))

View 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
}
}