在Chisel IO接口构造函数中使用clone方法

时间:2017-01-03 17:47:40

标签: scala chisel

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

1 个答案:

答案 0 :(得分:2)

Sodor目前仍然在Chisel 2上。clone在Chisel 3中被重命名为cloneType,以区别于Java和Scala中的clone。 Chisel通常需要cloneType才能实例化参数化 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