Verilog_RTL 설계/Basys_3

[Shift_Register] SIPO_(Serial-In Parallel-Out)

juniha 2025. 7. 12. 22:39

목적

  • 직렬로 입력된 데이터를 병렬 데이터로 변환한다.
  • 한 비트씩 순서대로 들어오는 직렬(Serial)신호를 내부 레지스터에 차례로 저장한 뒤, 여러 비트를 한 번에 동시에 병렬(Parallel) 출력한다.
  • 데이터 버퍼/임시 저장: 데이터를 순차적으로 입력받고, 일정 시점에 한꺼번에 병렬로 처리하거나 출력

 

사용 코드

module shift_register_SIPO_n(
    input clk,             // 클록 신호 (데이터 이동 시점 결정)
    input d,               // 직렬 입력 데이터 (Serial-In)
    input read_enable,     // 병렬 출력 활성화 신호 (1이면 출력, 0이면 high-impedance)
    output [7:0] q         // 8비트 병렬 출력 (Parallel-Out)
);

    reg [7:0] sipo_reg;    // 8비트 시프트 레지스터 (내부 데이터 저장)

    // 클록의 하강 에지마다 입력 d를 레지스터에 저장하고 시프트
    always @(negedge clk) begin
        sipo_reg = {d, sipo_reg[7:1]}; // 입력 d를 최상위 비트에 넣고, 나머지는 오른쪽으로 시프트
    end  

    // read_enable이 1일 때만 q에 병렬로 출력, 아니면 high-impedance 상태('z')
    assign q = read_enable ? sipo_reg : 8'bz;

endmodule

Schematic

Simulation

결과

  • 이 회로는 입력 신호 d에 들어오는 데이터를 클록 신호의 하강 에지마다 내부 8비트 레지스터(sipo_reg)에 순서대로 저장하는 것을 확인 할 수 있다.
  • 입력값이 들어올 때마다 기존 값들은 한 칸씩 오른쪽으로 이동(시프트)하고, 새 입력값이 맨 앞(최상위 비트)에 저장된다.
  • read_enable 신호가 1일 때는 레지스터에 저장된 8비트 데이터를 병렬로 출력(q로)하고, read_enable이 0일 때는 출력이 high-impedance 상태('z')가 되어 외부 신호와 충돌을 방지한다.