Что такое Clone in Chisel

Я новичок в 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.

Спасибо


person ARK91    schedule 04.01.2018    source источник
comment
Это переопределение, потому что здесь вы переопределяете метод, унаследованный от родительского класса Bundle.   -  person sarveshseri    schedule 05.01.2018


Ответы (1)


Типичный вариант использования пакетов в Chisel - создать экземпляр с определенным набором параметров пакета, а затем использовать этот экземпляр в качестве шаблона. Использование его в качестве шаблона означает создание нового экземпляра того же типа. Во многих случаях Chisel может выполнять клонирование автоматически, и пользователю не нужно реализовывать cloneType, но в настоящее время ограничения scala и chisel (обычно, когда пакет имеет несколько параметров) chisel не может понять, как реализовать копию, и разработчик должен реализовать clonetype вручную . Последние разработки в области chisel почти избавят от необходимости реализовывать cloneType. Это часть графика выпуска 3.1.0 для выпуска в этом месяце. Дополнительные сведения см. В проблеме автоклонирования.

person Chick Markley    schedule 07.01.2018