Menu
Coddy logo textTech

Display와 Monitor

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

$display$monitor는 시뮬레이션 정보를 출력하는 데 사용되는 시스템 태스크입니다. 이들은 설계 내부에서 어떤 일이 일어나고 있는지 확인하는 데 도움을 줍니다.

$display

$display는 실행되는 순간 메시지를 한 번 출력합니다.

구문:

$display("message", variables);

예제:

initial begin
  $display("Simulation started");
  #10;
  $display("Time 10");
  #10;
  $display("Time 20");
end

출력:

Simulation started
Time 10
Time 20

$monitor

$monitor변수 중 어느 하나라도 변경될 때마다 자동으로 메시지를 출력합니다.

구문:

$monitor("message", variables);

예제:

initial begin
  a = 0; b = 0;
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
  #10 a = 0;
end

출력:

Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1

$display vs $monitor

 $display$monitor
출력 시점실행 시 한 번변수 값이 변할 때마다
출력 횟수호출한 횟수만큼지속적으로 (변경될 때까지)
용도헤더, 테스트 메시지변화하는 신호 추적

일반적인 형식 지정자

지정자의미예시
%b2진수$display("%b", a);
%d10진수$display("%d", count);
%h16진수$display("%h", data);
%t시간$display("%t", $time);
%0t시간 (공백 없음)$display("%0t", $time);
%s문자열$display("%s", "Hello");

중요 규칙

규칙설명
$display는 한 번 출력합니다헤더 및 최종 결과에 적합합니다
$monitor는 값이 변경될 때 출력합니다신호 관찰에 적합합니다
하나의 $monitor만 활성화됩니다마지막 설정이 이전 설정을 덮어씁니다
중지하려면 $finish를 사용하세요그렇지 않으면 시뮬레이션이 영원히 실행될 수 있습니다
challenge icon

챌린지

이 테스트벤치에 누락된 $display$monitor 문을 추가하세요.

수행할 작업:

  1. 헤더를 출력하기 위해 $display를 추가하세요: "Testing OR Gate"
  2. 신호가 변경될 때마다 시간, x, y, z를 출력하도록 $monitor를 추가하세요. 형식: "Time %0t: x=%b, y=%b, z=%b"
  3. 마지막에 "Test complete"를 출력하도록 $display를 추가하세요.

치트 시트

$display는 실행될 때 한 번 출력하며, $monitor는 포함된 변수 중 어느 하나라도 변경될 때마다 자동으로 출력합니다.

$display("message", variables);
$monitor("message", variables);

예제:

initial begin
  $display("Simulation started");
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
end

일반적인 형식 지정자(format specifiers):

  • %b — 이진수 (Binary)
  • %d — 십진수 (Decimal)
  • %h — 십육진수 (Hexadecimal)
  • %t / %0t — 시간 (패딩 포함/미포함)
  • %s — 문자열 (String)

주요 규칙:

  • 한 번에 하나의 $monitor만 활성화됩니다. 마지막에 선언된 것이 이전의 것들을 덮어씁니다.
  • 시뮬레이션을 중단하려면 $finish를 사용하세요.

직접 해보기

module or_gate (
  input x,
  input y,
  output z
);
  assign z = x | y;
endmodule

module testbench;
  reg x, y;
  wire z;
  
  or_gate dut (
    .x(x),
    .y(y),
    .z(z)
  );

  initial begin
    // TODO: $display 헤더 "Testing OR Gate" 추가
    
    
    // TODO: 시간, x, y, z를 추적하기 위한 $monitor 추가
    // 형식: "Time %0t: x=%b, y=%b, z=%b"
    
    
    // 자극(stimulus) 적용
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    // TODO: $display "Test complete" 추가
    
    
    $finish;
  end
endmodule
quiz icon실력 점검

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

기초의 모든 레슨