[VerilogHDL] 09_시스템 태스크
1. 시스템 태스크 종류
Verilog HDL에서 사용되는 일반적인 시스템 태스크(System Task)의 목록은 다음과 같습니다.
$display
: 형식화된 출력을 표시합니다.$monitor
: 신호나 변수의 변화를 모니터링하고 자동으로 형식화된 출력을 생성합니다.$stop
: 시뮬레이션을 중지합니다.$time
: 현재 시뮬레이션 시간을 나타내는 정수 값을 반환합니다.$random
: 랜덤한 값을 생성합니다.$urandom_range
: 주어진 범위 내에서 랜덤한 값을 생성합니다.$finish
: 시뮬레이션을 완료하고 종료합니다.$readmemh
/$readmemb
: 메모리 초기화 파일을 읽어와 메모리에 데이터를 적재합니다.$fwrite
/$fdisplay
: 형식화된 출력을 파일로 작성합니다.$stime
: 현재 시뮬레이션의 CPU 시간을 반환합니다.$realtime
: 현재 시뮬레이션의 실제 경과 시간을 반환합니다.$history
: 시뮬레이션 객체의 내부 상태 기록을 검색합니다.$error
/$warning
: 오류 또는 경고 메시지를 출력합니다.$cast
: 자료형 간 변환을 수행합니다.$assert
: 지정된 조건을 검사하고 오류 메시지를 출력합니다.$sdf_annotate
: 타이밍 정보를 SDF (Standard Delay Format) 파일에 추가합니다.
위의 시스템 태스크들은 Verilog HDL에서 주로 사용되는 몇 가지 예시입니다. 이 외에도 다른 시스템 태스크들이 있을 수 있으며, 특정 툴이나 라이브러리에 따라 추가적인 시스템 태스크가 제공될 수도 있습니다.
2. 주요 시스템 태스크 사용법
Verilog HDL에서 시스템 태스크(System Task)는 시스템 레벨에서 동작하는 특별한 함수로, 표준 라이브러리에서 제공되는 미리 정의된 태스크 입니다.
2.1 $display
$display
시스템 태스크는 형식화된 출력을 표시하는 데 사용됩니다. 지정된 형식 문자열에 따라 값을 표시하고 디버깅에 유용합니다.
$display("Value: %d", value); // 정수 값을 표시
2.2 $monitor
$monitor
시스템 태스크는 신호나 변수의 변화를 모니터링하고, 그에 따라 자동으로 형식화된 출력을 생성합니다. 시뮬레이션 중에 실시간으로 값을 감시하고 디버깅하는 데 사용됩니다.
$monitor("Value changed to %d", value); // 값의 변경을 모니터링하고 출력
2.3 $stop
$stop
시스템 태스크는 시뮬레이션을 중지하는 데 사용됩니다. 특정 조건이 충족되었을 때 시뮬레이션을 중단하고 디버깅을 수행하는 데 유용합니다.
if (condition) begin
$stop; // 조건이 충족되면 시뮬레이션을 중지
end
2.4 $time
$time
시스템 태스크는 현재 시뮬레이션 시간을 나타내는 정수 값을 반환합니다. 시뮬레이션 중에 시간에 대한 정보를 제공하는 데 사용됩니다.
$display("Current simulation time: %t", $time); // 현재 시뮬레이션 시간을 표시
2.5 $random
$random
시스템 태스크는 랜덤한 값을 생성하여 사용할 수 있습니다. 주로 테스트벤치에서 임의의 데이터를 생성하는 데 사용됩니다.
reg [7:0] random_value;
random_value = $random; // 랜덤한 8비트 값 생성
2.6 $urandom_range
$urandom_range
시스템 태스크는 주어진 범위 내에서 랜덤한 값을 생성하여 사용할 수 있습니다. 일반적으로 테스트벤치에서 임의의 범위 값을 생성하는 데 사용됩니다.
reg [3:0] random_value;
random_value = $urandom_range(0, 15); // 0부터 15까지의 범위에서 랜덤한 값을 생성
2.7 $finish
$finish
시스템 태스크는 시뮬레이션을 완료하고 종료하는 데 사용됩니다. $finish
를 호출하면 현재 실행 중인 시뮬레이션 프로세스가 종료되며, 시뮬레이션은 완료됩니다.
initial begin
$display("Simulation started");
#100;
$display("Simulation completed");
$finish; // 시뮬레이션 종료
end
0 댓글