File I/O

RTL 2010. 4. 21. 17:30
자주 쓰이는 file I/O functions

$fopen(filename);
Description: filename파일을 열고, descriptor를 return한다.

$fclose([descriptor]);
Description: descriptor에 해당하는 file을 닫는다. descriptor가 명시되지 않으면 열린 파일을 모두 닫는다.


$fdisplay(descriptor, paramters as in the display command);
Description: $display가 하는 출력을 descriptor에 해당하는 file에 출력한다. 이 다음에 출력하는 내용은 다음 줄에 출력된다. ($display의 특성)

$fwrite(descriptor, paramters as in the display command);
Description: $write가 하는 출력을 descriptor에 해당하는 file에 출력한다. 이 다음에 출력하는 내용은 같은 줄 출력 후 위치부터 시작된다. ($write의 특성)

$fstrobe(descriptor, paramters as in the display command);
Description: 현재 simulation time이 지나가기 직전의 상황을 descriptor에 해당하는 file에 출력한다. 즉, $fdisplay$fwrite의 경우 해당 function이 call되는 순간의 상황을 출력하지만, $fstrobe의 경우, 해당 function이 call되면 출력 예약을 해놓고, 현 simulation time에서의 process를 모두 수행하고 simulation time이 지나가기 직전에 예약된 출력을 수행한다. 이를 통해 해당 simulation time에서의 모든 signal들의 변경이 이루어 진 후의 signal의 state를 출력하게 된다.

$fmonitor(descriptor, paramters as in the display command);
Description: Simulation이 끝날 때 까지 뒤의 parameter로 등록된 signal의 변화가 있을 경우, paramter의 내용을 descriptor에 해당하는 file에 출력한다.

예)
integer file ;
reg a, b, c;
initial
begin
file = $fopen("results.dat") ;
a = b & c ;
$fdisplay(file, "Result is: %b", a) ;
$fclose(file) ;
end


$readmemb("filename", mem_name, [,start_addr [,end_addr]]);
Description: filename의 file로부터 binary data를 읽어와 mem_name array에 저장한다. start_addr이 명시되어 있으면, mem_name[start_addr]부터 데이터를 읽어온다.
start_addr과 end_addr이 명시되어 있으면, mem_name[start_addr]에서부터 mem_name[end_addr]까지 데이터를 읽어온다.
예)
reg [3:0] memory [15:0] ;
initial begin
$readmemb("data.bin", memory) ;
end

$readmemh("filename", mem_name, [,start_addr [,end_addr]]);
Description: filename의 file로부터 hexadecimal data를 읽어와 mem_name array에 저장한다. start_addr이 명시되어 있으면, mem_name[start_addr]부터 데이터를 읽어온다.
start_addr과 end_addr이 명시되어 있으면, mem_name[start_addr]에서부터 mem_name[end_addr]까지 데이터를 읽어온다.
예)
reg [3:0] memory [15:0] ;
initial $readmemh("data.hex", memory, 4, 2) ;

$writememb("filename", mem_name, [,start_addr [,end_addr]]);
Description: mem_name array의 내용을 filename의 file에 binary 형식으로 저장한다.
start_addr이 명시되어 있으면, mem_name[start_addr]부터 데이터를 file에 쓴다.
start_addr과 end_addr이 명시되어 있으면, mem_name[start_addr]에서부터 mem_name[end_addr]까지 데이터를 file에 쓴다.

$writememh("filename", mem_name, [,start_addr [,end_addr]]);
Description: mem_name array의 내용을 filename의 file에 hexadecimal 형식으로 저장한다.
start_addr이 명시되어 있으면, mem_name[start_addr]부터 데이터를 file에 쓴다.
start_addr과 end_addr이 명시되어 있으면, mem_name[start_addr]에서부터 mem_name[end_addr]까지 데이터를 file에 쓴다.

예)
integer i; 
reg
[7:0] memory [0:15]; // 8 bit memory with 16 entries
 
 
initial
begin
 
for (i=0; i<16; i++) begin 
       memory = i; 
end 
$writememb("memory_binary.txt", memory); 
$writememh("memory_hex.txt", memory); 
end 

'RTL' 카테고리의 다른 글

Clock Control  (0) 2011.02.10
AXI narrow write operation  (0) 2010.11.24
SystemVerilog Syntax vi Plug-in  (0) 2010.06.14
Testbench 작성시 @(posedge CLK)의 유의 사항  (0) 2010.05.12
Verilog Language Reference Manual  (0) 2010.04.21
Posted by sunshowers
,