scala – 什么是Coneel中的克隆
发布时间:2020-12-16 18:14:43 所属栏目:安全 来源:网络整理
导读:我是Chisel的新学习者.克隆在Chisel中的目的是什么?我在某处写到,“它创建了一个浅层副本”.我们为什么需要它? 这是一些例子.你能详细说明吗? 1) class Valid[+T : Data](gen: T) extends Bundle { val valid = Output(Bool()) val bits = Output(gen.chi
我是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) } 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] } 为什么cloneType是Override.它是否像Scala中的apply方法,或者只是更新Bundle中的cloneType方法. 谢谢 解决方法
Chisel中bundle的典型用例是使用bundle的一组特定参数创建一个实例,然后将该实例用作模板.将其用作模板意味着创建相同类型的新实例.在许多情况下,Chisel可以自动进行克隆,用户不需要实现cloneType但目前scala和chisel的限制(通常当bundle有多个参数时)chisel无法弄清楚如何实现副本,开发人员必须手动实现clonetype .凿子的最新发展几乎消除了实现cloneType的需要.这是本月发布的3.1.0发布计划的一部分.有关详情,请参见
the autoclonetype issue.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |