Menu
Coddy logo textTech

Shift Register

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 86/90。

challenge icon

チャレンジ

shift registerは、各クロックエッジでdataを左から右へ移動します。各ビットは次の位置へ移動します。

4ビットShift Registerの動作

Initial: q0=0, q1=0, q2=0, q3=0
Clock 1: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Clock 2: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2

4回のクロックサイクル後、最初のinputビットはq3に到達します。

moduleインターフェース

PortDirectionWidthDescription
clkinput1 bitClock signal
resetinput1 bitすべてのoutputを0にreset
dinput1 bitData input
q0output1 bit1番目のフリップフロップのoutput
q1output1 bit2番目のフリップフロップのoutput
q2output1 bit3番目のフリップフロップのoutput
q3output1 bit4番目のフリップフロップのoutput

あなたの課題は、以下のmoduleを完成させることです。

行うこと:

  1. reset時に、すべてのoutputを0に設定する
  2. 立ち上がりクロックエッジごとに、dataを左から右へshiftする:
    1. q0dを設定する
    2. q1にold q0を設定する
    3. q2にold q1を設定する
    4. q3にold q2を設定する

自分で試してみよう

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q0,
  output reg q1,
  output reg q2,
  output reg q3
);
  
  // TODO: always @(posedge clk or posedge reset) を追加
  // リセット時: q0<=0, q1<=0, q2<=0, q3<=0
  // それ以外: データをシフト: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ