Mapowanie portów według nazw
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 34 z 90.
W poprzedniej lekcji dowiedziałeś się, jak utworzyć instancję modułu, przekazując sygnały w tej samej kolejności, w jakiej porty występują w definicji modułu. To działa, ale ma pewien problem: kolejność ma znaczenie.
Jeśli przypadkowo pomylisz kolejność, sygnały zostaną podłączone do niewłaściwych portów. Może to utrudnić debugowanie.
Problem z mapowaniem pozycyjnym
module or_gate (
input in1,
input in2,
output result
);
assign result = in1 | in2;
endmodule
// Przyporządkowanie według kolejności — kolejność MUSI się zgadzać
or_gate or1 (input_a, input_b, output_y); // Poprawnie
or_gate or1 (input_b, input_a, output_y); // Błąd! Zamienione wejściaDruga linia łączy input_b z in1 i input_a z in2: to subtelny błąd, który łatwo przeoczyć.
Rozwiązanie: mapowanie portów według nazw
Mapowanie portów według nazw wykorzystuje nazwę portu do tworzenia połączeń. Kolejność nie ma znaczenia, ponieważ każde połączenie jest wyraźnie oznaczone.
Składnia:
module_name instance_name (
.port_name(signal),
.port_name(signal)
);Kropka . przed nazwą portu wskazuje, że odwołujemy się do portu wewnątrz modułu. Sygnał w nawiasach jest tym, co z nim łączymy.
Przykład
or_gate or1 (
.in1(input_a),
.in2(input_b),
.result(output_y)
);To mówi wprost:
- Port
in1otrzymuje sygnałinput_a - Port
in2otrzymuje sygnałinput_b - Port
resultotrzymuje sygnałoutput_y
Kolejność nie ma znaczenia
Przy mapowaniu portów według nazw możesz zapisać połączenia w dowolnej kolejności:
// Wszystkie trzy są IDENTYCZNE
or_gate or1 (
.in1(input_a),
.in2(input_b),
.result(output_y)
);
or_gate or1 (
.result(output_y),
.in1(input_a),
.in2(input_b)
);
or_gate or1 (
.in2(input_b),
.result(output_y),
.in1(input_a)
);Wszystkie robią dokładnie to samo, ponieważ każde połączenie jest opisane etykietą.
Wyzwanie
Dokończ instancję, dodając brakujące połączenia portów za pomocą mapowania portów według nazw.
Co zrobić:
- Połącz port
clkz sygnałemclock_signal - Połącz port
data_inz sygnałeminput_data - Połącz port
data_outz sygnałemoutput_data
Spróbuj swoich sił
module register (
input clk,
input [7:0] data_in,
output reg [7:0] data_out
);
always @(posedge clk) begin
data_out <= data_in;
end
endmodule
module top (
input clock_signal,
input [7:0] input_data,
output [7:0] output_data
);
register reg1 (
// TODO: Dodaj przypisania portów, używając 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