Shift Queue
一图胜千言Implements the same interface as chisel3.util.Queue, but uses a shift register internally. It is less energy efficient whenever the queue has more than one entry populated, but is faster on the dequeue side.It is efficient for usually-empty flow-through queues.
- 接口与chisel3.util.Queue一致,但是内部实现使用的是移位寄存器。
- 当队列项数超过一项时,能效会比较低,但是出队更快
- 当队列总是为空时效率比较高
API介绍
class ShiftQueue[T <: Data](gen: T,
val entries: Int,
pipe: Boolean = false,
flow: Boolean = false)
- entries:队列的深度
- 队列中数据项的类型
1. 默认模式 (pipe=false, flow=false)
当Queue不满时才能入队
io.enq.ready := !valid(entries-1)
2. pipe 模式(pipe=true, flow=false)
pipe模式可以更充分地利用Queue
即使Queue已满,只要队头能出队,队尾就能入队
if (pipe) {
when (io.deq.ready) { io.enq.ready := true.B }
}
3. flow 模式(pipe=false, flow=true)
flow模式是为了尽快将数据送往下一模块
如果Queue为空,可以直接将数据送往下一模块
if (pipe) {
when (io.deq.ready) { io.enq.ready := true.B }
}
Demo
TODO:待补充:-p
网友评论