Можем ли мы иметь один uvm_reg_map, подключенный к нескольким секвенсорам - PullRequest
0 голосов
/ 30 июня 2019

У меня есть ситуация, когда у меня есть около 100000 регистров в блоке uvm_reg_block.У меня есть три драйвера, которые могут вести транзакции в эти регистры.В соответствии со стандартной методологией UVM RAL, я понимаю, что нам нужно три отдельных uvm_reg_maps, подключенных к трем секвенсорам и диску.Проблема состоит в том, чтобы дублировать регистры во всех трех uvm_reg_maps, которые потребляют процессорное время для запуска.Требуется один час, чтобы даже войти в фазу данных.Вы можете помочь мне решить это?Есть ли способ соединить все три секвенсора с одним uvm_reg_map и каким-то образом на основе аргумента решить, какой физический секвенсор он должен выбрать?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 01 июля 2019

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 имеет тенденцию делать расширение невозможным, потому что код опирается на реализации вместо абстракций.

0 голосов
/ 08 июля 2019

Другой способ сделать это - создать драйвер, который использует все эти 3 секвенсора / агента. (Давайте назовем это reg_driver) У reg_driver будет один секвенсор, который получает общий reg.сделки.Из заданного переключателя времени выполнения выберите последовательность reg интерфейса для управления конкретной транзакцией внутри reg_driver.

0 голосов
/ 01 июля 2019

Насколько я знаю, ты не можешь.Если одна карта регистров может подключаться к нескольким секвенсорам, то позже, как вы можете выбрать, какой секвенсор запускать?Кроме того, для каждой добавленной карты reg ее дескриптор будет храниться внутри массива mvmaps uvm_reg через map.add_reg ().Не похоже, что каждая карта будет создавать свои собственные регистры, поэтому регистры не будут дублироваться.

...