TransitName在Chisel3中的用途是什么?

时间:2018-04-16 17:30:39

标签: chisel

在chisel3中实现Queue,

对象队列返回 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)
    }
}

我无法理解 TransitName 中的内容,因为我无法理解其源代码的含义。

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

1 个答案:

答案 0 :(得分:1)

TransitName正在帮助根据用户指定的内容命名创建的Queue模块。 Queue工厂在内部创建一个新的Queue对象,但只返回其IO的一部分。 Chisel根据用户的名称(或通过某些名称覆盖)知道如何命名IO。但是,Chisel 不知道将队列命名为什么。为了提高下游表示(FIRRTL,Verilog)中队列的可读性,这将“转移”#34; q.io.deq的{​​{1}}的名称,而不是给它生成/临时名称(例如,Queue)丢失与用户姓名的连接。

但是,从功能的角度来看,_T_42所做的只是返回TransitName

查看TransitName object definition了解更多详情(以及一个好评)。