Menu
CoddyTech

클록 생성

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

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

클록을 생성하는 이유

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

클록을 생성하는 방법

방법설명
always와 # 지연가장 일반적인 방법
forever 루프대안 방법
repeat 루프고정된 횟수의 주기에 사용

방법 1: 지연이 있는 항상 블록

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • 시간 0에서 clk = 0
  • 시간 단위 5마다 clk가 전환됩니다
  • 주기 = 10 시간 단위
  • 진동수 = 시간 단위당 1/10 = 0.1

방법 2: 무한 루프

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. 시간 0에 initial 블록을 사용하여 clk를 0으로 초기화하세요.
  2. clk를 4시간 단위마다 토글하도록 지연이 있는 always 블록을 사용하세요.

직접 해보기

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실력 점검

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

기초의 모든 레슨

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