Queue()函数在Chisel中做了什么?

时间:2015-05-21 17:43:09

标签: riscv chisel

我正在阅读火箭芯片的源代码,在rocc.scala的{​​{1}}文件中,rocket/src/main/scala/有一个示例AccumulatorExample来使用rocc。在代码的第一部分有一个函数Queue(),我无法弄清楚它在做什么?

   val n = 4
   val regfile = Mem(UInt(width = params(XprLen)), n)
   val busy = Vec.fill(n){Reg(init=Bool(false))}

  val cmd = Queue(io.cmd)
  val funct = cmd.bits.inst.funct
  val addr = cmd.bits.inst.rs2(log2Up(n)-1,0)
  val doWrite = funct === UInt(0)
  val doRead = funct === UInt(1)
  val doLoad = funct === UInt(2)
  val doAccum = funct === UInt(3)
  val memRespTag = io.mem.resp.bits.tag(log2Up(n)-1,0)

由于

1 个答案:

答案 0 :(得分:2)

Queue是一个提供硬件队列的模块。圆圈说话我知道,但它是我能给予的最好的。希望这可以帮助!您的代码看起来像是将队列源设置为io.cmd。

Constructor:

Queue(enq:DecoupledIO, entries:Int)
enq DecoupledIO source for the queue
entries size of queue

Interface:

.io.enq Decoupled | IO source (flipped)
.io.deq Decoupled  | IO sink
.io.count UInt  | count of elements in the queue