verilog 移位寄存器

示例

具有异步复位功能的N位深移位寄存器。

module shift_register #(
  parameter REG_DEPTH = 16
)(
  input clk,       //时钟信号
  input ena,       //使能信号
  input rst,       //复位信号
  input data_in,   //输入位
  output data_out  //输出位
);

  reg [REG_DEPTH-1:0] data_reg;

  always @(posedge clk or posedge rst) begin
    if (rst) begin //异步复位
      data_reg <= {REG_DEPTH{1'b0}}; //加载REG_DEPTH零
    end else if (enable) begin
      data_reg <= {data_reg[REG_DEPTH-2:0], data_in}; //将输入数据加载为LSB并将所有其他位左移 
    end
  end

  assign data_out = data_reg[REG_DEPTH-1]; //MSB是输出位

endmodule