Rejestr przesuwny
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 86 z 90.
Wyzwanie
Rejestr przesuwny przesuwa dane od lewej do prawej przy każdym zboczu zegara. Każdy bit przechodzi na kolejną pozycję.
Jak działa 4-bitowy rejestr przesuwny
Initial: q0=0, q1=0, q2=0, q3=0
Each clock: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Shifting in d = 1, 0, 1, 0:
Clock 1 (d=1): q0=1, q1=0, q2=0, q3=0
Clock 2 (d=0): q0=0, q1=1, q2=0, q3=0
Clock 3 (d=1): q0=1, q1=0, q2=1, q3=0
Clock 4 (d=0): q0=0, q1=1, q2=0, q3=1Po 4 cyklach zegara pierwszy bit wejściowy dociera do q3.
Interfejs modułu
| Port | Kierunek | Szerokość | Opis |
|---|---|---|---|
clk | wejście | 1 bit | Sygnał zegarowy |
reset | wejście | 1 bit | Ustawia wszystkie wyjścia na 0 |
d | wejście | 1 bit | Wejście danych |
q0 | wyjście | 1 bit | Wyjście pierwszego przerzutnika |
q1 | wyjście | 1 bit | Wyjście drugiego przerzutnika |
q2 | wyjście | 1 bit | Wyjście trzeciego przerzutnika |
q3 | wyjście | 1 bit | Wyjście czwartego przerzutnika |
Twoim zadaniem jest uzupełnienie poniższego modułu.
Co należy zrobić:
- Przy
resetustaw wszystkie wyjścia na 0 - Przy każdym narastającym zboczu zegara przesuwaj dane od lewej do prawej:
q0otrzymujedq1otrzymuje poprzednią wartośćq0q2otrzymuje poprzednią wartośćq1q3otrzymuje poprzednią wartośćq2
Spróbuj swoich sił
module shift_register (
input clk,
input reset,
input d,
output reg q0,
output reg q1,
output reg q2,
output reg q3
);
// TODO: Dodaj always @(posedge clk or posedge reset)
// Przy resecie: q0<=0, q1<=0, q2<=0, q3<=0
// W przeciwnym razie: przesuń dane: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2
endmodule
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