Menu
Coddy logo textTech

Mapowanie portów według kolejności

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 35 z 90.

W poprzedniej lekcji poznaliście mapowanie portów według nazw, w którym jawnie oznacza się każde połączenie za pomocą .port(signal). Teraz omówimy alternatywną metodę: mapowanie portów według kolejności.

Łączy sygnały z portami modułu na podstawie kolejności, w jakiej pojawiają się w definicji modułu. Wystarczy wymienić sygnały w nawiasach, a Verilog dopasuje je po kolei.

Składnia:

module_name instance_name (signal1, signal2, signal3);

Pierwszy sygnał łączy się z pierwszym portem, drugi z drugim portem i tak dalej.

Przykład

Definicja modułu:

module or_gate (
  input in1,      // Pierwszy port
  input in2,      // Drugi port
  output result   // Trzeci port
);
  assign result = in1 | in2;
endmodule

Instancjacja z mapowaniem portów według kolejności:

or_gate or1 (input_a, input_b, output_y);

To łączy:

  • Pierwszy sygnał input_a → pierwszy port in1
  • Drugi sygnał input_b → drugi port in2
  • Trzeci sygnał output_y → trzeci port result

Kolejność ma znaczenie

Przy mapowaniu portów według kolejności sekwencja ma kluczowe znaczenie:

// Poprawna kolejność
or_gate or1 (input_a, input_b, output_y);

// Błędna kolejność - sygnały podłączone do niewłaściwych portów!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

Jeśli pomylisz kolejność, połączenia trafią do niewłaściwych portów. Może to być trudne do zdebugowania, ponieważ na pierwszy rzut oka kod wygląda poprawnie.

Mapowanie portów według nazw a według kolejności

CechaWedług nazwWedług kolejności
Składnia.port(signal)signal1, signal2
Czy kolejność ma znaczenie?NieTak
Czy kod dokumentuje się sam?TakNie
Ryzyko pomyłekNiskieWysokie
Zalecane dlaWiększości projektówTylko prostych przypadków

Kiedy używać mapowania portów według kolejności

Mapowanie portów według kolejności jest dopuszczalne, gdy:

  • Moduł ma bardzo mało portów (2-3)
  • Kolejność portów jest oczywista i raczej się nie zmieni
  • Piszesz szybkie testbenche

W przypadku większości projektów preferowane jest mapowanie portów według nazw, ponieważ jest czytelniejsze i mniej podatne na błędy.

challenge icon

Wyzwanie

Uzupełnij instancję, wypisując sygnały w prawidłowej kolejności, używając mapowania portów według kolejności.

Co zrobić:

Porty modułu (w tej kolejności):

  1. input en (sygnał włączający)
  2. input [7:0] d (wejście danych)
  3. output [7:0] q (wyjście danych)

Sygnały do podłączenia:

  • enable_signal → podłącz do en
  • data_input → podłącz do d
  • data_output → podłącz do q

Spróbuj swoich sił

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: Utwórz instancję register o nazwie reg1, używając mapowania ORDER
  // Wymień sygnały we właściwej kolejności: enable_signal, data_input, data_output
  // 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