Menu
Coddy logo textTech

시프트 레지스터

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 86번째.

challenge icon

챌린지

시프트 레지스터(shift register)는 각 클록 에지에서 데이터를 왼쪽에서 오른쪽으로 이동시킵니다. 각 비트는 다음 위치로 이동합니다.

4비트 시프트 레지스터의 작동 방식

Initial: q0=0, q1=0, q2=0, q3=0
Clock 1: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Clock 2: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2

4번의 클록 사이클 후에 첫 번째 입력 비트가 q3에 도달합니다.

모듈 인터페이스

포트방향너비설명
clkinput1비트클록 신호
resetinput1비트모든 출력을 0으로 리셋
dinput1비트데이터 입력
q0output1비트첫 번째 플립플롭 출력
q1output1비트두 번째 플립플롭 출력
q2output1비트세 번째 플립플롭 출력
q3output1비트네 번째 플립플롭 출력

여러분의 과제는 아래의 모듈을 완성하는 것입니다.

수행할 작업:

  1. reset 시, 모든 출력을 0으로 설정합니다.
  2. 각 상승 클록 에지에서 데이터를 왼쪽에서 오른쪽으로 이동시킵니다:
    1. q0d를 대입합니다.
    2. q1에 이전 q0 값을 대입합니다.
    3. q2에 이전 q1 값을 대입합니다.
    4. q3에 이전 q2 값을 대입합니다.

직접 해보기

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q0,
  output reg q1,
  output reg q2,
  output reg q3
);
  
  // TODO: always @(posedge clk or posedge reset) 추가
  // reset 시: q0<=0, q1<=0, q2<=0, q3<=0
  // 그 외의 경우: 데이터 시프트: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

기초의 모든 레슨