Zewnętrzna kontrola symulacji ModelSim za pośrednictwem nazwanych rur Unix
Streszczenie: W tej pracy prezentujemy metodę sterowania symulacją ModelSim za pomocą zewnętrznego programu. Komunikacja między ModelSim a programem zewnętrznym odbywa się za pomocą nazwanych potoków („FIFO”), które są wyświetlane jako normalne pliki dla każdej aplikacji. Główną różnicą między używaniem FIFO a zwykłymi plikami do komunikacji międzyprocesowej (IPC) jest to, że aplikacja próbująca pisać do FIFO jest wstrzymywana, dopóki inna aplikacja nie spróbuje odczytać z FIFO i odwrotnie. Poprawia to niezawodność IPC. Główne zalety tej metody to: 1) Ponieważ używane są tylko ogólne operacje na plikach, aplikacja zewnętrzna może być napisana w prawie każdym języku programowania; 2) Daje inżynierowi weryfikującemu możliwość ponownego wykorzystania pakietów oprogramowania do sprawdzania standardów przy minimalnym przepisywaniu; 3) Dzięki wzajemnej komunikacji wielu testowanych urządzeń (DUT) można stworzyć dokładniejszą symulację końcowego systemu; oraz 4) Wydajność ogólnej symulacji można łatwo zwiększyć w klastrze obrazów SSI lub komputerze wieloprocesorowym, nawet jeśli silnik symulacyjny ModelSim nie jest wielowątkowy. Ze względu na implementację wejścia / wyjścia pliku (I / O) dla behawioralnego VHDL, ModelSim nie może bezpośrednio odczytywać ani zapisywać tych FIFO. Obejście tego ograniczenia pokazano za pomocą interfejsu języka obcego ModelSim (FLI). W tym dokumencie pokazano również roboczy przykład zastosowania tej metody do weryfikacji nowej generacji procedur zmiennoprzecinkowych w VHDL. W szczególności pakiet oprogramowania IEEE Compliance Checker typu open source, napisany w C ++,
Problem z FIFO wymagającymi zagranicznego interfejsu programistycznego polega na tym, że operacje we / wy pliku VHDL nie radzą sobie płynnie z blokowaniem, dopóki dane nie będą dostępne.
Niestety praca nie jest dostępna w Internecie.
Model Sim ® Interfejs języka obcego , wersja 5.6d , PDF 3,4 MB.
Korzystanie z interfejsu języka obcego ModelSim dla c - symulacji VHDL i sterowania symulatorami na platformie Linux x86 Andre Pool - [email protected] - wersja 1.5 - utworzono w listopadzie 2012 r., Ostatnia aktualizacja wrzesień 2013 , PDF, 320 KB (i nigdy nie wspomina o FIFO) .
Używanie interfejsu ModelSim w języku obcym do c - symulacji VHDL i sterowania symulatorami na platformie Linux x86 (pasujące repozytorium kodu github).
Jest trochę więcej otwartego źródła, używając wywołań funkcji VHPI Foreign w ghdl: vhdl
/ src / sim / ghdlex_mein w master · texane / vhdl · GitHub .
I coś, co wygląda na aktualizację Martina Strubela na liście GHDL_discuss:
http://www.section5.ch/downloads/ghdlex-0.051.tgz z datą dla fifo.c z 14 kwietnia 2014 r.
FLI z definicji zablokuje Cię w Modelsim, nie jestem pewien stanu ich obsługi VHPI (która jest częścią IEEE Std 1076-2008, VHDL LRM).
Korzystanie z gniazda lub pliku FIFO pozwala procesowi programowemu i sprzętowemu działać z różnymi prędkościami, zapewniając buforowanie szybkości. Nie zawsze jest to konieczne, jeśli twój system oprogramowania jest o rząd wielkości szybszy niż symulacja sprzętowa (i ogólnie jest).
Podjęto starania, aby zapewnić VHDL funkcjonalność UNIX (POSIX), zobacz Pakiety VHDL domeny publicznej , które zawierają wskaźnik do wcześniejszej pracy SNUG San Jose 2002 1 Funkcje C / UNIX dla testerów VHDL Funkcje C / UNIX dla testerów VHDL wraz ze slajdem zestaw z dodatkowymi uwagami na temat rur uniksowych i rsh . To pokazuje, jak zachować nazwane potoki otwarte. Można również pobrać cały kod VHDL. Uważam, że doprowadziłoby to do najłatwiejszego sposobu osiągnięcia twojego celu.
Czy jest coś rodzimego dla Modelsim, które pozwala ci podłączyć się do rury? Prawdopodobnie nie, tym bardziej pod Windows. Czy da się to zrobić? Tak, ale nie jest to droga dla osób o słabych nerwach. Możesz zablokować jeden koniec lub drugi lub ewentualnie oba, czekając na dostępność danych.
Zagraniczny interfejs programowania teoretycznie pozwala na odrodzenie procesu potomnego dla jednego lub drugiego końca „potoku”, co oznacza również, że można użyć modelu pamięci współdzielonej do komunikacji między dwoma końcami.
Możesz spojrzeć na Cocotb . Jest to oparta na Pythonie biblioteka współsymulacyjna, jednym z celów projektowych było umożliwienie opisanej metodologii, łatwe symulowanie niezmodyfikowanego oprogramowania produkcyjnego i RTL.
W repozytorium znajduje się przykład uruchamiania niezmodyfikowanej
ping
komendy przeciwko symulacji i samouczkowi opisującemu kod.W przypadku sterowników przestrzeni użytkownika, narzędzi konfiguracyjnych itp. Masz kilka opcji, aby uruchomić oprogramowanie bez modyfikacji :
Jeśli dostęp do urządzenia sprowadza się do kilku funkcji (np. Wywołania odczytu i zapisu), możesz połączyć się z biblioteką symulacji, która blokuje się podczas wykonywania dostępu do symulacji. Działa to bardzo dobrze do konfiguracji.
Jeśli twoje oprogramowanie korzysta ze wskaźników IO odwzorowanych w pamięci i wskaźników dereferencji, aby uzyskać dostęp do urządzenia, sprawy stają się nieco bardziej skomplikowane - musisz utworzyć obszar pamięci wspólnej z ustawionymi bitami ochronnymi i dostępem pułapki .
Jeśli korzystasz z sieci, możesz użyć interfejsów wirtualnych, takich jak TUN / TAP (patrz wspomniany wyżej samouczek ), podejrzewam, że mogą istnieć podobne opcje przesyłania USB lub innych popularnych interfejsów hosta.
Cocotb współpracuje z różnymi symulatorami i projektami VHDL (przez VHPI) lub Verilog / SystemVerilog (przez VPI). Niestety Modelsim nie implementuje VHPI, więc jako użytkownik VHDL utknąłeś w FLI, co nie jest tak przydatne jako interfejs. Możesz jęczeć w Mentorze, aby spróbować przekonać ich do wdrożenia standardowego interfejsu branżowego lub możesz ocenić inny symulator obsługujący VHPI.
Niestety wydaje się, że ogólnie producenci narzędzi nie są szczególnie zainteresowani rynkiem VHDL, sądząc po czasie, jaki zajmuje im wdrożenie dowolnej funkcji związanej z VHDL ...
Oświadczenie: Jestem programistą Cocotb.
źródło