Instancjonowanie modułu
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 33 z 90.
Instancjonowanie modułu to proces tworzenia kopii modułu wewnątrz innego modułu. W ten sposób budujesz większe projekty, łącząc ze sobą mniejsze komponenty.
Po zdefiniowaniu modułu możesz użyć go wewnątrz innego modułu. Nazywa się to instancjonowaniem. Każde instancjonowanie tworzy osobną instancję tego modułu. Możesz o tym myśleć jak o użyciu projektu do zbudowania wielu kopii tego samego komponentu.
Podstawowa składnia
module_name instance_name (connections);| Część | Znaczenie |
|---|---|
module_name | Nazwa modułu do utworzenia instancji |
instance_name | Unikalna nazwa tej kopii |
connections | Sygnały podłączone do portów modułu |
Prosty przykład
Krok 1: Zdefiniuj moduł
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleKrok 2: Utwórz jego instancję w innym module
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleOto, co dzieje się w tym kodzie:
and_gate: nazwa modułu, którego chcemy użyć (musi gdzieś istnieć)gate1: unikalna nazwa nadana tej konkretnej instancji(x, y, z): sygnały, które łączymy z portami modułu (w tej samej kolejności, w jakiej pojawiają się w definicji modułu)
Pierwszy sygnał x łączy się z pierwszym portem a. Drugi sygnał y łączy się z drugim portem b. Trzeci sygnał z łączy się z trzecim portem c.
Musisz przekazać sygnały do modułu. Nawiasy nie mogą być puste. Liczba sygnałów musi odpowiadać liczbie portów.
Wiele instancji
Możesz utworzyć wiele kopii tego samego modułu:
module top;
wire out1, out2;
wire sig1, sig2, sig3, sig4;
and_gate gate1 (sig1, sig2, out1);
and_gate gate2 (sig3, sig4, out2);
endmoduleKażda instancja ma własną nazwę (gate1, gate2) i własne połączenia. Działają niezależnie.
Co dzieje się podczas tworzenia instancji
- Tworzona jest kopia sprzętu
- Każda instancja ma własny zestaw sygnałów
- Instancje działają równolegle (jednocześnie)
- Sygnały, które przekazujesz, określają, jak instancje łączą się z pozostałą częścią projektu
Zasady tworzenia instancji
| Zasada | Dlaczego |
|---|---|
| Nazwa instancji musi być unikalna | Aby odróżnić kopie |
| Moduł o podanej nazwie musi istnieć | Musi być zdefiniowany w innym miejscu |
| Liczba połączeń musi odpowiadać liczbie portów | W przeciwnym razie Verilog nie wie, co z czym połączyć |
| Kolejność połączeń musi odpowiadać kolejności portów | Pierwszy sygnał łączy się z pierwszym portem itd. |
Wyzwanie
Uzupełnij kod, tworząc instancję modułu or_gate.
Co zrobić:
- Utwórz instancję
or_gateo nazwieor1 - Przekaż sygnały we właściwej kolejności:
input_a,input_b,output_y
Spróbuj swoich sił
module or_gate (
input in1,
input in2,
output result
);
assign result = in1 | in2;
endmodule
module top (
input input_a,
input input_b,
output output_y
);
// TODO: Utwórz instancję or_gate o nazwie or1
// Przekaż sygnały w kolejności: input_a, input_b, output_y
// Nie używaj składni .port(signal)
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online