美文网首页
Rocket Chip Utils: ShiftQueue

Rocket Chip Utils: ShiftQueue

作者: gs要加油呀 | 来源:发表于2020-01-12 20:34 被阅读0次

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

相关文章

网友评论

      本文标题:Rocket Chip Utils: ShiftQueue

      本文链接:https://www.haomeiwen.com/subject/lxbbactx.html