직렬 입력 데이터를 CLK 신호에 맞춰 순차적으로 저장하고, 저장된 데이터를 직렬(Serial)로 출력하기 위한 4bit SISO Shift Register이다.
외부에서 한 비트씩 순서대로 들어오는 데이터를 내부 4bit register에 차례애로 밀어 넣고, 맨 마지막에 도달한 데이터로부터 한 비트 씩 순서대로 출력하도록 만들어진 회로이다.
사용 코드
module shift_register_SISO_n(
input clk, // 클록 신호 (데이터 이동 시점 결정)
input reset_p, // 비동기식 리셋 입력 (active-high)
input d, // 직렬 입력 데이터
output q // 직렬 출력 데이터
);
reg [3:0] siso_reg; // 4비트 시프트 레지스터 (내부 데이터 저장)
// always 블록: 클록의 하강 에지 또는 리셋 신호의 상승 에지에서 동작
always @(negedge clk or posedge reset_p) begin
if (reset_p)
siso_reg = 4'b0000; // 리셋이 활성화되면 모든 비트를 0으로 초기화
else
siso_reg = {d, siso_reg[3:1]}; // 입력 d를 최상위 비트에 저장, 나머지는 오른쪽으로 시프트
end
assign q = siso_reg[0]; // 시프트 레지스터의 최하위 비트 값을 직렬 출력에 연결
endmodule
Schematic
Simulation
결과
이 회로는 입력 신호 d에 들어오는 데이터를 클록 신호의 하강 에지마다 내부 4비트 레지스터(siso_reg)에 순차적으로 저장하고, 가장 오른쪽(최하위 비트)의 값을 출력 q로 나오는 것을 확인 할 수 있다.
초기에 리셋 신호(reset_p)를 주면 레지스터와 출력이 모두 0으로 초기화되는 것을 확인 할 수 있다. 이후 클록 신호가 들어올 때마다 입력값이 레지스터의 맨 앞에 저장되고, 기존 값들은 한 칸씩 오른쪽으로 이동합니다.
4비트 레지스터이므로, 입력된 데이터는 네 번의 클록 이후부터 출력 q에서 순서대로 나오는 것을 확인 할 수 있다.