Verilog의 자료형에는 두 가지 종류가 있다.
모듈 혹은 게이트 간의 물리적인 연결을 나타내는 net 자료형과, 절차적 할당문에서 값을 임시로 저장하기 위한 variable 자료형이 있다.
대개 모듈을 설계할 때 wire과 reg, integer만으로 모듈을 설계했었기 때문에, 나머지 자료형에 대한 개념이 부족하여 정리하였다.
time은 시뮬레이션 시간을 처리하거나 저장하기 위해 사용하는 자료형으로, 64비트 unsigned 정수형 크기를 갖는다.
예제 코드를 작성해보자.
module test_time();
time t_start;
time t_end;
initial begin
t_start = $time;
#20;
t_end = $time;
$display("start = %0t, end = %0t, diff = %0t", t_start, t_end, t_end - t_start);
$finish;
end
endmodule
$time은 시간값을 64비트 정수형으로 출력하는데, time 자료형을 이용해 해당 값을 저장한다.
실행하면 아래와 같이 출력된다.
start = 0, end = 20, diff = 20
real은 interger와 유사하며, 64비트 배정밀도 실수형 값을 저장할 때 사용된다.
예제 코드를 작성해보자.
module test_real();
integer i = 12345;
real r = 12.345;
initial begin
$display("i = %d, r = %f", i, r);
$finish;
end
endmodule
integer를 %d로 출력하듯이 real은 %f로 출력하면 된다.
실행하면 아래와 같이 출력된다.
i = 12345, r = 12.345000
realtime은 time과 유사하나 시간값을 실수 형태로 저장할 때 사용된다. real과 동일하게 64비트 배정밀도 크기를 갖는다.
아래 예제를 한 번 보자.
`timescale 1ns/10ps
module test_time();
time t;
initial begin
#1 t = $time; $display("T = %0t at time #1 ", t);
#0.49 t = $time; $display("T = %0t at time #0.49", t);
#0.50 t = $time; $display("T = %0t at time #0.50", t);
#0.51 t = $time; $display("T = %0t at time #0.51", t);
$finish;
end
endmodule
timescale을 위와 같이 설정하고 delay를 주면서 시간값을 정수형으로 계산해보자.
실행하면 아래와 같이 출력된다.
T = 100 at time #1
T = 100 at time #0.49
T = 200 at time #0.50
T = 300 at time #0.51
두 번째 줄을 보면 delay를 0.49로 줬을 때의 누적 delay는 1.49가 되는데, 소수점 이하 자리가 반올림되어 1.00으로 처리된다. 따라서 t의 값이 100으로 출력된다.
이번엔 time을 realtime으로 바꿔서 실행해보자.
`timescale 1ns/10ps
module test_realtime();
realtime t;
initial begin
#1 t = $realtime; $display("T = %0t at time #1 ", t);
#0.49 t = $realtime; $display("T = %0t at time #0.49", t);
#0.50 t = $realtime; $display("T = %0t at time #0.50", t);
#0.51 t = $realtime; $display("T = %0t at time #0.51", t);
$finish;
end
endmodule
실행하면 아래와 같이 출력된다.
T = 100 at time #1
T = 149 at time #0.49
T = 199 at time #0.50
T = 250 at time #0.51
소수점 이하가 반올림되지 않고 온전히 처리되는 것을 볼 수 있다.
아래는 파형으로 출력한 결과이다.
이 외에도 logic, byte, shortreal 등 여러 가지 자료형이 있는 것 같으니, 필요 시 찾아보면 될 것 같다.