Verilog_RTL 설계/Basys_3

[Shift_Register] PIPO_(Parallel-In Parallel-Out)

juniha 2025. 7. 12. 23:18

목적

  • 여러 비트의 데이터를 한 번에 병렬로 입력(Parallel-In)하고, 내부 레지스터에 저장된 값을 한 번에 병렬로 출력(Parallel-Out)하는 시프트 레지스터이다.
       _  입력:  비트를 병렬 입력 단자를 통해 한 번에 입력
       _  클록 신호: 클록이 들어올 때마다 입력 데이터 전체가 레지스터에 저장
       _  출력: 저장된 데이터가 각 비트 단자에서 동시에 병렬로 출력

  • 즉, 입력과 출력 모두 병렬이다.

 

사용 코드

module shift_register_PIPO(
    input clk,             // 클록 신호 (상승 에지에서 데이터 저장)
    input [7:0] d,         // 8비트 병렬 입력 데이터
    input rd_en,           // 출력 활성화(read enable) 신호
    input wr_en,           // 입력 저장(write enable) 신호
    output [7:0] q         // 8비트 병렬 출력 데이터
);

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

    // wr_en이 1일 때 클록 상승 에지에서 입력 d를 레지스터에 저장
    always @(posedge clk) begin
        if (wr_en)
            register <= d;         // wr_en=1: 병렬 입력 저장
    end

    // rd_en이 1이면 저장된 데이터 출력, 아니면 출력 버스를 high-impedance('z')로 설정
    assign q = rd_en ? register : 8'bz; // rd_en=1: 데이터 출력, 0: high-impedance

endmodule

Schematic

Simulation

결과

 

  • 입력 d에 8'b11001100을 넣고 wr_en을 1로 설정한 뒤, 클록 신호를 한 번 인가하면 해당 데이터가 내부 레지스터에 저장되는 것을 확인 할 수 있다.
  • 이후 rd_en을 1로 하면, 레지스터에 저장된 값이 q[7:0]에 병렬로 그대로 출력되는 것을 확인 할 수 있다.
  • 이 과정을 통해 PIPO 레지스터가 입력 데이터를 올바르게 저장하고, 필요할 때 병렬로 출력함을 확인할 수 있다.