A uvm_reg_map
может работать только с одним секвенсором.
Вы упоминаете, что создание нескольких карт регистров слишком медленное, потому что add_reg(...)
.Может быть возможно отделить аспект спецификации карты регистров (по каким адресам регистры) от аспекта секвенсора.Для этого вам понадобится один uvm_reg_map
экземпляр, на котором вы делаете add_reg(...)
вызовы.Давайте назовем это карта спецификации .Для каждого секвенсора, к которому вы хотите подключить доступ к реестру, вам потребуется еще один uvm_reg_map
(подкласс), который каким-то образом указывает на карту спецификации .Давайте назовем эти карты вождения .
У меня нет кода, как это сделать в данный момент.Нужно было бы посмотреть, как uvm_reg_map
вызывается другим кодом, и переопределить эти функции.Вместо вызова реализаций в uvm_reg_map
, которые имеют дело с собственным хранилищем регистров, они будут указывать на карту спецификации и запрашивать ее, используя get_reg(...)
и так далее.Это может не работать, если функции не объявлены virtual
в uvm_reg_map
.UVM имеет тенденцию делать расширение невозможным, потому что код опирается на реализации вместо абстракций.