Можем ли мы подключить один uvm_reg_map к нескольким секвенсорам?

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

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


uvm
person user1978273    schedule 30.06.2019    source источник
comment
Что означает дубликат в данном контексте? Вы должны иметь возможность добавить регистр на несколько карт.   -  person Tudor Timi    schedule 30.06.2019
comment
Я имел в виду, что добавление 100000 регистров к более чем одному uvm_reg_map занимает много времени. Поэтому хотел знать, могу ли я сделать так, чтобы одна uvm_reg_map содержала несколько секвенсоров вместо нескольких uvm_reg_map, содержащих один секвенсор.   -  person user1978273    schedule 30.06.2019


Ответы (3)


uvm_reg_map может работать только с одним секвенсором.

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

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

person Tudor Timi    schedule 01.07.2019

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

person anpham    schedule 01.07.2019

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

person Parth Pandya    schedule 08.07.2019