Porty wejściowe i wyjściowe
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 31 z 90.
Porty wejściowe i wyjściowe to połączenia, które pozwalają modułowi komunikować się ze światem zewnętrznym. Są jak piny układu scalonego. Porty stanowią interfejs między modułem a resztą projektu.
Każdy moduł ma:
- Porty wejściowe: sygnały, które trafiają do modułu
- Porty wyjściowe: sygnały, które wychodzą z modułu
Porty wejściowe
Porty wejściowe odbierają dane z zewnątrz. Nie można ich zmieniać wewnątrz modułu: można je tylko odczytywać.
input clk; // Wejście jednobitowe
input [7:0] data; // 8-bitowy wektor wejściowy
input a, b; // Wiele wejść w jednej liniiZasady dotyczące wejść:
- Nie można przypisać wartości wewnątrz modułu
- Nie można zadeklarować jako
reg - Zawsze
wire(domyślnie)
Porty wyjściowe
Porty wyjściowe wysyłają dane na zewnątrz. Mogą być sterowane przez bloki assign lub always.
output out; // Wyjście jednobitowe
output [3:0] result; // Wyjście 4-bitowe
output reg busy; // Wyjście może być typu reg
output wire ready; // Wyjście może być typu wireZasady dotyczące wyjść:
- Może być typu
wire(zassign) lubreg(zalways) - Musi być sterowane przez coś znajdującego się wewnątrz modułu
Składnia deklaracji portów
Składnia deklaracji portów to konkretny sposób zapisywania portów wejściowych i wyjściowych w module. Informuje Verilog o trzech rzeczach dotyczących każdego portu:
- Kierunek: czy jest to wejście, wyjście czy wejście/wyjście?
- Rozmiar: ile bitów ma szerokości?
- Nazwa: jak się nazywa?
module example (
input [7:0] data_in, // Wektor wejściowy
input clk, // Pojedyncze wejście
input enable, // Pojedyncze wejście
output reg [7:0] out, // Rejestr wyjściowy
output busy // Przewód wyjściowy
);Dlaczego kierunek portu ma znaczenie
Kierunek informuje Verilog:
- Które sygnały moduł może odczytywać (wejścia)
- Które sygnały moduł może zapisywać (wyjścia)
- Jakie typy połączeń są dozwolone
Użycie niewłaściwego kierunku powoduje błędy kompilacji.
Przykład kodu
module port_demo (
input [3:0] a, // Można tylko odczytywać
input [3:0] b, // Można tylko odczytywać
output reg [3:0] sum, // Można zapisywać (reg)
output [3:0] diff // Można zapisywać (wire)
);
always @(*) begin
sum = a + b; // Zapis do wyjścia typu reg
end
assign diff = a - b; // Zapis do wyjścia typu wire
endmoduleWyzwanie
Uzupełnij deklaracje portów
Co zrobić:
- Dodaj 8-bitowe wejście o nazwie
data_in - Dodaj jednobitowe wejście o nazwie
clk - Dodaj 4-bitowe wyjście o nazwie
result(użyj reg: będzie przypisywane w bloku always) - Dodaj jednobitowe wyjście o nazwie
valid(użyj wire: będzie przypisywane za pomocą assign)
Spróbuj swoich sił
module port_challenge (
// Zadanie 1: Dodaj 8-bitowe wejście o nazwie data_in
// Zadanie 2: Dodaj 1-bitowe wejście o nazwie clk
// Zadanie 3: Dodaj 4-bitowe wyjście o nazwie result (użyj reg)
// Zadanie 4: Dodaj 1-bitowe wyjście o nazwie valid (użyj wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
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