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

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

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

Что означает дубликат в данном контексте? Вы должны иметь возможность добавить регистр на несколько карт.

Tudor Timi 30.06.2019 22:43

Я имел в виду, что добавление 100000 регистров к более чем одному uvm_reg_map занимает много времени. Поэтому хотел знать, могу ли я сделать так, чтобы одна uvm_reg_map содержала несколько секвенсоров вместо нескольких uvm_reg_map, содержащих один секвенсор.

user1978273 30.06.2019 22:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 000
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Ответ принят как подходящий

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

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

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