Altifigence Academy
EN학습 시작

실습 03 / 25 MIN

비트를 옮기는 시프트 레지스터

직렬 입력이 레지스터를 따라 이동하는 과정을 살펴봅니다.

배울 내용

상승 에지마다 이전 q의 하위 두 비트가 왼쪽으로 이동하고 din이 bit 0에 들어옵니다. 1, 0, 1, 1을 차례로 넣어 이동 과정을 비교하세요.

SystemVerilog 소스

rtl/top.sv소스 다운로드
module top (
    input logic clk,
    input logic rst,
    input logic din,
    output logic [2:0] q
);
    // Old q[1:0] and din are captured together at each rising edge.
    always_ff @(posedge clk)
        if (rst) q <= 3'b000;
        else q <= {q[1:0], din};
endmodule

실행 방법

New analysis에서 Two-state single-clock v1을 선택하세요. Clock port는 clk, 주기는 1000ps입니다. 아래 값으로 Preflight 후 Run RTL simulation을 실행하고 결과를 비교하세요.

초기 레지스터 값 (LSB부터)
[false,false,false]
Reset port
rst · Active high · 1 cycle
Maximum cycles / time
5 / 5000ps
입력 자극입력 JSON 다운로드
[
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  }
]

결과 비교

5 cycles · q=011. 상승 에지마다 000 → 001 → 010 → 101 → 011 순서가 됩니다.

스스로 확인하기

101 상태에서 din=1이면 다음 값은 무엇인가요?

설명 보기

하위 두 비트 01에 새 입력 1을 붙여 011이 됩니다.

이 실습은 0/1 단일 클록 RTL을 사용합니다. #delay·initial·X/Z 테스트벤치는 포함하지 않습니다. 이 페이지의 체크는 학습 기록이며 실행 결과는 아닙니다.

전체 과정 →