加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读