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에 도달합니다.

모듈 인터페이스

PortDirectionWidthDescription
clkinput1 bitClock signal
resetinput1 bitReset all outputs to 0
dinput1 bitData input
q0output1 bitFirst flip-flop output
q1output1 bitSecond flip-flop output
q2output1 bitThird flip-flop output
q3output1 bitFourth flip-flop output

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

수행할 작업:

  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) 추가
  // 리셋 시: q0<=0, q1<=0, q2<=0, q3<=0
  // 그 외: 데이터 시프트: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

기초의 모든 레슨