Menu
Coddy logo textTech

シフトレジスタ

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

challenge icon

チャレンジ

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

4ビットシフトレジスタの動作

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

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

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

ポート方向幅説明
clk入力1ビットクロック信号
reset入力1ビットすべての出力を0にリセット
d入力1ビットデータ入力
q0出力1ビット1番目のフリップフロップの出力
q1出力1ビット2番目のフリップフロップの出力
q2出力1ビット3番目のフリップフロップの出力
q3出力1ビット4番目のフリップフロップの出力

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

実行すること:

  1. reset時に、すべての出力を0に設定する
  2. 各立ち上がりクロックエッジで、データを左から右へシフトする:
    1. q0にdを格納する
    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

基礎のすべてのレッスン

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