[Verilog] System task 정리1 (display, monitor)

준치·2021년 12월 27일

[Verilog]

목록 보기
1/9

Verilog HDL에서 디버깅을 할 때 주로 사용되는 system task 두가지.

$display

사용법 : $display(p1, p2, p3, ... , pn);

c의 printf와 유사하다.

* 문자열 포맷
%d : 10진수
%b : 2진수
%s : 문자열
%h : 16진수
%c : ASCII문자
%m : 계층 이름(인자가 필요하지 않다.)
%v : 강도
%o : 8진수
%t : 현재 시간
%e : 실수를 과학적 표기법으로(ex. 3e10)
%f : 실수를 십진 표기법으로(ex. 2.13)
%g : 실수를 위 둘중 짧은 것으로 출력

예시 코드

// 따옴표 안의 문자열을 출력.
$display("Hello world");
-- Hello world

// 현재 시뮬레이션 시간 230을 출력.
$display($time);
-- 230

// port_id 값 5를 2진수로 출력.
reg [4:0] prot_id;
$display("ID of the port is %b", port_id);
-- ID of the port is 00101

$monitor

사용법 : $monitor(p1, p2, p3, ... , pn);

$display와 유사하지만 $monitor는 신호의 값이 변할 때 마다 출력.
$monitor는 단 한번만 사용해야 한다.

모니터링을 on, off하기 위한 task

사용법 : $monitoron; $monitoroff;

$monitoron은 시뮬레이션하는 동안 모니터링을 활성화
$monitoroff는 모니터링을 비활성화
기본 상태는 항상 on 이다.

예시 코드

// 시간과 클럭, 리셋 신호의 값을 모니터링.
// 클럭은 매 5단위 시간마다 바뀌고, 리셋은 10 단위 시간에 0이된다.
intital
begin
	$monitor($time, " Value of signals clocks = %b reset = %b", clock, reset);
end
-- 0 Value of signals clocks = 0 reset = 1 
-- 5 Value of signals clocks = 1 reset = 1 
-- 10 Value of signals clocks = 0 reset = 0 ....
profile
설계 엔지니어 지망생

0개의 댓글