Работа с файлами
Verilog поддерживает функционал по работе с файловым вводом и выводом. Файл может быть открыт для чтения или записи с помощью команды $fopen()
, которая возвращает 32-разрядный целочисленный дескриптор, называемый файловым дескриптором. Этот дескриптор можно использовать для чтения и записи в этот файл до тех пор, пока он не будет закрыт. Дескриптор файла может быть закрыт с помощью $fclose()
. После закрытия дальнейшее чтение или запись через этот файловый дескриптор не допускается.
По умолчанию файл открывается в режиме записи. Файл также можно открыть в других режимах, указав тип режима. Ниже приведена часть режимов, в которых может быть открыт файл:
"r"
– открыть файл для чтения (файл должен существовать);"w"
– открыть пустой файл для записи; если файл существует, то его содержимое удаляется;"a"
– открыть файл для записи в конец (для добавления); файл создается, если он не существует
Для открытия в двоичном режиме используются "rb"
, "wb"
, "ab"
и пр.
Системные команды $fdisplay()
и $fwrite()
могут использоваться для записи форматированной строки в файл. Первым их аргументом является дескриптор файла, а затем указываются данные, которые следует сохранить.
Чтобы прочитать файл, он должен быть открыт либо в режиме чтения r
, либо в режиме чтения-записи r+
. $fgets()
считывает одну строку из файла.
$feof()
возвращает значение true при достижении конца файла. Это может быть использовано в цикле для чтения всего содержимого файла.
$fscanf()
работает по аналогии с функцией fscanf
в языке C, считывая данные из файла, интерпретируя их согласно заданному формату и записывая значения в остальные аргументы.
Пример
module file_tb;
integer fd, idx;
string str;
initial begin
fd = $fopen ("filename.ext", "w");
for (int i = 0; i < 5; i++)
$fdisplay (fd, "Iteration = %0d", i);
$fclose(fd);
fd = $fopen ("filename.ext", "r");
$display("fd = %0d", fd);
while ($fscanf (fd, "%s = %d", str, idx) == 2) begin
$display("Line: %s = %0d", str, idx);
end
$fclose(fd);
end
endmodule
Результат исполнения
fd = -2147483645
Line: Iteration = 0
Line: Iteration = 1
Line: Iteration = 2
Line: Iteration = 3
Line: Iteration = 4
Last updated