我是Chisel的新学习者.克隆在Chisel中的目的是什么?我在某处写到,"它创建了一个浅层副本".我们为什么需要它?这是一些例子.你能详细说明吗?
1)
class Valid[+T <: Data](gen: T) extends Bundle
{
val valid = Output(Bool())
val bits = Output(gen.chiselCloneType)//?????
def fire(): Bool = valid
override def cloneType: this.type = Valid(gen).asInstanceOf[this.type]
}
/** Adds a valid protocol to any interface */
object Valid {
def apply[T <: Data](gen: T): Valid[T] = new Valid(gen)
}
Run Code Online (Sandbox Code Playgroud)
2)
class Packet(n: Int, w: Int) extends Bundle {
val address = UInt(Log2Up(n).W)
val payload = UInt(w.W)
override def cloneType: this.type =
new Packet(n, w).asInstanceOf[this.type]
}
Run Code Online (Sandbox Code Playgroud)
为什么cloneType是Override.它是否像Scala中的apply方法,或者只是更新Bundle中的cloneType方法.
谢谢
在 Chisel 中,bundle 的一个典型用例是使用一组特定的 bundle 参数创建一个实例,然后将该实例用作模板。将其用作模板意味着创建一个相同类型的新实例。很多情况下Chisel可以自动进行克隆,用户不需要实现cloneType,但是目前scala和chisel的限制(通常是bundle有多个参数时)chisel无法弄清楚如何实现copy,开发者必须手动实现clonetype . chisel 的最新发展将几乎消除实现 cloneType 的需要。这是本月发布的 3.1.0 发布时间表的一部分。有关详细信息,请参阅autoclonetype 问题。
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |