Menu
Coddy logo textTech

Always 블록

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

절차적 블록(procedural block)은 C나 Python과 같은 소프트웨어 프로그래밍 언어에서와 마찬가지로 문장들이 하나씩 차례대로, 순차적으로 실행되는 코드 블록입니다. Verilog에는 두 가지 절차적 블록이 있습니다: initial (한 번 실행됨) 및 always (지속적으로 실행됨). always 블록부터 시작해 보겠습니다.

always 블록은 지속적으로 실행됩니다 — 시뮬레이션이 시작되면 영원히 반복됩니다. 이는 플립플롭, 카운터, 조합 논리 회로와 같이 계속해서 작동해야 하는 하드웨어를 기술하는 데 사용됩니다.

기본 구문:

always @(sensitivity_list) begin
  // 반복적으로 실행되는 코드
end

@(sensitivity_list)는 블록이 언제 실행될지를 알려줍니다. 이것이 없으면 블록은 무한 루프를 돌며 시뮬레이션을 중단시킬 것입니다.

Always 블록 예제: 카운터

다음은 always 블록을 사용하여 카운터를 만드는 방법의 예입니다.

module counter (
  input clk,
  output reg [3:0] count
);
  always @(posedge clk) count = count + 1;
endmodule

이 코드가 작동하는 방식

부분의미
always이 코드를 영원히 반복해서 실행합니다
@(posedge clk)클록이 0에서 1로 변할 때까지 기다립니다 (상승 엣지)
count = count + 1count의 현재 값을 가져와 1을 더한 후 다시 저장합니다

이 블록은 클록의 매 상승 엣지(rising edge)마다 실행됩니다. 그때마다 count가 1씩 증가합니다.

감지 목록 @(posedge clk)은 연속적으로 실행되는 것이 아니라 클록 엣지에서만 실행되도록 지시합니다. 이것이 없으면 루프는 지연 없이 영원히 실행될 것입니다.

여러 신호를 사용하는 Always 블록

특정 신호들을 나열할 수 있습니다:

always @(a or b) begin
  out = a & b;
end

이것은 a 또는 b가 변경될 때 실행됩니다.

challenge icon

챌린지

이 모듈이 작동하도록 누락된 always 블록을 추가하세요.

작동 원리:

  • 각 클록의 상승 에지(rising edge)에서, out1은 0에서 1로 또는 1에서 0으로 토글(반전)됩니다.
  • out2out1을 따릅니다 (out1과 동일한 값).

수행할 작업:

  1. always @(posedge clk) 블록을 추가하세요.
  2. 내부에서 out1이 토글되도록 만드세요 (out1 = ~out1 사용).
  3. out2out1과 같아지도록 만드세요.

치트 시트

always 블록은 지속적으로 실행되며 플립플롭이나 카운터와 같은 하드웨어를 기술하는 데 사용됩니다.

always @(sensitivity_list) begin
  // 반복적으로 실행되는 코드
end

@(posedge clk)는 클락의 상승 엣지(rising edge)에서 트리거됩니다. @(a or b)는 나열된 신호 중 어느 하나라도 변경될 때 트리거됩니다.

// 카운터: 매 클락 상승 엣지마다 증가
always @(posedge clk) count = count + 1;

// 조합 회로: a 또는 b가 변경될 때 실행
always @(a or b) begin
  out = a & b;
end

참고: always 블록에 의해 구동되는 출력은 reg로 선언되어야 합니다.

직접 해보기

module toggler (
  input clk,
  output reg out1,
  output reg out2
);

  initial begin
    out1 = 0;
    out2 = 0;
  end

  // TODO: posedge clk를 사용하는 always 블록 추가
  // out1은 매 클록마다 토글됨
  // out2는 out1을 따름

endmodule
quiz icon실력 점검

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

기초의 모든 레슨