Я новичок в 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 переопределен. Это похоже на метод apply в Scala или он просто обновляет только метод cloneType в Bundle.
Спасибо