Использование метода клонирования в конструкторах интерфейса Chisel IO

Несколько конструкторов интерфейса ввода-вывода из коллекции процессоров Sodor реализуют собственный метод клонирования. Я изучил использование метода клонирования в Scala, но до сих пор не могу понять, почему именно это делается. (Я не смог найти явного использования этих методов нигде в дизайне)


person isururathnayaka    schedule 03.01.2017    source источник


Ответы (1)


В настоящее время Содор все еще использует Chisel 2. clone был переименован в cloneType в Chisel 3, чтобы отличить его от clone в Java и Scala. cloneType обычно требуется Chisel для создания новых экземпляров параметризованных Bundles. Например:

class MyBundle extends Bundle {
  val foo = UInt(32.W)
}
class MyParameterizedBundle(width: Int) extends Bundle {
  val bar = UInt(width.W)
}

Chisel часто требуется создать экземпляр данного класса Bundle из другого экземпляра этого класса. Для этого Chisel использует отражение Java. Если у конструктора нет аргументов, он может просто создать экземпляр объекта из конструктора по умолчанию. Однако он не может определить значение width из экземпляра MyParameterizedBundle посредством отражения, поэтому он не может предоставить соответствующий параметр конструктору. Для этого предназначена функция cloneType. Он сообщает Chisel, как создать новый экземпляр Bundle из заданного объекта.

Мы надеемся исправить эту бородавку в будущем, но пока не было времени это реализовать. Наиболее многообещающим способом является автоматическое создание cloneType с помощью аннотаций макросов Scala.

person Jack Koenig    schedule 04.01.2017