Menu
CoddyTech

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. Pomyśl o tym jak o używaniu projektu do zbudowania wielu kopii tego samego komponentu.

Podstawowa składnia

module_name instance_name (connections);
CzęśćZnaczenie
module_nameNazwa modułu do utworzenia instancji
instance_nameUnikalna nazwa tej kopii
connectionsSygnały połączone z portami modułu

Prosty przykład

Krok 1: Zdefiniuj moduł

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

Krok 2: Utwórz jego instancję w innym module

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

Oto, 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 występują 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.

Przekaż jeden sygnał dla każdego portu. Verilog akceptuje również mniej sygnałów, nawet puste nawiasy, ale każdy port bez sygnału pozostaje wtedy niepodłączony i nie jest połączony z niczym w Twoim projekcie. Przekazanie większej liczby sygnałów, niż moduł ma portów, jest błędem.

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);
endmodule

Każ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 resztą Twojego projektu

Zasady tworzenia instancji

ZasadaDlaczego
Nazwa instancji musi być unikalnaAby odróżnić kopie
Nazwa modułu musi istniećMusi być zdefiniowana w innym miejscu
Przekaż jeden sygnał na portPort bez sygnału pozostaje niepodłączony, a większa liczba sygnałów niż portów powoduje błąd
Kolejność połączeń musi odpowiadać kolejności portówPierwszy sygnał łączy się z pierwszym portem itd.
challenge icon

Wyzwanie

Uzupełnij kod, tworząc instancję modułu or_gate.

Co należy zrobić:

  1. Utwórz instancję or_gate o nazwie or1
  2. Przekaż sygnały w prawidłowej 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)
  

endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online