Ленивые модули в 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

Другие вопросы по тегам