Queue() 函数在 Chisel 中有什么作用?
What does Queue() function do in Chisel?
我正在阅读火箭芯片的源代码,在 rocket/src/main/scala/
的 rocc.scala
文件中有一个使用 rocc
的示例 AccumulatorExample
。代码的第一部分有一个函数 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)
谢谢
Queue 是一个提供硬件队列的模块。 Circle-talk 我知道,但这是我能提供的最好的。希望这可以帮助!您的代码看起来像是将队列的源设置为 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
我正在阅读火箭芯片的源代码,在 rocket/src/main/scala/
的 rocc.scala
文件中有一个使用 rocc
的示例 AccumulatorExample
。代码的第一部分有一个函数 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)
谢谢
Queue 是一个提供硬件队列的模块。 Circle-talk 我知道,但这是我能提供的最好的。希望这可以帮助!您的代码看起来像是将队列的源设置为 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