2k fifo抽出到顶层
This commit is contained in:
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