Створення UVM швидше за допомогою нової системи конфігурації - Semiwiki

Зробіть UVM швидшим за допомогою нової системи конфігурації – Semiwiki

Вихідний вузол: 3036575

Універсальна методологія перевірки (UVM) є популярним способом допомогти перевірити проекти SystemVerilog, і вона включає система конфігурації який, на жаль, має деякі проблеми зі швидкістю та використанням. Річ Едельман з Siemens EDA написав детальну 20-сторінкову статтю про те, як уникнути цих проблем, і я пройшов її, щоб узагальнити основні моменти для вас. Інженери з верифікації використовують базу даних конфігурації UVM, щоб установити значення, а потім отримати значення пізніше під час тестування UVM. Одним із прикладів встановлення та отримання значення "T" є:

uvm_config#(T)::set(scope, instance_path_name, field_name, value); uvm_config#(T)::get(scope, instance_path_name, field_name, value);

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

  • Великий код, приблизно 2,600 рядків коду
  • Потрібна точна відповідність типу, тому "int" і "bit" не однакові
  • Повільний код

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

Витрачений час хв

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

новий розчин хв

Якщо ваш код UVM уникає використання символів узагальнення та має мало команд «set», тоді ваш код працюватиме швидше.

Можливі рішення проблем конфігурації UVM:

  • Натомість використовуйте глобальну змінну
  • Використовуйте конфігурацію UVM з одним набором()
  • Використовуйте конфігурацію UVM з кількома set()
  • Використовуйте дерево конфігурації
  • Спробуйте щось інше

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

Ваш новий елемент конфігурації визначено в похідному класі від 'config_item', і наведений нижче приклад показує 'int value' як властивість, що встановлюється. Для цілей налагодження ви додаєте функцію красивого друку.

клас my_special_config_item розширює config_item; функція new(string name = "my_special_config_item"); super.new(ім'я); endfunction int значення; рядок віртуальної функції convert2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); кінцева функція кінцевий клас

'config_item' має атрибут імені, і це ім'я шукається, а також ім'я екземпляра. Об’єкт конфігурації також має функцію get_name() для повернення імені. Щоб знайти будь-який «instance_name.field_name», база даних конфігурації використовує асоціативний масив для швидкого пошуку та створення.
Для відстеження ви можете дізнатися, хто встановив або хто викликав get, оскільки ім’я файлу та номер рядка є полями у викликах функцій set() і get().

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

Чергу доступу можна роздрукувати під час налагодження, щоб побачити, хто викликав set() і get().

Для підтримки символів підстановки потрібно додати механізм пошуку за допомогою контейнерів. Розглянемо назву екземпляра 'top.abcd*_0'.

контейнерне дерево мін
Дерево-контейнер

Частина імені екземпляра зі знаком підстановки обробляється за допомогою дерева контейнера замість асоціативного масиву.

Підсумки

Обмін даними між модулем/екземпляром і світом на основі класів у тестовому стенді UVM можна здійснити за допомогою бази даних конфігурації UVM, просто пам’ятайте про уповільнення швидкості. Якщо ваша методологія використовує багато конфігурацій, тоді подумайте про використання нового представленого підходу, який містить пакет із приблизно 300 рядками коду замість 2,600 рядків коду у файлі бази даних конфігурації UVM.

Прочитайте повну статтю на 20 сторінок, Уникнення божевілля конфігурації простим способом в Siemens EDA.

Блоги, пов'язані

Поділитися цим дописом через:

Часова мітка:

Більше від Semiwiki