Przyspieszenie UVM dzięki nowemu systemowi konfiguracji - Semiwiki

Przyspieszenie UVM dzięki nowemu systemowi konfiguracji – Semiwiki

Węzeł źródłowy: 3036575

Popularną metodą weryfikacji projektów SystemVerilog jest uniwersalna metodologia weryfikacji (UVM), która obejmuje system konfiguracji który niestety ma pewne problemy z szybkością i użytkowaniem. Rich Edelman z Siemens EDA napisał szczegółowy, 20-stronicowy artykuł na temat tego, jak uniknąć tych problemów, a ja go przejrzałem, aby podsumować najważniejsze informacje. Inżynierowie zajmujący się weryfikacją korzystają z bazy danych konfiguracji UVM w celu ustawienia wartości, a następnie uzyskania ich w późniejszym teście UVM. Jednym z przykładów ustawienia i uzyskania wartości „T” jest:

uvm_config#(T)::set(zakres, nazwa_ścieżki_instancji, nazwa_pola, wartość); uvm_config#(T)::get(scope, nazwa_ścieżki_instancji, nazwa_pola, wartość);

Podłączenie stanowiska testowego UVM do testowanego urządzenia wykorzystuje bazę danych konfiguracyjnych do przekazania interfejsów wirtualnych. Istnieją trzy problemy związane z używaniem konfiguracji UVM:

  • Duży kod, około 2,600 linii kodu
  • Wymaga dokładnego dopasowania typu, więc „int” i „bit” to nie to samo
  • Powolny kod

Rozważmy przypadek powolnego kodu, ponieważ przy tysiącach wywołań funkcji set() użycie nazw ze znakami wieloznacznymi może zająć do 30 minut, aby zakończyć fazę „ustawiania” i „pobierania”.

Czas, który upłynął min

Rich proponuje nowe rozwiązanie konfiguracji UVM, które zapewnia znacznie większe prędkości, w porównaniu z tym zajmuje tylko kilka sekund.

nowe rozwiązanie min

Jeśli Twój kod UVM unika używania symboli wieloznacznych i ma niewiele poleceń „ustaw”, wówczas Twój kod będzie działał szybciej.

Możliwe rozwiązania problemów z konfiguracją UVM to:

  • Zamiast tego użyj zmiennej globalnej
  • Użyj konfiguracji UVM z jednym zestawem()
  • Użyj konfiguracji UVM z kilkoma set()
  • Użyj drzewa konfiguracyjnego
  • Spróbuj czegoś innego

To ostatnie podejście polegające na wypróbowaniu czegoś innego to nowe rozwiązanie, które w dalszym ciągu korzysta z funkcji API set() i get(), a następnie jest upraszczane poprzez usunięcie parametryzacji konfiguracji, usunięcie pierwszeństwa i usunięcie zmiany algorytmu wyszukiwania. Rezultatem tego nowego podejścia są duże prędkości.

Twój nowy element konfiguracji jest zdefiniowany w klasie pochodnej z „config_item”, a poniższy przykład pokazuje „int wartość” jako ustawianą właściwość. Do celów debugowania dodajesz funkcję Pretty-Print.

klasa my_special_config_item rozszerza config_item; funkcja new(string name = "my_special_config_item"); super.nowy(nazwa); funkcja końcowa int wartość; ciąg funkcji wirtualnej konwertuj2string(); return $sformatf("%s - wartość=%0d <%s>", get_name(), wartość, super.convert2string()); klasa końcowa funkcji końcowej

Element „config_item” ma atrybut name i ta nazwa jest wyszukiwana wraz z nazwą instancji. Obiekt konfiguracyjny posiada także funkcję get_name() zwracającą nazwę. Aby znaleźć dowolną „nazwę_instancji.nazwę_pola”, baza danych konfiguracji korzysta z tablicy asocjacyjnej, co zapewnia szybkie wyszukiwanie i szybkość tworzenia.
Aby ułatwić śledzenie, możesz dowiedzieć się, kto ustawił lub kto wywołał get, ponieważ nazwa pliku i numer linii to pola w wywołaniach funkcji set() i get().

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

Kolejkę akcesorów można wydrukować podczas debugowania, aby zobaczyć, kto wywołał set() i get().

Aby obsługiwać symbole wieloznaczne, wymagane było dodanie mechanizmu wyszukiwania za pomocą kontenerów. Rozważmy nazwę instancji „top.abcd*_0”.

drzewo kontenerowe min
Drzewo kontenerowe

Część wieloznaczna nazwy instancji jest obsługiwana przy użyciu drzewa kontenerów zamiast tablicy asocjacyjnej.

Podsumowanie

Udostępnianie danych pomiędzy modułem/instancją a światem opartym na klasach w środowisku testowym UVM można przeprowadzić przy użyciu bazy danych konfiguracji UVM, należy jednak pamiętać o spadkach prędkości. Jeśli Twoja metodologia wykorzystuje wiele konfiguracji, rozważ zastosowanie nowego wprowadzonego podejścia, które obejmuje pakiet wykorzystujący około 300 linii kodu zamiast 2,600 linii kodu w pliku bazy danych konfiguracyjnej UVM.

Przeczytaj cały 20-stronicowy artykuł, Unikanie szaleństw konfiguracyjnych w łatwy sposób w Siemens EDA.

Powiązane blogi

Udostępnij ten post przez:

Znak czasu:

Więcej z Półwiki