본문 바로가기

2-2/디지털 설계 및 실험

[디지털 설계 및 실험] Verilog 기본 vol.3 - System Tasks

저번 포스팅에서는 데이타 타입들에 대해서 알아보았다.

이번 포스팅에서는 System Tasks들에 대해서 알아보겠다.

 

 

💻 $display

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

우리가 익히 알고 있는 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 Verilog World"): // Hello Verilog World

reg [4:0] port 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는 단 한번만 사용해야 한다.

 

모니터링을 켜고 끄기 위해서  $monitoron과 $monitoroff가 사용되어진다.

 

// 시간과 클럭,리셋 신호의 값을 모니터링함.
//클럭은 매 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 ....

 

 

💻 $stop

사용법 : $stop;

 

시뮬레이션을 하는 중 중단을 하는 시스템 테스크이다.

$stop 테스크는 상호 작용 모드의 시뮬레이션에서 사용된다.

설계자가 시뮬레이션 중단을 원하거나,신호의 값을 조사하려고 할 때 사용된다.

 

 

 

💻 $finish

사용법 : $finish;

 

시뮬레이션을 종료하기 위해 사용된다.

 

예시)

// 단위 시간 100에 시뮬레이션을 중단하고 결과를 조사.
// 단위 시간 1000에 시뮬레이션을 끝냄.
initial // 시간은 0, 나중에 설명한다고 함.
begin
	clock = 0;
  reset = 1;
  #100 $stop;    // 단위 시간 100에 시뮬레이션을 중단.
  #900 $finish;  // 단위 시간 1000에 시뮬레이션을 종료.
end

 

 

 

💻 'define

parameter랑 유사하다.

허나, 'define은 Code 단위의 매크로이고, parameter는 모듈단위의 매크로이다.

이 특성을 잘 활용하면, 응용해서 사용이 가능해진다.

 

'define WORD_SIZE 32

'define S $stop //'s를 사용해서 $stop을 사용할 수 있다.

'define WORD_REG reg [31:0] // 'WORD_REG reg32;를 사용해서 32비트 레지스터를 사용할 수 있다.

 

 

 

💻 'include

c언어의 #include와 같은 용도이다.

다른 소스파일의 기능들을 불러오고 싶을때 사용된다.