以下是一個Verilog實現的移位寄存器例子:
module shift_register(
input wire clk,
input wire rst,
input wire shift_in,
output wire shift_out
);
reg [7:0] reg_data;
always @(posedge clk or posedge rst) begin
if (rst)
reg_data <= 0;
else
reg_data <= {reg_data[6:0], shift_in};
end
assign shift_out = reg_data[7];
endmodule
在這個例子中,我們定義了一個8位移位寄存器,具有時鐘(clk),復位(rst),輸入(shift_in)和輸出(shift_out)信號。在時鐘的上升沿觸發時,寄存器數據向左移動一位,并將輸入信號放在最低有效位(LSB)上。復位信號用于將寄存器數據重置為0。輸出信號是寄存器的最高有效位(MSB)。
可以在頂層模塊中實例化這個移位寄存器,并將信號連接到適當的輸入和輸出端口。例如:
module top_module(
input wire clk,
input wire rst,
input wire shift_in,
output wire shift_out
);
shift_register sr (
.clk(clk),
.rst(rst),
.shift_in(shift_in),
.shift_out(shift_out)
);
endmodule
使用Verilog仿真器或綜合工具進行編譯和運行后,我們可以觀察到移位寄存器按照預期的方式進行移位操作,并輸出正確的結果。