Ленивые модули в RocketChip
Некоторое время я пытался узнать о LazyModule
абстрактный класс и diplomacy
пакет в общем. Самый простой вывод состоит в том, что объекты классов потомков LazyModule создаются только при первом обращении к ним. (Пожалуйста, исправьте меня, если я ошибаюсь)
В RocketTile.scala есть несколько примеров LazyModule
использование, такое как:scala
lazy val module = new LazyModuleImp(this) {...
Что происходит, когда значение не объявлено lazy
и он по-прежнему назначается LazyModule
?
Другими словами, происходит ли "лень" созданной ценности от ее наследования от LazyModule
или мы должны поставить lazy
впереди, чтобы получить ожидаемое поведение?
1 ответ
Я не могу вдаваться в подробное объяснение, но предложу это: lazy
означает отложенную инициализацию на языке Scala. lazy val module
выполняется / оценивается только тогда, когда это необходимо. Это хорошо работает для представленного варианта использования, потому что описание аппаратного обеспечения оценивается только после завершения проектной конфигурации.
Я написал этот пост в блоге некоторое время назад. Это может предложить дополнительную информацию:
http://blog.edmondcote.com/2017/04/parameters-and-lazy-modules.html