Konwencje językowe Verilog-a APSC

Podobne dokumenty
Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

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

Wykład 2. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Projektowanie Scalonych Systemów Wbudowanych VERILOG

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

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Wykład 6. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

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

Laboratorium Podstaw Techniki Cyfrowej

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Systemy wbudowane. Projektowanie systemów wbudowanych na bazie układów CPLD/FPGA Język opisu sprzętu Verilog cz.1

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.

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

Verilog HDL. Język Opisu Sprzętu Hardware Description Language Część I. Elementy języka. dr inż. Paweł Tomaszewicz H D L

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wykład 4. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Język Verilog w projektowaniu układów FPGA

Wstęp do programowania

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

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

1 Podstawy c++ w pigułce.

Zmienne, stałe i operatory

Języki projektowania HDL

Synteza logiczna APSC

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

Struktury, unie, formatowanie, wskaźniki

Języki projektowania HDL

Verilog HDL. część I i II

1 Podstawy c++ w pigułce.

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

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

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

Wykład 5. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Programowanie strukturalne i obiektowe

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

SYSTEMY LICZBOWE 275,538 =

Mikrokontroler ATmega32. Język symboliczny

Podstawy programowania w C++

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

bocznej Tabela stanów sterownika Światła na drodze:

Pracownia Komputerowa wykład IV

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Podstawy programowania w języku C i C++

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

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

Wykład 7. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń. Obsługa plików. Składnia Veriloga: Komórki prymitywne użytkownika

Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Język FBD w systemie Concept

Arytmetyka liczb binarnych

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Programowanie Niskopoziomowe

MATERIAŁY DO ZAJĘĆ II

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Mikrooperacje. Mikrooperacje arytmetyczne

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Cyfrowy zapis informacji

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Pracownia Komputerowa wyk ad IV

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

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

Podstawy Programowania C++

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Powtórka algorytmów. Wprowadzenie do języka Java.

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Wykład 3. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Wstęp do programowania. Różne różności

Microsoft IT Academy kurs programowania

Program w C. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka :28:

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

Sumatory H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Wykład 4. Języki Opisu Sprzętu

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Program w C. wer. 12 z drobnymi modyfikacjami! Wojciech Myszka :59:

Język C zajęcia nr 11. Funkcje

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Inżynieria Wytwarzania Systemów Wbudowanych

Systemy zapisu liczb.

Powtórka algorytmów. Wprowadzenie do języka Java.

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Język ludzki kod maszynowy

1. Wprowadzanie danych z klawiatury funkcja scanf

dr inż. Jarosław Forenc

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Transkrypt:

Konwencje językowe Verilog-a APSC Podstawowe konwencje są takie same jak w C. Elementami języka są: komentarze, ograniczniki, liczby, ciągi znaków, identyfikatory i słowa kluczowe. Verilog rozróżnia małe i duże litery. Słowa kluczowe pisane są małymi literami. Spacje Spacje \b, tabulatory \t i zakończenia linii \n. Są ignorowane za wyjątkiem sytuacji gdy rozdzielają elementy języka. Wewnątrz stringów nie są ignorowane. Komentarze Jedna linia zaczyna się od // Wiele linii od /* do */. Nie mogą być zagnieżdżane. Operatory Jednoargumentowe, dwuargumentowe, trójargumentowe a = ~b; A = b && c; A = b? C : d;

Konwencje językowe Verilog-a APSC Liczby (1 z 3) Z wymiarem: <rozmiar> <format><liczba> <rozmiar> - liczba dziesiętna określająca ilość bitów w liczbie <format> - D lub d dziesiętny H lub h szesnastkowy B lub b dwójkowy O lub o ósemkowy <liczba> - sekwencja znaków od 1 do f. Małe i duże litery są nierozróżnialne. 4 b111 //czterobitowa liczba dwójkowa 12 habc //dwunastobitowa liczba szesnastkowa 16 d255 //szesnastobitowa liczba dziesiętna Bez wymiaru: Jeżeli nie podajemy <rozmiar> to liczba ma 32 bity długości (lub więcej o ile pozwala na to symulator i maszyna) Jeżeli nie podajemy <format> to liczba jest dziesiętna. 23456 //32-bitowa liczba dziesiętna habc //32-bitowa liczba szesnastkowa o255 //32-bitowa liczba dziesiętna

Konwencja językowe Verilog-a APSC Liczby (2 z 3) Wartości x lub z: Modelowanie rzeczywistych obwodów wymaga dwóch specjalnych wartości: x wartość nieokreślona (nieznana) z wartość wysokiej impedancji Symbole te określają 4-bity w zapisie szesnastkowym, 3 w ósemkowym, 1 w dwójkowym. Jeżeli wartości 0, x, z występują na najbardziej znaczącym miejscu, to liczba jest rozszerzana na wyższe bity także przez 0, x, z odpowiednio. 12 h13x 6 hx 32 bz //12-bitowa liczba szesnastkowa z 4 ostatnimi bitami nieokreślonymi //6-bitowa liczba szesnastkowa nieznanej wartości //32-bitowa liczba o wysokiej impedancji Ujemne: Do wyrażenia ujemnej liczby Verilog stosuje notację uzupełnienia do dwóch. Określa się je przez dodanie znaku minus przed rozmiarem liczby. Stosowanie znaku minus pomiędzy formatem a liczbą jest niepoprawne. -6 d3 //6-bitowa liczba ujemna przechowywana jako uzupełnienie do 2 liczby 3 6 d-2 //błędna specyfikacja

Uzupełnienie do dwóch APSC Definicja ogólna: Uzupełnieniem do p dla n-cyfrowej liczby N o podstawie p jest liczba: p n - N Wyrażenie to możemy przepisać w postaci p n N = [(p n 1) N] + 1 Wyrażenie w nawiasie kwadratowym nazywa się uzupełnieniem do (p 1) dla n-cyfrowej liczby N o podstawie p. Przykład: Uzupełnienie do p 1 = 1 dla liczby N = (1001) 2 wynosi: (p n 1) N = (2 4 1) 1001 = 1111 1001 = 0110 Wniosek 1: W celu uzyskania uzupełnienia do 1 dla liczby dwójkowej należy zanegować wszystkie jej cyfry. Wniosek 2: W celu uzyskania uzupełnienia do 2 dla liczby dwójkowej należy zanegować wszystkie jej cyfry a następnie dodać 1.

Uzupełnienie do dwóch APSC Uzupełnienie do 2 można również otrzymać, pozostawiając, od prawej strony do lewej, wszystkie zera i pierwszą jedynkę bez zmian i negując pozostałe cyfry. Przykład: Uzupełnienie do dwóch dla liczba 10010100 otrzymujemy przez: 10010 zanegowanie czyli wynikiem jest 01101100. 100 pozostawienie bez zmian Przykład: Odjąć M = (1010) 2 i N = (11001) 2 M = 1010 Uzupełnienie do dwóch dla N = +00111 Suma = 10001 Następnie należy wziąć uzupełnienie sumy i poprzedzić je znakiem minus: (-01111) 2 = 15 10

Konwencja językowe Verilog-a APSC Liczby (3 z 3) Znaki podkreślenia: Można stosować w liczbach. Jego rolą jest poprawienie czytelności długich liczb. Jest ignorowany przez Verilog. 12 b1111_0000_1010 //użycie podkreśleń dla poprawienia czytelności Znak zapytania: Są alternatywnym sposobem zapisywania wartości wysokiej impedancji wewnątrz liczb. 4 b10?? //równoważne do 4 b10zz

Konwencja językowe Verilog-a APSC Ciągi znaków Ciąg znaków jest ciągiem jednobajtowych wartości ASCII i zamknięty jest podwójnym cudzysłowem. Nie może zawierać znaków CR. Hello Verilog World a / b Identyfikatory Identyfikatory to nazwy nadawane obiektom w celu odwoływania się do nich z innych miejsc projektu. Składają się ze znaków alfanumerycznych, podkreślenia(_), dolara ($) i rozróżniają wielkość liter. Nie mogą się rozpoczynać od znaku ($) gdyż jest to zarezerwowane dla zadań systemowych. Identyfikatory muszą być różne od słów kluczowych. reg value; //reg słowo kluczowe, value - identyfikator input clk; //input słowo kluczowe, clk - identyfikator

package endpackage rtran rtranif0 module macromodule rtranif1 tran endmodule primitive tranif0 tranif1 endprimitive parameter strong0 strong1 Słowa kluczowe Veriloga Słowa kluczowe to identyfikatory zarezerwowane do celu definiowania konstrukcji językowych. Słowa kluczowe w Verilogu pisane są małymi literami. input output pull0 pull1 inout reg weak0 weak1 integer time highz0 highz1 real event small medium task endtask large function endfunction scalared vectored table endtable signed defparam when assign deassign wire wand force release wor tri initial always triand trior begin end trireg tri0 fork join tri1 supply0 if else supply1 case casez buf not casex endcase and nand default forever or nor repeat while xor xnor for wait bufif0 bufif1 posedge negedge notif0 notif1 edge disable nmos rnmos specparam realtime pmos rpmos strength cmos rcmos attribute endattribute pulldown pullup const use

Typy danych Veriloga APSC Wartość sygnału 0 zero logiczne fałsz 1 jedynka logiczna prawda X wartość nieznana Z wysoka impedancja, nie podłączone Moc sygnału Jest stosowana w układach cyfrowych dla rozwiązywania konfliktów między modułami sterującymi ten sam węzeł układu. Nazwa Moc Skrót supply0 7 Su0 strong0 6 St0 pull0 5 Pu0 large0 4 La0 weak0 3 We0 medium0 2 Me0 small0 1 Sm0 highz 0 HiZ0 highz1 0 HiZ1 small1 1 Sm1 medium1 2 Me1 weak1 3 We1 large1 4 La1 pull1 5 Pu1 strong1 6 St1 Cztery poziomy mocy typu sterującego (driving): supply, strong, pull, i weak. Sygnały z mocą sterującą pochodzą z wyjść bramek i przypisań ciągłych. Trzy poziomy mocy typu ładunkowego (storage): large, medium, and small. Moce sygnału typu zachowania ładunku pochodzą z węzłów typu trireg.

Typy danych Veriloga APSC Węzeł (net) Jest to klasa typów danych takich jak: wire, wand, wor, tri, triand, trior, trireg i inne. Słowo net nie jest słowem kluczowym. Węzeł reprezentuje połączenie między elementami sprzętu. Węzeł ma wartość w sposób ciągły sterowaną przez wyjście przyrządu (driver), do którego jest połączony. Najczęściej używanym typem węzła jest wire. Domyślną wartością węzła jest z (za wyjątkiem węzła typu trireg). wire a; wire [3,0] b; wire d = 1 b0; //deklaracja węzła a //deklaracja magistrali czterobitowej //deklaracja i ustawienie na stałe wartości zero Rejestr (reg) Rejestr reprezentuje element przechowujący informację. Należy rozróżnić dwie rzeczy: rejestr sprzętowy zbudowany z przerzutników, rejestr w Verilog-u czyli zmienną utrzymującą wartość. Rejestry w przeciwieństwie do węzłów nie potrzebują układów sterujących. Zmienna typu reg może zmieniać wartość w każdej chwili symulacji przez przypisanie nowej wartości (nie jest potrzebny zegar jak w rejestrze sprzętowym). Domyślną wartością zmiennej typu reg jest x. reg reset; //deklaracja zmiennej reset initial begin reset = 1 b1; //inicjacja zmiennej reset na 1 #100 reset = 1 b0; //po 100 jednostkach czasu reset jest zerowany end

Typy danych Veriloga APSC Wektory Węzły i dane typu reg mogą być deklarowane jako wektory. Nawiasy kwadratowe pomiędzy słowem kluczowym a nazwą zmiennej określają ilość bitów i ich kolejność. Pierwsza liczba w nawiasach zawsze oznacza najbardziej znaczący bit. wire a; wire [7:0] bus; wire [31:0] busa, busb, busc; reg clock; reg [0:40] virtual_addr; //deklaracja węzła a //deklaracja magistrali 8-bitowej bus //trzy magistrale 32-bitowe //skalarny rejestr //wektor rejestrowy 41-bitowy Jak odwoływać się do tak zadeklarowanych zmiennych? busa[7] //najbardziej znaczący bit magistrali busa bus[2:0] //trzy najmniej znaczące bity wektora bus bus[0:2] //niepoprawne odwołanie gdyż najbardziej znaczący bit //zawsze musi stać po lewej stronie zakresu specyfikacji virtual_addr[0:1]//dwa najbardziej znaczące bity wektora virtual_addr

Typy danych Veriloga APSC Typ rejestrowy integer Wartości typu reg są bez znaku (unsigned). Wartości typu integer są ze znakiem (signed). Wygodniejsze np. do zliczania. Typowa szerokość: 32 bity. integer counter; initial counter = -1; //deklaracja zmiennej counter //-1 wpisano do counter Typ rejestrowy real Liczby rzeczywiste mogą być w notacji dziesiętnej (decimal) lub naukowej (scientific). Kiedy wartość zmiennej real jest przypisywana do zmiennej typu integer jest ona zaokrąglana do najbliższej wartości całkowitej. real delta; //deklaracja zmiennej rzeczywistej initial delta = 4e10; //przypisanie w notacji naukowej delta = 2.13; //przypisanie w notacji dziesiętnej end integer i; initial i = delta; //i otrzymuje wartość 2 (zaokrąglone 2.13)

Typy danych Veriloga APSC Typ rejestrowy time Symulacje prowadzone są względem czasu symulacji. Jest on przechowywany w specjalnym rejestrze time. Jest on co najmniej 64-bitowy. Funkcja systemowa $time służy do określania bieżącego czsu symulacji. Czas symulacji jest mierzony w sekundach symulacyjnych. Związanie tego czasu z rzeczywistym czasem upływającym w prawdziwym układzie cyfrowym odbywa się przez zdefiniowanie skali czasowej. Można to zrobić oddzielnie dla każdego modułu za pomocą dyrektywy kompilatora `timescale. time save_sim_time; initial save_sim_time = $time; //deklaracja zmiennej czasowej //zapamiętaj bieżący czas symulacji

Typy danych Veriloga APSC Tablice (arrays) W Verilogu możliwe są tylko tablice jednowymiarowe. Należy je odróżnić od wektorów. Wektor to element n-bitowy, podczas gdy tablica jest obiektem wieloelementowym złożonym z 1- lub n-bitowych elementów. integer count[0:7] //zmienna tablicowa o 8-u elementach integer reg bool[31:0] //zmienna tablicowa o 32-u elementach reg time chk_point[1:100] //tablica 100 punktów czasowych reg [4:0] port_id[0:7] //tablica 8 wektorów 5-bitowych typu reg count[5] chk_point[100] port_id[3] //warość 5-ego elementu w tablicy count //warość 100-ego elementu czasowego w tablicy chk_point //5-bitowa wartość 3-ego elementu w tablicy port_id Pamięci (memories) Są to tablice rejestrów. Każdy element tablicy to jedno słowo. Słowo jest dostępne poprzez adres, którym jest indeks tablicy. reg mem1bit[0:1023] //pamięć o pojemności 1K 1-bitowych słów reg [7:0] membyte[0:1023] //pamięć o pojemności 1K 8-bitowych słów membyte[511] //pobranie 1 bajtowego słowa spod adresu 511

Typy danych Veriloga parameter APSC Parametry Stałe definiowane w module. Parametry nie mogą być używane jak zmienne. Umożliwiają indywidualizację realizacji modułów przez nadpisywanie zwartości parametrów w czasie kompilacji. Robi się to na dwa sposoby. Wykorzystanie parameter przy użyciu komendy defparam Każdy parametr może być w ten sposób nadpisywany w module wielokrotnie. //definicja modułu hello_world module hello_world() parameter id_num = 0; //definicja numeru id modułu z wartością 0 initial //wyświetlanie numeru id $display( Wyświetlam numer id = %d, id_num); endmodule //definicja modułu top module top //zmiana wartości id_num w urealnianych modułach za pomocą defparam //wykorzystano nazwy hierarchiczne defparam w1.id_num=1, w2.id_num=2; //dwie realizacje modułu hello_world hello_world w1(); hello_world w2(); endmodule Wynik symulacji: Wyświetlam numer id = 1 Wyświetlam numer id = 2

Typy danych Veriloga parameter APSC Wykorzystanie parameter przez przypisywanie wartości w czasie urealniania modułu //inaczej napisany top moduł module top //dwie realizacje modułu hello_world z różnymi wartościami jedynego parametru hello_world #(1) w1(); //wartość 1 dla parametru id_num w realizacji w1 hello_world #(2) w2(); //wartość 2 dla parametru id_num w realizacji w2 endmodule Jeżeli w module zdefiniowana wiele parametrów to przy urealnianiu należy przestrzegać ich kolejności definiowania. Jeżeli wartość nie jest podawana to obowiązuje wartość domyślna z definicji modułu. //definicja modułu module bus_master parameter delay1 = 2; parameter delay2 = 4; parameter delay3 = 7;... <wnętrze modułu>... endmodule //top moduł module top bus_master #(4,5,6) b1(); //delay1 = 4, delay2 = 5, delay3 = 6 bus_master #(9,5) b2(); //delay1 = 9, delay2 = 5, delay3 = 7(domyślne) endmodule

Typy danych Veriloga string APSC Ciągi znaków (stringi) Mogą być przechowywane w rejestrach reg. Rejestr musi być odpowiedniej długości. Każdy znak to 1 bajt. Jeśli rejestr jest za długi to z lewej strony string jest uzupełniany zerami. Jeśli jest za krótki to znaki z lewej strony są obcinane. Verilog nie przechowuje znaku zakończenia stringu, więc nie jest potrzebny dodatkowy bit. module string_test; reg [8*14:1] stringvar; //deklaracja zmiennej o szerokości 14 bajtów initial begin stringvar = Hello world ; //mieści się z zapasem trzech znaków $display( %s is stored as %h,stringvar,stringvar); stringvar = {stringvar,!!! }; $display( %s is stored as %h,stringvar,stringvar); end endmodule Przykład dodatkowo demonstruje manipulacje na stringach za pomocą operatora dołączania (concatenation). Rezultatem wykonania tego modułu jest: Hello world is stored as 00000048656c6c6f20776f726c64 Hello world!!! is stored as 48656c6c6f20776f726c64212121

Typy danych Veriloga string APSC Znaki specjalne w stringach mogą być wyświetlane w stringach jeśli są poprzedzone znakiem backslash (\), \n \t \\ \ \ooo %% Znak nowej linii Znak tabulacji slash Podwójny cudzysłów Znak zapisany jako 1 do 3 cyfrowa liczba oktalna Znak procenta

Zadania systemowe APSC Zadania systemowe (system task) Wywołuje się w postaci $<słowo_kluczowe> Wyświetlanie informacji $display(p1, p2,..., pn); $write(p1, p2,..., pn); p1, p2,..., pn zmienne, wyrażenia, ciągi znaków ujęte w cudzysłów Różnica między $display a $write polega na tym, że pierwszy na końcu stringu domyślnie wstawia koniec linii a drugi nie. Dla wyświetlenie kilku stringów w jednej linii używamy $write. %h lub %H %d lub %D %o lub %O %b lub %B %c lub %C %v lub %V %m lub %M %s lub %S %t lub %T %f lub %F %e lub %E %g lub %G heksadecymalnie dziesiątkowo oktalnie binarnie znak ASCII moc sygnału w węźle nazwy hierarchiczne stringi bieżący czas liczby rzeczywiste w sposób dziesiętny liczby rzeczywiste w sposób wykładniczy liczby rzeczywiste w sposób dziesiętny lub wykładniczy, tak aby było krócej

Zadania systemowe $display APSC module disp; initial begin $display("\\\t%%\n\"\123"); end endmodule Verilog-XL wyświetli: Highest level modules: disp \ % "S module printval; reg [11:0] r1; initial begin r1 = 10; $display( "Printing with maximum size - :%d: :%h:",r1,r1 ); $display( "Printing with minimum size - :%0d: :%0h:",r1,r1 ); end endmodule Verilog-XL wyświetli: Highest level modules: printval Printing with maximum size - : 10: :00a: Printing with minimum size - :10: :a: 6 simulation events

Zadania systemowe $display APSC module disp; reg [31:0] rval; pulldown (pd); initial begin rval = 101; $display("rval = %h hex %d decimal",rval,rval); $display("rval = %o octal %b binary",rval,rval); $display("rval has %c ascii character value",rval); $display("pd strength value is %v",pd); $display("current scope is %m"); $display("%s is ascii value for 101",101); $display("simulation time is %t", $time); end endmodule Verilog-XL wyświetli: Highest level modules: disp rval = 00000065 hex 101 decimal rval = 00000000145 octal 00000000000000000000000001100101 binary rval has e ascii character value pd strength value is StX current scope is disp e is ascii value for 101 simulation time is 0

Zadania systemowe $monitor APSC Monitorowanie informacji $monitor(p1, p2,..., pn); p1, p2,..., pn zmienne, nazwy sygnałów, ciągi znaków ujęte w cudzysłów W sposób ciągły monitoruje wartości zmiennych i sygnałów i wyświetla ich wartości w momentach zmiany choć jednego z parametrów. Zadanie to wystarczy wywołać tylko raz. Drugie wystąpienie zadania $monitor powoduje deaktywację poprzedniego. Dwa pomocnicze zadania systemowe: $monitoron; aktywacja zadania $monitor (domyślne) $monitoroff; deaktywacja zadania $monitor //monitorowanie wartości czasu i sygnałów zegara i resetu initial begin $monitor($time, Wartości sygnałów clock = %b reset = %b, clock, reset); end 0 Wartości sygnałów clock = 0 reset = 1 5 Wartości sygnałów clock = 1 reset = 1 10 Wartości sygnałów clock = 0 reset = 0

Zadania systemowe $stop $finish APSC Zatrzymywanie symulacji $stop Zawiesza symulację i wprowadza tryb interaktywny np. w celu analizy sygnałów w projekcie. Zakańczanie symulacji $finish Kończy symulację.

Dyrektywy kompilatora `define APSC Dyrektywy kompilatora Definiuje się w postaci `<słowo_kluczowe> Definiowanie makra tekstowego `define <nazwa_makro> <wartość> Rola i działanie podobne jak #define w C. //definicja makra określającego domyślną długość słowa //wywołanie: `WORD_SIZE `define WORD_SIZE 32 //alias gdziekolwiek pojawi się `S wstawione zostanie $stop `define S $stop //często używany ciąg znaków `define WORD_REG reg [31:0] //definicja 32-bitowego rejestru: `WORD_REG reg32;

Dyrektywy kompilatora `include APSC Wstawianie pliku źródłowego `include <nazwa_pliku> Rola i działanie podobne jak #include w C. //wstaw plik header.v zawierający deklaracje `include header.v... <kod Verilog a>...