Чтение файла с использованием fgetc добавляет FF в конце

Я читаю файл с помощью fgetc. Чтение файла начинается со смещения. В конце я вижу добавление 8'hFF в конце файла. Я ожидаю 6 байтов в файле, но вижу 7 в них. Я не уверен, почему это происходит. Есть идеи?

Ниже мой код:

module file_read();
   integer fd,fd1,file_char,status;
   logic [7:0] captured_data;

   initial begin
        fd = $fopen("input_file", "rb");
        fd1 =$fopen("write_file","w");
        status=$fseek(fd,1872,0);

        assert (status);
      //  while ($fgetc(fd) != `EOF) begin
          while (!$feof(fd)) begin
          file_char=$fgetc(fd);
          $display("file char is %h",file_char);
         end
   end // initial begin

Ниже приведено содержимое файла (в шестнадцатеричном формате): последняя строка входного файла (общий размер файла = 1878):

0000750: 0000 1567 d48d... g..

запись_файла: 0000000: 0000 1567 d48d ff ...g...

Спасибо!

1 ответ

Причина, по которой вы получаете дополнительное 'hff в конце написанного файла связано с тем, как $feof (или вообще foef С функцией) работает. Проще говоря, он не проверяет, находится ли следующее чтение за концом файла, но проверяет ли предыдущее чтение конец файла. Итак, если вы читаете символ за символом (побайтно), используя $fgetc, $feof вернет истину только один раз $fgetc читает конец файла и возвращает EOF сам (т.е. -1 или 'hff если преобразовано в logic [7:0]). Вы должны проверять это состояние ошибки каждый раз, когда читаете байт, что-то вроде этого:

integer fd, ch;
...
fd = $fopen("file.bin", "rb");
...
while ((ch = $fgetc(fd)) != -1) begin
  $display(ch);
end
Другие вопросы по тегам