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;
endmoduleInstancjacja z mapowaniem portów według kolejności:
or_gate or1 (input_a, input_b, output_y);To łączy:
- Pierwszy sygnał
input_a→ pierwszy portin1 - Drugi sygnał
input_b→ drugi portin2 - Trzeci sygnał
output_y→ trzeci portresult
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
| Cecha | Według nazw | Według kolejności |
|---|---|---|
| Składnia | .port(signal) | signal1, signal2 |
| Czy kolejność ma znaczenie? | Nie | Tak |
| Czy kod dokumentuje się sam? | Tak | Nie |
| Ryzyko pomyłek | Niskie | Wysokie |
| Zalecane dla | Większości projektów | Tylko 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.
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):
input en(sygnał włączający)input [7:0] d(wejście danych)output [7:0] q(wyjście danych)
Sygnały do podłączenia:
enable_signal→ podłącz doendata_input→ podłącz doddata_output→ podłącz doq
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)
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