Kurs Verilog cz.2 – moduł

Wpis w kategorii [ Verilog ]

XORNajważniejszym elementem każdego projektu w języku Verilog jest moduł. Wszystkie deklaracje, instrukcje, procesy itp. znajdują się wewnątrz modułu. Stanowi on abstrakcyjny model układu, lub danej części układu. Można go sobie wyobrazić, jako czarną skrzynkę z interfejsem wejściowym, wyjściowym oraz pewną funkcjonalnością.

Moduł może opisywać układ o dowolnej złożoności. Mogą to być podstawowe bramki logiczne, liczniki, sterowniki, a także bardziej skomplikowane układy jak mikroprocesory, sprzętowe kodeki wizyjne itp.

Najczęściej złożone układy dzieli się na mniejsze części, z których każdą można opisać w osobnym module. Dostarcza się w ten sposób prostych bloków funkcjonalnych, które później mogą być wykorzystane w wielu miejscach projektu.

1. Budowa modułu

Deklaracja modułu rozpoczyna się słowem kluczowym module po której podawana jest jego nazwa. Koniec modułu wyznacza słowo kluczowe endmodule.

Wygląda to mniej więcej tak:

module <nazwa_modułu> (<opcjonalna_lista_portów>);
...
endmodule

Nazwa modułu

Nazwa modułu nie może być słowem kluczowym języka Verilog oraz nie może zaczynać się od cyfry. Prawidłowa nazwa może się składać z liter, cyfr oraz znaków _ oraz $. Ważna jest także wielkości liter w nazwie, dlatego przykładowa nazwa Adder nie jest równoważna nazwie adder.

Porty

Po nazwie modułu w nawiasie podajemy nazwy portów w jakie ma być wyposażony moduł. Rolę portu tzn. czy ma on być wejściowy, wyjściowy, czy dwukierunkowy określa się w ciele modułu (można też inaczej, ale o tym później). Kolejność deklarowania portów jest dowolna.

<funkcja_portu> <nazwa_portu>;

Port może pełnić jedną z trzech funkcji:

  • input – wejście,
  • output – wyjście,
  • inout – port dwukierunkowy

Przykład:

module and3 (x1, x2, x3, y);
 
input x1, x2, x3;
output y;
 
assign y = x1 & x2 & x3;
 
endmodule

Powyższy przykład przedstawia realizację 3-wejściowej funkcji AND. Słowo kluczowe assign oznacza „przypisz”, czyli przypisujemy sygnałowi y kombinację sygnałów x1, x2 oraz x3.

Komentarze

W języku Verilog dozwolone są komentarze znane z języka C, czyli: blokowy znajdujący się pomiędzy znacznikami /* oraz */, a także jedno liniowy zaczynający się od //.

2. Instancja

Czym jest instancja? Instancja jest, mówiąc kolokwialnie, powołanym do życia modułem. Podobnie jak w języku obiektowym np. C++, mamy osobne pojęcia stanowiące klasę i obiekt. Klasa stanowi pewien opis, a obiekt jest już istniejącym w programie tworem, stworzonym na podstawie tej klasy.

W przypadku języka Verilog moduł stanowi opis, a instancja jego wywołanie. Zobaczmy na przykładzie. Mamy dwa moduły (moduły jest najlepiej definiować w osobnych plikach, ale nie jest to obowiązek), gdzie drugi z nich wywołuje dwie instancje (a1 oraz a2) pierwszego.

module add3 (x1, x2, x3, y);
 
input x1, x2, x3;
output y;
 
assign y = x1 & x2 & x3;
 
endmodule
module box(x1, x2, x3, x4, x5, x6, y);
 
input x1, x2, x3, x4, x5, x6;
output y;
 
wire y1, y2;
 
add3 a1(x1, x2, x3, y1);
add3 a2(x4, x5, x6, y2); 
 
assign y = y1 | y2;
 
endmodule

Każda z instancji musi posiadać własną unikalną nazwę. Wywołując instancję nie musimy połączać wszystkich wejść oraz wyjść. Jeśli któreś z nich opuścimy, syntezer odpowiednio zoptymalizuje układ wycinając niepotrzebną część (jeśli niczego nie podłączymy wycięty zostanie cała instancja).

Ale to jest już wiedza dla średniozaawansowanych.

PS.

Ten inny, według mnie wygodniejszy sposób definiowania portów wygląda następująco:

module and3 (
input x1, x2, x3,
output y
);
 
assign y = x1 & x2 & x3;
 
endmodule

Dzięki takiemu zapisowi wystarczy opisać porty w jednym miejscu, co ułatwia wszelkie zmiany. Zauważ, że poszczególne nazwy portów oddzielone są przecinkiem, natomiast po ostatniej przecinka już nie ma.

Oceń ten wpis:
1 gwiazdka2 gwiazdki3 gwiazdki4 gwiazdki5 gwiazdek (głosów: 5, średnia ocen: 4,40)
Loading ... Loading ...
Wyświetleń: 5 237

Podobne artykuły

Możesz śledzić komentarze do tego wpisu poprzez kanał RSS 2.0. Możesz także dodać własny komentarz, lub trackback z własnej strony WWW.

Dodaj komentarz