Menu
Coddy logo textTech

클록 생성

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

클록은 일정한 간격으로 0과 1 사이를 지속적으로 전환하는 신호입니다. 클록은 플립플롭이나 카운터와 같은 순차 논리 회로에 필수적입니다.

클럭을 생성하는 이유

테스트벤치에서 순차 회로를 테스트하려면 클럭이 필요합니다. 클럭은 플립플롭, 레지스터 및 상태 머신의 동작을 구동합니다.

클록 생성 방법

방법설명
# 지연을 사용한 always가장 일반적인 방법
forever 루프대안적인 방법
repeat 루프고정된 횟수의 사이클용

방법 1: 지연을 사용한 Always 블록

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • 0 시점에 clk = 0
  • 매 5 시간 단위마다 clk가 토글됩니다
  • 주기 = 10 시간 단위
  • 주파수 = 1/10 = 0.1 시간 단위당

방법 2: Forever 루프

reg clk;

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

always 방법과 동일한 결과입니다.

방법 3: 고정된 주기 동안 반복

reg clk;

initial begin
  clk = 0;
  repeat (10) begin
    #5 clk = ~clk;
  end
end

정확히 10개의 클록 에지(5번의 완전한 주기)를 생성한 후 중지합니다.

challenge icon

챌린지

4 시간 단위마다 토글되는 클럭을 생성하기 위해 누락된 코드를 추가하세요 (주기 = 8 시간 단위).

할 일:

  1. initial 블록을 사용하여 시간 0에 clk를 0으로 초기화합니다.
  2. 지연(delay)이 포함된 always 블록을 사용하여 4 시간 단위마다 clk를 토글합니다.

치트 시트

클록(clock)은 일정한 간격으로 0과 1 사이를 전환합니다. 주기(Period) = 2 × 지연(delay)입니다.

방법 1: Always 블록 (가장 일반적임)

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk; // 주기 = 10

방법 2: Forever 루프

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

방법 3: Repeat (고정된 에지 수)

initial begin
  clk = 0;
  repeat(10) #5 clk = ~clk; // 10개의 에지 = 5주기
end

직접 해보기

module clock_challenge;
  reg clk;
  
  // TODO: 1단계 - clk = 0으로 설정하는 initial 블록 추가
  
  
  // TODO: 2단계 - 4 시간 단위마다 clk를 반전시키는 always 블록 추가
  

  initial begin
    $monitor("Time %0t: clk = %b", $time, clk);
    #20;
    $display("Clock generated for 20 time units");
    $finish;
  end
endmodule
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨