자주 쓰이는 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
$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("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
$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 |