Verilogでシフトレジスタを実装する方法

Verilogでは、シフト演算子を使ってシフトレジスタを実現できます。以下にサンプルコードを示します。

module shift_register(
  input wire clk,
  input wire enable,
  input wire reset,
  input wire in,
  output wire out
);

  reg [7:0] reg_data;

  always @(posedge clk or posedge reset) begin
    if (reset) begin
      reg_data <= 8'b0;
    end else if (enable) begin
      reg_data <= {reg_data[6:0], in};
    end
  end

  assign out = reg_data[7];

endmodule

上記コードにおいて reg_dataはデータ格納用の8ビットレジスタです.各クロック立ち上がり時にenableがハイレベルの場合,inの値がレジスタ最下位ビットに移入され,他のビットは1ビット左へシフトされます.最後に,レジスタ最上位ビットが出力outに代入されます.resetがハイレベルの場合,レジスタは0クリアされます.

用途によってレジスタのビット幅やシフトの方向を調整できます。

bannerAds