Menu
Coddy logo textTech

민감도 목록

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

민감도 목록(sensitivity list)은 always 블록에게 언제 실행할지 알려줍니다. 이는 @ 기호 뒤의 괄호 안에 작성됩니다.

sensitivity list는 always 블록을 트리거하는 signals 또는 이벤트의 집합입니다. list 내의 신호가 changes될 때 블록이 executes됩니다.

구문:

always @(sensitivity_list) begin
  // 리스트의 신호가 변경될 때 코드가 실행됩니다
end

Sensitivity List의 유형

유형구문블록 실행 시점
모든 신호 (combinational)always @(*)내부의 모든 신호가 변할 때
특정 신호always @(a or b)a 또는 b가 변할 때
Edge 트리가 (sequential)always @(posedge clk)clock의 상승 edge에서
다중 edgealways @(posedge clk or posedge reset)clock edge 또는 reset edge에서

옵션 1: 모든 (*) 신호 (Signals)

조합 논리(combinational logic)에 가장 안전하고 흔하게 사용되는 방법입니다.

always @(*) begin
  out = a & b;   // a 또는 b가 변경될 때 실행됩니다
end

*는 블록 내에서 읽는 모든 signals를 자동으로 포함합니다.

옵션 2: 특정 signals

always @(a or b) begin
  out = a & b;   // a 또는 b가 변경될 때 실행됩니다
end

신호를 누락하면 해당 신호가 changes될 때 시뮬레이션에서 output이 업데이트되지 않으므로, 시뮬레이션이 합성된 하드웨어와 더 이상 일치하지 않게 됩니다.

옵션 3: 엣지 트리거 (posedge)

always @(posedge clk) begin
  q <= d;        // 클록의 상승 에지에서 실행됩니다
end

상승 엣지에는 posedge를 사용하고, 하강 엣지에는 negedge를 사용합니다.

옵션 4: Multiple Edges

always @(posedge clk or posedge reset) begin
  if (reset)
    q <= 0;
  else
    q <= d;
end

clock edge 또는 reset edge에서 runs 합니다.

자주 하는 실수

MistakeWhy Wrong
always @(a or b or c) 구문에서 d를 사용하는 경우d 누락 → 시뮬레이션에서 output이 갱신되지 않고 이전 상태로 남음 (시뮬레이션/합성 불일치)
always @(posedge clk or reset)reset에 대한 posedge 누락
always @(clk)flip-flop에는 posedge clk를 사용해야 함
challenge icon

챌린지

해야 할 일:

  1. 이 플립플롭이 올바르게 작동하도록 적절한 민감도 리스트(sensitivity list)를 추가하세요. 해당 블록은 clkrising edge에서 실행되어야 합니다.

직접 해보기

module flipflop (
  input clk,
  input d,
  output reg q
);
  
  always @(______) begin
    q <= d;
  end

endmodule
quiz icon실력 점검

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

기초의 모든 레슨