Czy potrafisz połączyć stanowisko testowe Modelsim z bodźcami zewnętrznymi?


10

Pracuję w zespole, który zajmuje się zarówno tworzeniem oprogramowania sterowników, jak i FPGA. Symulacja FPGA jest wykonywana w Modelsim, a oprogramowanie sterownika jest napisane w C. Aby zminimalizować ryzyko integracji, chciałbym móc modelować interakcję między dwiema połówkami naszego produktu przed umieszczeniem go na sprzęcie.

Wiem, że Modelsim obsługuje testbench, który pozwala dostarczyć bodziec w postaci pliku tekstowego z czasem i wartościami do wprowadzenia. Zastanawiam się, czy Modelsim ma tryb, który pozwala podłączyć rurkę do zewnętrznej aplikacji (takiej jak nasz sterownik) i uruchomić rodzaj rozproszonej symulacji, w której oprogramowanie może wypychać wartości do środowiska testowego, a następnie obserwować wyniki później .

Sztuczka, której nie mogę zrobić z wejściem pliku tekstowego, polega na interakcji dwóch połówek produktu. Potrzebuję oprogramowania, które „zapisuje” wartości do symulatora FPGA, odczytuje wyniki, a następnie zapisuje nowe wartości do FPGA, które zależą od odczytanych wyników. Pliki tekstowe wymagają, aby dane wejściowe były niezależne od danych wyjściowych.

Przeprowadziłem wyszukiwanie zarówno w StackExchange, jak i Google, ale nie byłem w stanie wymyślić zestawu słów kluczowych, aby zawęzić moje wyszukiwanie na tyle, aby zidentyfikować poszukiwane zachowanie lub stwierdzić, że nie istnieje.

Odpowiedzi:


9

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 - fli@andrepool.com - 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.


Dziękujemy za wspaniale zbadaną odpowiedź! „Interfejs w języku obcym” był dokładnie tym wyrażeniem, którego potrzebowałem, aby pobrać potrzebną dokumentację referencyjną, nigdy bym tego nie odgadł! Wczesna integracja, nadchodzę!
Cort Ammon

5

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 pingkomendy 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 :

  1. 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.

  2. 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.