Verilog HDL에서 디버깅을 할 때 주로 사용되는 system task 두가지.
$display
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
$display와 유사하지만 $monitor는 신호의 값이 변할 때 마다 출력.
$monitor는 단 한번만 사용해야 한다.
$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 ....