Verilog_RTL 설계/Basys_3

[Shift_Register] SISO_(Serial_in Serial_out)

juniha 2025. 7. 12. 22:32

목적

  • 직렬 입력 데이터를 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에서 순서대로 나오는 것을 확인 할 수 있다.