Chisel 第三章中TransitName的目的是什么?

Chisel 第三章中TransitName的目的是什么?,chisel,Chisel,在3中队列的实现中 对象队列返回TransitName: object Queue { /** Create a queue and supply a DecoupledIO containing the product. */ @chiselName def apply[T <: Data]( enq: ReadyValidIO[T], entries: Int = 2, pipe: Boolean = false, flow:

在3中队列的实现中

对象队列返回TransitName:

object Queue
{
  /** Create a queue and supply a DecoupledIO containing the product. */
  @chiselName
  def apply[T <: Data](
      enq: ReadyValidIO[T],
      entries: Int = 2,
      pipe: Boolean = false,
      flow: Boolean = false): DecoupledIO[T] = {
    if (entries == 0) {
      val deq = Wire(new DecoupledIO(enq.bits))
      deq.valid := enq.valid
      deq.bits := enq.bits
      enq.ready := deq.ready
      deq
    } else {
      require(entries > 0)
      val q = Module(new Queue(chiselTypeOf(enq.bits), entries, pipe, flow))
      q.io.enq.valid := enq.valid // not using <> so that override is allowed
      q.io.enq.bits := enq.bits
      enq.ready := q.io.enq.ready
      TransitName(q.io.deq, q)
    }
}
对象队列
{
/**创建一个队列并提供一个包含产品的解耦*/
@凿子名
def应用[T 0)
val q=模块(新队列(类型(enq.bits)、条目、管道、流))
q、 io.enq.valid:=enq.valid//未使用,因此允许重写
q、 io.enq.bits:=enq.bits
enq.ready:=q.io.enq.ready
TransitName(q.io.deq,q)
}
}
我无法理解TransitName中的内容,因为我无法理解其源代码的含义


在位于
TransitName(q.io.deq,q)
的行中,我认为只返回q.io.deq(而不是TransitName),它工作正常。但是为什么我们需要TransitName

TransitName
正在帮助根据用户指定的内容命名创建的
队列
模块。
队列
工厂在内部创建一个新的
队列
对象,但只返回其IO的一部分。凿子知道如何命名IO b基于用户val的名称(或通过一些名称覆盖)。但是,凿子不知道队列的名称。为了提高下游表示(FIRRTL、Verilog)中队列的可读性,这将把
q.io.deq
的名称“传输”到
队列
,而不是给它一个生成的/临时名称(例如,
\u T_42
)与用户名失去连接

然而,从功能的角度来看,
TransitName
所做的只是返回
q.io.deq


请查看以了解更多详细信息(以及一条很好的注释)。

我应该补充一点,TransitName的功能现在可以通过
@scaveName
注释更好地提供