Menu
Coddy logo textTech

シフトレジスタ

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

challenge icon

チャレンジ

シフトレジスタ(shift register)は、各クロックエッジでデータを左から右へシフトします。各ビットは次の位置に移動します。

4ビットシフトレジスタの仕組み

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クロックサイクル後、最初の入力ビットが q3 に到達します。

モジュールインターフェース

ポート方向説明
clkinput1 bitクロック信号
resetinput1 bitすべての出力を0にリセット
dinput1 bitデータ入力
q0output1 bit1番目のフリップフロップ出力
q1output1 bit2番目のフリップフロップ出力
q2output1 bit3番目のフリップフロップ出力
q3output1 bit4番目のフリップフロップ出力

あなたのタスクは、以下のモジュールを完成させることです。

作業内容:

  1. reset 時、すべての出力を0に設定します
  2. 各クロックの立ち上がりエッジで、データを左から右へシフトします:
    1. q0d を代入
    2. q1 に以前の q0 を代入
    3. q2 に以前の q1 を代入
    4. q3 に以前の 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

基礎のすべてのレッスン