OPTYMALIZACJA MODELI SYMULACYJNYCH ZAMODELOWANYCH W JĘZYKU VERILOG HDL Z WYKORZYSTANIEM INTERFEJSU PLI

Podobne dokumenty
Realizacja bezpiecznego programowalnego sterownika logicznego z wykorzystaniem języków HDL

METODY ZINTEGROWANEGO PROJEKTOWANIA SPRZĘTU I OPROGRAMOWANIA Z WYKORZYSTANIEM NOWOCZESNYCH UKŁADÓW PROGRAMOWALNYCH

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

Kompilator języka C na procesor 8051 RC51 implementacja

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Metody optymalizacji soft-procesorów NIOS

Technika mikroprocesorowa. Systemy operacyjne czasu rzeczywistego

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Lab 9 Podstawy Programowania

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Język opisu sprzętu VHDL

Szkolenia specjalistyczne

ZASADY PROGRAMOWANIA KOMPUTERÓW

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Efekt kształcenia. Ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie algorytmów i ich złożoności obliczeniowej.

Czym są właściwości. Poprawne projektowanie klas

Krótkie wprowadzenie do ModelSim i Quartus2

Prezentacja systemu RTLinux

Architektura komputerów

Wykorzystanie standardu JTAG do programowania i debugowania układów logicznych

PLC1: Programowanie sterowników logicznych SIEMENS SIMATIC S7-300/400 - kurs podstawowy

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wskaźniki. Informatyka

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Adam Kotynia, Łukasz Kowalczyk

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 3 Składnia języka C# (cz. 2)

Katedra Mikroelektroniki i Technik Informatycznych

Lista zadań nr 1. Zagadnienia stosowanie sieci Petriego (ang. Petri net) jako narzędzia do modelowania algorytmów sterowania procesami

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

Struktura i działanie jednostki centralnej

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy Programowania C++

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

Lista zadań nr 5. Ścieżka projektowa Realizacja każdego z zadań odbywać się będzie zgodnie z poniższą ścieżką projektową (rys.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

PMiK Programowanie Mikrokontrolera 8051

Java EE produkcja oprogramowania

Programowalne układy logiczne kod kursu: ETD Układy kombinacyjne, przypisania, blokujące i nieblokujące cz.2 W

Laboratorium Podstaw Techniki Cyfrowej

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

MentorGraphics ModelSim

Algorytm. a programowanie -

Modelowanie logiki rewersyjnej w języku VHDL

Język C zajęcia nr 11. Funkcje

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Komunikacja między sterownikami przez protokół ADS

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Podstawy programowania komputerów

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Elektronika cyfrowa i mikroprocesory. Dr inż. Aleksander Cianciara

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Zarządzanie pamięcią w systemie operacyjnym

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Uniwersytet Mikołaja Kopernika. Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej

Języki i techniki programowania Ćwiczenia 2

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

dr inż. Jarosław Forenc

Rozdział 4 KLASY, OBIEKTY, METODY

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

dokument DOK wersja 1.0

Podstawy programowania skrót z wykładów:

Część 4 życie programu

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Projekt prostego procesora

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Rok akademicki: 2013/2014 Kod: JIS s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Programowanie Niskopoziomowe

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Ćwiczenie nr 6. Programowanie mieszane

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Optimizing Programs with Intended Semantics

Architektura komputerów II - opis przedmiotu

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowalne układy logiczne kod kursu: ETD Podstawy języka Verilog W

Bezpieczeństwo informacji oparte o kryptografię kwantową

Projektowanie systemów za pomocą języków wysokiego poziomu ESL

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Programowanie mikroprocesorów jednoukładowych

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Maciej Oleksy Zenon Matuszyk

System pamięci. Pamięć wirtualna

Technologie obiektowe

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Transkrypt:

OPTYMALIZACJA MODELI SYMULACYJNYCH ZAMODELOWANYCH W JĘZYKU VERILOG HDL Z WYKORZYSTANIEM INTERFEJSU PLI Arkadiusz Bukowiec Roman Drożdżyński mgr inż. Agnieszka Węgrzyn Instytut Informatyki i Elektroniki, Politechnika Zielonogórska 1. WSTĘP W ciągu ostatnich lat spotkano się z gwałtownym rozwojem elektroniki i informatyki. Przyczyniło się to do projektowania coraz bardziej złożonych i skomplikowanych układów cyfrowych. Wraz ze złożonością wykonywanych układów coraz większą rolę w ścieżce projektowej zaczęły odgrywać języki opisu sprzętu, a w szczególności VHDL i Verilog. Zaletą zastosowania takich języków jest możliwość weryfikacji projektu na każdym etapie oraz przeprowadzenie złożonych testów bez konieczności fizycznej realizacji układu. Drugą, bardzo ważną zaletą jest możliwość przetestowania współpracy naszego projektu z istniejącymi już układami cyfrowymi lub nawet analogowymi poprzez użycie symulacyjnych modeli tych że układów. Przywiązanie projektantów do popularnych i powszechnie znanych języków programowania (np. C), spowodowało powstanie różnego typu interfejsów. Interfejsy te umożliwiają wywoływanie funkcji napisanych za pomocą języków programowania w modułach projektowanych za pomocą języków opisu sprzętu,. Chociaż rozwiązanie takie powoduje różnego rodzaju ograniczenia (np. układ nie jest syntezowalny) to ma ono duże zastosowanie przy tworzeniu układów czysto symulacyjnych jak i różnego rodzaju modułów testowych. 2. INTERFEJSY PROGRAMOWE Istnieje wiele interfejsów programowych wspierających projektowanie w językach opisu sprzętu. Najbardziej popularnymi są FLI utworzony dla VHDL a i PLI [1] dla Veriloga. Interfejs FLI stworzony został przez firmę ModelTech dla potrzeb symulatora ModelSim. Główną wadą tego interfejsu jest to, że jest on zaimplementowany tylko w tym symulatorze. Natomiast interfejs stanowi część standardu Veriloga IEEE 1364-1995, co powoduje, że jest on dostępny we wszystkich popularnych symulatorach. Interfejs ten umożliwia zastosowanie funkcji napisanych w języku C podczas tworzenia modułów w Verilogu. Dla potrzeb interfejsu, jego twórcy utworzyli

specjalne biblioteki z funkcjami [2] umożliwiającymi komunikacje z symulatorem oraz przekazywanie danych pomiędzy modułami Veriloga a funkcjami C. Interfejs PLI może być wykorzystywany do wykonywania skomplikowanych obliczeń lub tworzenia statystyk projektu, jednak najbardziej przydatna może być możliwość tworzenia bardzo skomplikowanych modułów symulacyjnych lub rozbudowanych funkcji testujących. 3. SYMULACJA UKŁADÓW ZAMODELOWANYCH W VERILOGU Często podczas projektowania modeli symulacyjnych w językach HDL nie zwraca się uwagi na to ile zasobów systemowych będzie potrzebnych do przeprowadzenia symulacji danego modułu. Powoduje to, że chociaż specyfikacja układu jest całkowicie zgodna z założeniami lub zachowaniem fizycznego układu, to nie jest on optymalny pod kontem symulacji. Problem ten może być nie zauważalny gdy symuluje się tylko jeden moduł, jednak gdy połączy się go z rozbudowanym projektem może się okazać że symulacja będzie trwała bardzo długo. Ponieważ modułów syntezowalnych nie można poddać optymalizacji pod kątem symulacji, jedynym sposobem na skrócenie czasu symulacji całego projekt jest zoptymalizowanie modułów symulacyjnych. Różne symulatory na różne sposoby przydzielają pamięć podczas symulacji projektu napisanego w Verilogu. Jednak najczęściej cały projekt jest ładowany do pamięci komputera w momencie inicjalizacji symulacji i jest on tam przetrzymywany przez cały okres jej trwania. Drugim, poważny problem może stanowić to, że do zaalokowania jednego bitu danych symulatory potrzebują od kilku do kilkunastu bitów. Ze względu, że najczęściej wykorzystywanymi modelami symulacyjnymi, wraz z projektem przeznaczonym do syntezy, są pamięci, problem symulacji zostanie omówiony właśnie na przykładzie pamięci RAM (rys. 1). module ram (WE, DATA, Q, ADDR); endmodule parameter word_size = 8; parameter mem_size = 65536; parameter addr_size = 16; output [(word_size-1):0] Q; input [(word_size-1):0] DATA; input [(addr_size-1):0] ADDR; input WE; reg [(word_size-1):0] ram_mem [0:(mem_size-1)]; always @(WE or ADDR or DATA) if (WE) ram_mem[addr] <= DATA; assign Q = ram_mem[addr]; Rys. 1. Moduł pamięci RAM w Verilogu

Ze względu na rozmiar, pamięci takie nie są implementowalne do struktur FPGA, jednak często wykorzystywane są przez układy projektowane za pomocą języków opisu sprzętu. W celu przyspieszenia ścieżki projektowej w trakcie symulacji tych projektów wykorzystuje się modele symulacyjne istniejących modeli pamięci. Pamięć taka również bardzo dobrze ilustruje przedstawione powyżej problemy związane z symulacją, chociaż dotyczą one wszystkich modułów opisanych w Verilogu. Do przeprowadzenia testów wykorzystano symulatory ModelSim, Active-HDL oraz Cadence. Jak można zauważyć moduł testowy jest typową 64 KB pamięcią RAM. Do przeprowadzenia symulacji wykorzystano moduł zawierający wymuszenia testowe napisany w Verilogu. Poprzez wymuszenia testowe dokonywano najpierw 255 zapisów do pamięci a następnie 255 odczytów. Podczas symulacji za pomocą różnych symulatorów zauważono, że projekt zajmował do 83 MB pamięci operacyjnej komputera. Wynik taki nie może być zadawalający. Jednocześnie gdy posiadany komputer dysponuje mniejszą ilością pamięci RAM system operacyjny zaczyna wykorzystywać plik wymiany utworzony na dysku co znacznie spowalnia czas symulacji. Zjawisko takie zaobserwowano po zwiększeniu pamięci opisanej w modelu testowym. Podobna sytuacja ma również miejsce gdy rozpocznie się symulacje systemu wykorzystującego ten lub podobny model pamięci. Zjawisko takie może więc znacznie spowolnić projektowanie układów cyfrowych, które w czasie symulacji wykorzystują nie zoptymalizowane symulacyjne modele wchodzące w skład przyszłego systemu. 4. WYKORZYSTANIE INTERFEJSU PLI Najbardziej nie pożądanym zjawiskiem, przedstawionym w poprzednim rozdziale, jest alokowanie kilku bitów dla jednego bitu zmiennej. Jednocześnie powszechnie wiadome jest, że języki programowania alokują jedne bit pamięci operacyjnej komputera dla jednego bitu zmiennej. Nasuwa się więc proste rozwiązanie aby zamodelować modele symulacyjne za pomocą języka programowania. Rozwiązanie takie umożliwia interfejs PLI zaimplementowany w symulatorach Veriloga. Jednocześnie dużą zaletą tego interfejsu jest to, że jest on u standaryzowany i ten sam kod można wykorzystać w różnych symulatorach. Przedstawiony kod testowy (Rys. 1) został zoptymalizowany poprzez przeniesienie deklaracji pamięci do kodu napisanego w języku C z wykorzystaniem biblioteki PLI. Jak można zauważyć pamięć została zastąpiona jednowymiarową tablicą 8-bitowych liczb naturalnych (Rys. 2). #define mem_sizes 65536 int8 ram_mem[mem_sizes]; Rys. 2. Deklaracja tablicy w kodzie C Jednemu słowu pamięci odpowiada więc jeden element tablicy. W przypadku tym wstępuje również zgodność adresowania gdyż tablice w języku C jest indeksowana od 0 do mem_size-1. Rozwiązanie to jest wręcz idealne dla wektorów i pamięci o standardowej długości słowa 8-, 16-, 32- i 64-bity, gdyż w tych

przypadkach można zastosować typy o odpowiedniej ilości bitów np. odpowiednio int8, int16, int32, int64. Dla innej, nie typowej, długości słowa można użyć typu o większej ilości bitów i nadmiarowe bity pozostawić nieużyteczne. Drugim sposobem jest stworzenie mniejszej tablicy i w jednym jej elemencie zapisywanie jednego słowo i części następnego (Rys. 3). ELEMENT 1 ELEMENT 2 ELEMENT 3 ELEMENT 4 SŁOWO 1 SŁOWO 2......SŁOWO 2 SŁOWO 3 SŁOWO 4 SŁOWO 5......SŁOWO 5 SŁOWO 6 Rys. 3. Schemat tablicy dla pamięci Przy rozwiązaniu takim dodatkowo należy napisać funkcje konwertującą adres pamięci na indeks tablicy. Wymaganie jest również utworzenie funkcji, która będzie maskowała odpowiednie bity w odczytanych elementach tablicy i ewentualnie składała je w jedno słowo. Rozwiązanie takie ma również jedną wadę jest ono wolniejsze gdyż wymaga dostępu do dwóch elementów tablicy podczas każdorazowego zapisu i odczytu. Może mieć ono jednak zastosowanie podczas tworzenia bardzo dużych pamięci. Zastosowanie pamięci zamodelowanej w PLI wymusza napisanie funkcji, które będą przekazywały dane to modułu Veriloga. Funkcje takie nie są skomplikowane, a przy ich pisaniu wykorzystuje się standardowe funkcje z biblioteki PLI, które umożliwiają taką komunikację. W przedstawionym przykładzie napisano dwie taki funkcje. Jedną do odczytu danych z pamięci Read_mem, a drugą do zapisu danych do pamięci Write_mem (Rys. 4). int Read_mem() { tf_putp(0, ram_mem[tf_getp(1)]); return 0; } static Write_mem() { ram_mem[tf_getp(1)] = tf_getp(2); return 0; } Rys. 4. Funkcje do komunikacji z modułem Veriloga Do przeprowadzenia testów utworzono drugi moduł (Rys. 5) pamięci w którym zamiast zapisu do pamięci umieszczono wywołanie funkcji Read_mem, a w miejsce odczytu wywołnie funkcji Write_mem.

module ram_pli (WE, DATA, Q, ADDR); parameter word_size = 8; parameter addr_size = 17; output [(word_size-1):0] Q; reg [(word_size-1):0] Q; input [(word_size-1):0] DATA; input [(addr_size-1):0] ADDR; input WE; always @(WE or ADDR or DATA) if (WE) $write_mem(addr, DATA); always @(WE or ADDR or DATA) Q = $read_mem(addr); endmodule Rys. 5. Moduł pamięci z wykorzystaniem funkcji PLI Podczas symulacji modułu wykorzystującego interfejs PLI wykryto, że wykorzystanie pamięci operacyjnej komputera spadło do 117 kb. Zauważyć można, że wyniki taki jest nieporównanie mniejszy (Rys. 6). 100000 80000 60000 40000 20000 m oduł bez PLI m oduł z PLI 0 RAM Rys. 6. Obszar alokowanej pamięci przez symulator (w KB) Spowodowało to, że nawet symulacja bardzo rozbudowanych modeli nie wymaga od systemu wykorzystania pliku wymiany co przyczynia się do skrócenia czasu symulacji. Jednocześnie zaobserwowano, że czas ładowania projektu do pamięci komputera zmniejszył się przynajmniej o połowę. Zjawiska te były zauważalne przy wszystkich testowanych symulatorach. Zastosowanie interfejsu PLI w modułach symulacyjnych znacznie zmniejsza zużycie zasobów systemowych oraz czas trwania procesu symulacji. Oszczędności te mogą umożliwić symulację bardziej rozbudowanych projektów, a co za tym idzie przyspieszyć proces ich projektowanie oraz zmniejszyć ryzyko błędu poprzez emulację środowiska pracy opisanego w modelach symulacyjnych z zastosowaniem interfejsu PLI.

5. PODSUMOWANIE W referacie przedstawiono optymalizacji symulacji za pomocą wykorzystania interfejsu PLI oraz ukazano przewagę tego rozwiązania nad standardowym, nie wykorzystującym funkcji napisanych w PLI. Podkreśla również duże znaczenie symulacji modeli opisanych w językach HDL oraz realizację ich z wykorzystaniem interfejsów wspomagających projektowanie. Projekt realizowany był w ramach prac Koła Naukowego fantasic oraz praktyki studenckiej odbytej w firmie Aldec Inc. Dalsze prace związane z wykorzystaniem interfejsu PLI będą dążyły do utworzenia funkcji emulujących zachowanie całego środowiska pracy oraz rozbudowanych funkcji ułatwiających testowanie modeli zaprojektowanych w języku Verilog. LITERATURA I MATERIAŁY 1. Institute of Electrical and Electronics Engineers, IEEE standard 1364-1995 IEEE Standard Hardware Description Language Based on the Verilog Hardware Description Language, New York, 1996 2. Swapnajit Mittra, Principles of Verilog PLI, Kluwer Academic Publishers, 1999 3. http://www.aldec.com 4. http://www.modelsim.com