Ускорение UVM с помощью новой системы конфигурации — Semiwiki

Ускорение UVM с помощью новой системы конфигурации – Semiwiki

Исходный узел: 3036575

Универсальная методология проверки (UVM) — это популярный способ проверки проектов SystemVerilog, который включает в себя система конфигурации к сожалению, у него есть некоторые проблемы со скоростью и использованием. Рич Эдельман из Siemens EDA написал подробный 20-страничный документ на тему того, как избежать этих проблем, и я просмотрел его, чтобы суммировать для вас основные моменты. Инженеры по верификации используют базу данных конфигурации UVM для установки значений, а затем для получения значений позже в ходе теста UVM. Один из примеров установки и получения значения «T»:

uvm_config#(T)::set(scope, имя_экземпляра_path_name, имя_поля, значение);

uvm_config#(T)::get(scope, имя_экземпляра_path_name, имя_поля, значение);

При подключении испытательного стенда UVM к тестируемому устройству для передачи виртуальных интерфейсов используется база данных конфигурации. При использовании конфигурации UVM возникают три проблемы:

  • Большой код, около 2,600 строк кода.
  • Требуется точное соответствие типов, поэтому «int» и «bit» — это не одно и то же.
  • Медленный код

Рассмотрим случай медленного кода, поскольку при тысячах вызовов set() с использованием имен с подстановочными знаками завершение этапов «установки» и «получения» может занять до 30 минут.

Прошедшее время мин.

Рич предлагает новое решение для конфигураций UVM, которое имеет гораздо более высокую скорость, занимающую для сравнения всего несколько секунд.

новое решение мин

Если ваш код UVM не использует подстановочные знаки и содержит мало команд «set», ваш код будет работать быстрее.

Возможные решения проблем конфигурации UVM:

  • Вместо этого используйте глобальную переменную
  • Используйте конфигурацию UVM с одним set()
  • Используйте конфигурацию UVM с несколькими set()
  • Используйте дерево конфигурации
  • Попробуйте что-то другое

Этот последний подход, заключающийся в попытке чего-то другого, является новым решением, и он продолжает использовать API-интерфейсы set() и get(), затем упрощается за счет удаления параметризации конфигураций, удаления приоритета и удаления изменения алгоритма поиска. Результатом этого нового подхода являются высокие скорости.

Ваш новый элемент конфигурации определен в производном классе от «config_item», а в примере ниже показано «int value» как устанавливаемое свойство. В целях отладки вы добавляете функцию cute-print.

класс my_special_config_item расширяет config_item;
функция new(string name = "my_special_config_item");
супер.новый (имя);
конечная функция

целое значение;

строка виртуальной функции Convert2string();
return $sformatf("%s - value=%0d ", get_name(), value, super.convert2string());
конечная функция
 конечный класс

У config_item есть атрибут name, и ищется это имя, а также имя экземпляра. Объект конфигурации также имеет функцию get_name() для возврата имени. Чтобы найти любое «имя_экземпляра.имя_поля», база данных конфигурации использует ассоциативный массив для быстрого поиска и создания.
Для отслеживания вы можете узнать, кто установил или кто вызвал get, поскольку имя файла и номер строки являются полями в вызовах функций set() и get().

set(null, "top.a.b.*", "SPEED", my_speed_config, `__FILE__, `__LINE__)
get(null, "top.a.b.c.d.monitor1", "SPEED", Speedconfig, `__FILE__, `__LINE__)

Очередь доступа можно распечатать во время отладки, чтобы увидеть, кто вызвал set() и get().

Для поддержки подстановочных знаков потребовалось добавить механизм поиска с использованием контейнеров. Рассмотрим имя экземпляра «top.a.b.c.d.*_0».

контейнерное дерево мин.
Контейнерное дерево

Часть имени экземпляра с подстановочными знаками обрабатывается с использованием дерева контейнеров вместо ассоциативного массива.

Обзор

Совместное использование данных между модулем/экземпляром и миром на основе классов в тестовом стенде UVM может осуществляться с использованием базы данных конфигурации UVM, но помните о замедлении скорости. Если ваша методология использует множество конфигураций, рассмотрите возможность использования нового подхода, в котором пакет использует около 300 строк кода вместо 2,600 строк кода в файле базы данных конфигурации UVM.

Прочитайте полную 20-страничную статью, Как избежать конфигурационного безумия: простой способ в Siemens EDA.

Похожие статьи

Поделитесь этим постом через:

Отметка времени:

Больше от Полувики