Menu
Coddy logo textTech

Using System Tasks

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

System task는 달러 기호($)로 시작하는 Verilog의 내장 명령어입니다. 메시지 출력, 시뮬레이션 종료, 파형 파일 생성과 같은 유용한 기능을 수행합니다.

이전 레슨에서 $display, $monitor, $dumpfile, $dumpvars를 이미 다루었습니다. 이번 레슨에서는 testbench에서 유용한 추가 시스템 태스크를 살펴보겠습니다.

추가 시스템 작업

시스템 작업용도
$time현재 시뮬레이션 시간 반환
$finish시뮬레이션 종료
$stop시뮬레이션 일시 중지
$random무작위 수 생성

$time

현재 시뮬레이션 시간을 반환합니다. 이벤트가 발생하는 시점을 추적하는 데 유용합니다.

$display("Current time is %0t", $time);

$finish

시뮬레이션을 종료합니다. 항상 testbench의 끝에서 사용하세요.

$finish;

$stop

시뮬레이션을 일시 중지합니다. 시뮬레이터 명령으로 재개할 수 있습니다. 디버깅에 유용합니다.

$stop;

$random

무작위 숫자를 생성합니다. 무작위 테스트 자극을 만드는 데 유용합니다.

reg [7:0] rand_value;
rand_value = $random;

여러 시스템 태스크를 사용하는 예제

module system_tasks_demo;
  reg [7:0] data;
  integer i;
  
  initial begin
    $display("Simulation started at time %0t", $time);
    
    for (i = 0; i < 5; i = i + 1) begin
      data = $random;
      $display("Random value %d: %b", i, data);
    end
    
    $stop;
    #10 $display("Resumed at time %0t", $time);
    
    $display("Simulation finished at time %0t", $time);
    $finish;
  end
endmodule
challenge icon

챌린지

이 testbench에 누락된 시스템 태스크를 추가하세요.

할 일:

  1. $display를 추가하여 시작 시 current time을 출력하세요
  2. $display를 추가하여 종료 시 current time을 출력하세요
  3. $finish를 추가하여 simulation을 종료하세요

직접 해보기

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // TODO: 시작 시 현재 시간과 함께 $display 추가
    // 형식: "Start time: %0t"
    
    
    $monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    // TODO: 종료 시 현재 시간과 함께 $display 추가
    // 형식: "End time: %0t"
    
    
    // TODO: $finish 추가
    
  end
endmodule
quiz icon실력 점검

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

기초의 모든 레슨

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