в VHDL, как проверить, существует ли файл перед его открытием? - PullRequest
1 голос
/ 28 мая 2019

В Verilog я могу проверить, существует ли файл, открыв его, а затем проверив, равен ли дескриптор файла нулю, и если он не предполагает, что файл не существует. Например, следующим образом:

    module testbench;

    function file_exists;
        input [80*8:0] filename;        
        integer        file;
        integer        error;
    begin
        file = $fopen(filename, "r");
        if (!file) begin
           $display("\nFile Open Failed with Error Code = %x", error); 
           file_exists = 0;
        end
        else begin
           $fclose(file);
           file_exists = 1;
        end
    end
    endfunction

    integer x;
    initial begin
       x = file_exists("sdfsdf.txt");
       $display("x: %0b", x);          
    end

    endmodule

Как я могу сделать то же самое в VHDL?

Ответы [ 2 ]

5 голосов
/ 28 мая 2019

Когда вы открываете файл, например:

file_open(status, file_handle, “my_file.txt”, read_mode);

Вы получаете статус типа file_open_status. Может иметь несколько значений: open_ok, status_error, name_error и mode_error. Вы получите name_error, если файл не найден

1 голос
/ 28 мая 2019
use ieee.std_logic_1164.all;
use std.textio.all;          

entity testebench is 
end entity;

architecture sim of testbench is 

    impure function file_exists(
        filename : in string
    ) return boolean is
        variable open_status :FILE_OPEN_STATUS;
        file     infile      :text;
    begin
        file_open(open_status, infile, filename, read_mode);
        if open_status /= open_ok then
            return false;
        else
            file_close(infile);
            return true;
        end if;
    end function;

begin

    process
        f1 :boolean;
    begin
        f1 = file_exists("fgsfgsdfg.txt")
        report "found: " & boolean'image(f1);
    end process;

end architecture;
...