Menu
Coddy logo textTech

Rejestr przesuwny

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

challenge icon

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=1

Po 4 cyklach zegara pierwszy bit wejściowy dociera do q3.

Interfejs modułu

PortKierunekSzerokośćOpis
clkwejście1 bitSygnał zegarowy
resetwejście1 bitUstawia wszystkie wyjścia na 0
dwejście1 bitWejście danych
q0wyjście1 bitWyjście pierwszego przerzutnika
q1wyjście1 bitWyjście drugiego przerzutnika
q2wyjście1 bitWyjście trzeciego przerzutnika
q3wyjście1 bitWyjście czwartego przerzutnika

Twoim zadaniem jest uzupełnienie poniższego modułu.

Co należy zrobić:

  1. Przy reset ustaw wszystkie wyjścia na 0
  2. Przy każdym narastającym zboczu zegara przesuwaj dane od lewej do prawej:
    1. q0 otrzymuje d
    2. q1 otrzymuje poprzednią wartość q0
    3. q2 otrzymuje poprzednią wartość q1
    4. q3 otrzymuje 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

Poćwicz samodzielnie: Kompilator Verilog online