wersja mobilna | kontakt z nami

Pierwsze kroki z FPGA (3)

Numer: Czerwiec/2016

Szkoła MAXimatora - testowanie funkcjonalne i weryfikacja działania projektu w środowisku Quartus Prime z wykorzystaniem symulatora ModelSIM. W tej części artykułu przedstawimy krok-po-kroku symulację projektu licznika, którego przygotowanie opisaliśmy miesiąc temu. Do symulacji użyjemy bezpłatnego symulatora ModelSIM oraz wbudowanego w Quartus Prime graficznego edytora przebiegów.

Pobierz PDF

Środowisko projektowe Quartus Prime zostało wyposażone przez producenta w kilka narzędzi umożliwiających symulowanie funkcjonalne projektów implementowanych w FPGA. W artykule pokażemy najprostszy z nich, wykorzystujący symulator wbudowany w środowisko.

Jego właściwości użytkowe są wystarczające do symulowania projektów implementowanych w bezpłatnej wersji programu Quartus Prime, bazuje on na specjalnej, bezpłatnej wersji zewnętrznego symulatora ModelSIM firmy Mentor Graphics. Za edycję i prezentację przebiegów będących wynikiem symulacji odpowiada wygodny w użyciu Waveform Editor.

Rysunek 1. Symulacja projektu wymaga przygotowania dla aktualnie otwartego projektu pliku o rozszerzeniu vwf

Rysunek 2. Okno edytora przebiegów Waveform Editor

Rysunek 3. Wyświetlenie menu kontekstowego

Symulacja projektu wymaga przygotowania dla aktualnie otwartego projektu pliku o rozszerzeniu vwf, co wymaga wybrania w oknie File → New, w sekcji Verification/Debugging Files, opcji University Program VWF (rysunek 1). Spowoduje to otwarcie okna edytora przebiegów Waveform Editor, które pokazano na rysunku 2.

Rysunek 4. Okno Insert Node or Bus

Rysunek 5. Okno Node Finder

Jak widać jest ono puste, musimy wprowadzić do opisu symulacji wszystkie linie wejściowe i wyjściowe oraz sygnały (węzły) wewnętrzne, których działanie chcemy uwzględnić w testach. W tym celu stajemy myszką w lewej części okna edytora i klikamy prawym przyciskiem myszy, co spowoduje wyświetlenie menu kontekstowego (rysunek 3), z którego wybieramy opcję Insert Node or Bus..., co spowoduje wyświetlenie okna pokazanego na rysunku 4.

Rysunek 6. Okno filtru (preselektora)

Rysunek 7. Schemat projektu

Żeby wyświetlić wszystkie interesujące nas sygnały, linie wejściowe i wyjściowe, należy przycisnąć przycisk Node Finder..., w wyniku czego zostanie wyświetlone okno jak na rysunku 5. W zależności od tego, jakiego rodzaju sygnały nas interesują, warto użyć preselektora (filtru), który znajduje się w górnej prawej części wyświetlonego okna (rysunek 6), przy czym trzeba pamiętać, że po ustaleniu trybu filtrowania trzeba każdorazowo nacisnąć przycisk List, który odświeża listę wyświetlonych sygnałów.

Rysunek 8. Przeniesienie sygnałów do Selected Nodes

Rysunek 9. Wyświetlenie wybranych sygnałów w edytorze przebiegów

W naszym przypadku skupimy się na analizie zmian stanów na liniach wyjściowych w zależności do zmian stanów na liniach wejściowych, więc filtr powinien być ustawiony na Pins: all. Listę znalezionych przez symulator linii wejściowych i wyjściowych widać na rys. 5, warto ją porównać z naszym projektem (rysunek 7) - jak widać, w obydwu przypadkach nazwy linii wejściowych i wyjściowych są identyczne.

Rysunek 10. Wybór opcji Value → Count Value z menu kontekstowego

Rysunek 11. Okno edycji przebiegu zegarowego

Po wybraniu linii i/lub sygnałów, które będą uwzględniane podczas symulacji (w naszym przypadku będą to wszystkie linie) przenosimy je do listy Selected Nodes (rysunek 8). Wybór zatwierdzamy przyciskiem OK, po zatwierdzeniu w kolejnym oknie także za pomocą OK, wybrane sygnały zostaną wyświetlone w edytorze przebiegów jak pokazano na rysunku 9. Liniom wejściowym domyślnie są przypisane stany logicznego "0", a wyjściom stany nieustalone.

Rysunek 12. Wyświetlenie symulowanego przebiegu

Rysunek 13. Przykładowe defi nicje przebiegów

Teraz musimy przypisać stany linii wejściowych, na które będziemy badać reakcje wyjść zaprojektowanego układu. Zaczniemy od utworzenia na wejściu CLKin sygnału zegarowego, co wymaga ustawienia kursora myszki w dowolnym miejscu edytowanego przebiegu i naciśnięcia prawego przycisku myszki.

Z wyświetlonego menu kontekstowego wybieramy opcje Value → Count Value (rysunek 10), co spowoduje wyświetlenie okna edycji przebiegu zegarowego, które pokazano na rysunku 11. W pozycji Transitions Occur można zdefiniować odstępy czasowe pomiędzy zboczami sygnału zegarowego (dla wartości 10 ns okres przebiegu wynosi 20 ns).

W wyniku opisanego ciągu operacji uzyskaliśmy przebieg jak pokazano na rysunku 12. W podobny sposób postępujemy z pozostałymi sygnałami wejściowymi, na rysunku 13 pokazano przykładowe definicje przebiegów.

Rysunek 14. Wynik symulacji funkcjonalnej weryfi kowanego układu

Rysunek 15. Grupowanie wybranych linii w magistrale

Symulator wbudowany w Quartus Prime umożliwia wykonanie dwóch rodzajów symulacji:

  • Funkcjonalnej, podczas której brane są pod uwagę wyłącznie zależności logiczne pomiędzy sygnałami, bez uwzględnienia wpływu czasów ich propagacji na działanie układu.
  • Czasowej, która jest bliższa realnym układom, bowiem oprócz zależności logicznych brane są pod uwagę także zależności czasowe pomiędzy sygnałami. Na rysunku 14 pokazano wynik symulacji funkcjonalnej weryfikowanego układu.

Edytor przebiegów wyposażono w kilka mechanizmów, które ułatwiają przygotowanie symulacji projektów o większej niż w przykładzie liczbie analizowanych wejść i wyjść. Można na przykład grupować wybrane linie w magistrale (rysunki 15 i 16), można także zmieniać format wyświetlanych wartości w zależności od indywidualnych potrzeb (rysunek 17).

Rysunek 16. Wyświetlenie przebiegu na zgrupowanych liniach

Rysunek 17. Zmiana formatu wyświetlanych wartości

W ten sposób przeszliśmy kompletną ścieżkę implementacji prostego projektu w FPGA. W kolejnym wydaniu EP skupimy się na pokazaniu zaawansowanych mechanizmów weryfi kacji projektów implementowanych w FPGA, koncepcyjnie zbliżonych do debugowania programów uruchamianych na mikrokontrolerach.

Piotr Zbysiński, EP

Pozostałe artykuły

Programowanie układów STM32F4 (1)

Numer: Listopad/2016

W tym kursie, bazując na nieskomplikowanych projektach, zaprezentuję w praktyczny sposób programowanie układów z rodziny STM32F4. Jest to pierwszy artykuł z serii. Przedstawione tutaj zostało narzędzie STM32CubeMX oraz środowisko programistyczne System Workbench for STM32. Podczas czytania artykułu oraz wykonywania przykładów utworzymy pierwszy projekt ? mikrokontrolerowe ?Hello World!?. W kolejnych częściach omówione zostaną liczniki, ...

HTS221 mały czujnik o sporych możliwościach

Numer: Listopad/2016

...

Przemysłowy Internet Rzeczy (2). Mikrokontroler CC1310 - instalowanie programów narzędziowych

Numer: Listopad/2016

W artykule zaprezentujemy sposób pobrania oraz zainstalowania pakietu programów narzędziowych niezbędnych do pracy z mikrokontrolerem CC1310. Przydadzą się nam one do licznych zadań, np. do obsługi sieci czujników.

Użytkowanie Odroid-C1+ (1). Środowisko programistyczne, instalowanie systemu Linux

Numer: Listopad/2016

...

Zastosowanie modułu Wi-Fi ESP-12 (3). Bezprzewodowy czujnik stacji pogodowej

Numer: Październik/2016

Telefon komórkowy jest jednym z tych przedmiotów, po które współcześnie ? przynajmniej w naszej części świata ? człowiek sięga najczęściej. A więc gdy użytkownik ma cały czas telefon komórkowy przy sobie, czemu by nie połączyć go z elementami inteligentnego domu, które mogą komunikować się w paśmie 2,4 GHz w standardzie Wi-Fi? W artykule zaprezentowano zastosowanie smartfona jako do prezentacji danych z bezprzewodowego czujnika ...

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Styczeń 2018

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym