Menu
Coddy logo textTech

시프트 레지스터

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

challenge icon

챌린지

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

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

Initial: q0=0, q1=0, q2=0, q3=0
Each clock: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Shifting in d = 1, 0, 1, 0:
Clock 1 (d=1): q0=1, q1=0, q2=0, q3=0
Clock 2 (d=0): q0=0, q1=1, q2=0, q3=0
Clock 3 (d=1): q0=1, q1=0, q2=1, q3=0
Clock 4 (d=0): q0=0, q1=1, q2=0, q3=1

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

모듈 인터페이스

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

아래 모듈을 완성하는 것이 과제입니다.

수행할 작업:

  1. reset 시 모든 출력을 0으로 설정합니다.
  2. 각 상승 클록 에지에서 데이터를 왼쪽에서 오른쪽으로 이동합니다:
    1. q0은 d를 받습니다.
    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) 추가
  // 리셋 시: q0<=0, q1<=0, q2<=0, q3<=0
  // 그 외: 데이터 시프트: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

기초의 모든 레슨

직접 연습해 보세요: 온라인 Verilog 컴파일러