You are on page 1of 3

Formal Definition

File I/O functions perform operations on files.

Simplified Syntax
$fopen (file_name) ;
$fclose (file_name) ;
$fdisplay (arguments) ;
$fwrite (arguments) ;
$fstrobe (arguments) ;
$fmonitor (arguments) ;
$readmemb ("file", memory_identifier [,begin_address[,end_address]]) ;
$readmemh ("file", memory_identifier [,begin_address[,end_address]]) ;

Description
The $fopen function opens a file and returns a multi-channel descriptor in the format
of an unsized integer. This is unique for each file. All communications between the
simulator and the file take place through the file descriptor. Users can specify only the
name of a file as an argument, this will create a file in the default folder or a folder
given in the full path description.
To close an opened file use the $fclose function. This function is called without any
arguments, it simply closes all opened files. If an argument is specified it will close
only a file in which the descriptor is given. By default, before the simulator
terminates, all open files are closed. This means that the user does not have to close
any files, and closing is done automatically by the simulator.
All file output tasks work in the same way as their corresponding display tasks. (see
the Display Tasks chapter for further information) The only difference is a file
descriptor that appears as the first argument in the function argument list. These
functions only can append data to a file and cannot read data from files.

To read data from a file and store it in memory, use the


functions: $readmemb and $readmemh. The $readmemb task reads binary data
and $readmemh reads hexadecimal data. Data has to exist in a text file. White space
is allowed to improve readability, as well as comments in both single line and block.
The numbers have to be stored as binary or hexadecimal values. The basic form of a
memory file contains numbers separated by new line characters that will be loaded
into the memory.
When a function is invoked without starting and finishing addresses, it loads data into
memory starting from the first cell. To load data only into a specific part of memory,
start and finish addresses have to be used. The address can be explicit, given in the file
with the @ (at) character and is followed by a hexadecimal address with data
separated by a space. It is very important to remember the range (start and finish
addresses) given in the file, the argument in function calls have to match each other,
otherwise an error message will be displayed and the loading process will be
terminated.

Examples
Example 1
integer file ;
reg a, b, c;
initial begin
file = $fopen("results.dat") ;
a=b&c;
$fdisplay(file, "Result is: %b", a) ;
$fclose(file) ;
end
Result of operation a = b & c will be put into the file result.dat.
Example 2
reg [3:0] memory [15:0] ;
initial begin
$readmemb("data.bin", memory) ;
end
Loading data in binary format from file data.bin into memory.
Example 3

reg [3:0] memory [15:0] ;


initial $readmemh("data.hex", memory, 4, 2) ;
Loading data in hexadecimal format from file data.hex into memory starting at
address 4 and down to 2.

Important Notes
If the file that is being opened in one block and accessed in another parallel
block, then an error can occur if accessing takes place before the file is opened.
Care must be taken when accessing files in independent procedural blocks.

Powered by IXwebhosting

You might also like