【问题标题】:Usage of clone method in Chisel IO interface constructorsChisel IO接口构造函数中clone方法的使用
【发布时间】:2017-01-03 17:47:39
【问题描述】:

Sodor 处理器集合的几个 IO 接口构造函数实现了自己的克隆方法。我研究了 Scala 中克隆方法的用法,但仍然无法弄清楚为什么会这样做。 (我在设计的任何地方都找不到这些方法的任何明确用法)

【问题讨论】:

    标签: scala chisel


    【解决方案1】:

    Sodor 目前仍在 Chisel 2 上。clone 在 Chisel 3 中重命名为 cloneType,以区别于 Java 和 Scala 中的 clonecloneType 通常需要 Chisel 来实例化 parameterized Bundles 的新实例。例如:

    class MyBundle extends Bundle {
      val foo = UInt(32.W)
    }
    class MyParameterizedBundle(width: Int) extends Bundle {
      val bar = UInt(width.W)
    }
    

    Chisel 通常需要从该类的另一个实例创建给定 Bundle 类的实例。 Chisel 使用 Java 反射来做到这一点。如果构造函数没有参数,那么它可以从默认构造函数中实例化对象。但是,它无法通过反射从 MyParameterizedBundle 的实例中确定width 的值,因此它无法为构造函数提供适当的参数。这就是cloneType 函数的用途。它告诉 Chisel 如何从给定对象创建 Bundle 的新实例。

    我们希望在未来修复这个疣,但还没有时间实施它。最有前途的方法是通过Scala macro annotations自动生成cloneType

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2012-10-14
      • 2011-02-17
      • 1970-01-01
      • 2011-03-21
      • 2010-12-13
      • 1970-01-01
      相关资源
      最近更新 更多