Что делает функция Queue () в Chisel?

Я читал исходный код ракетного чипа, в rocc.scala файле в 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)

Спасибо


person Moriss    schedule 21.05.2015    source источник


Ответы (1)


Очередь - это модуль, обеспечивающий аппаратную очередь. Я знаю, что болтать по кругу, но это лучшее, что я могу сказать. Надеюсь это поможет! Ваш код выглядит так, как будто он устанавливает источник очереди как 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
person Nick    schedule 21.05.2015