시스템 태스크 사용하기
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 77번째.
시스템 태스크(System tasks)는 달러 기호($)로 시작하는 Verilog의 내장 명령어입니다. 이들은 메시지 출력, 시뮬레이션 종료, 파형 파일 생성과 같은 유용한 기능을 수행합니다.
우리는 이미 이전 레슨에서 $display, $monitor, $dumpfile, 그리고 $dumpvars를 다루었습니다. 이번 레슨에서는 테스트벤치에서 유용한 추가적인 시스템 태스크들을 살펴보겠습니다.
추가 시스템 태스크
| 시스템 태스크 | 용도 |
|---|---|
$time | 현재 시뮬레이션 시간 반환 |
$finish | 시뮬레이션 종료 |
$stop | 시뮬레이션 일시 중지 |
$random | 난수 생성 |
$time
현재 시뮬레이션 시간을 반환합니다. 이벤트가 발생하는 시점을 추적하는 데 유용합니다.
$display("Current time is %0t", $time);$finish
시뮬레이션을 종료합니다. 항상 테스트벤치의 끝에서 사용하십시오.
$finish;$stop
시뮬레이션을 일시 중지합니다. 시뮬레이터 명령으로 재개할 수 있습니다. 디버깅에 유용합니다.
$stop;$random
무작위 수를 생성합니다. 무작위 테스트 자극(stimulus)을 생성하는 데 유용합니다.
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챌린지
이 테스트벤치에 누락된 시스템 태스크를 추가하세요.
수행할 작업:
- 시작 시 현재 시간을 출력하도록
$display추가 - 종료 시 현재 시간을 출력하도록
$display추가 - 시뮬레이션을 종료하도록
$finish추가
치트 시트
Verilog의 시스템 태스크(System tasks)는 $로 시작하며 시뮬레이션 유틸리티 기능을 수행합니다:
| 시스템 태스크 | 목적 |
|---|---|
$time | 현재 시뮬레이션 시간 반환 |
$finish | 시뮬레이션 종료 |
$stop | 시뮬레이션 일시 중지 |
$random | 난수 생성 |
$display("Time: %0t", $time); // 현재 시간 출력
$finish; // 시뮬레이션 종료
$stop; // 시뮬레이션 일시 중지
reg [7:0] rand_value;
rand_value = $random; // 난수 할당직접 해보기
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.