2017-10-08 121 views
-1

我似乎無法讀取一個十六進制文件的第4個字節:FSEEK系統的Verilog不工作

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

    initial begin 
     fd = $fopen("README.lz4", "rb"); 
     while (!$feof(fd)) begin 
       file_char=$fseek(fd,5,0); 
       $display("file char is %h",file_char); 
     end 
    end 
endmodule 

文件內容...

00000000 04 22 4d 18 64 40 a7 43.... 
......... 

再次感謝!

+0

請返回並編輯您的代碼,刪除所有評論。 –

+0

是的,這就是爲什麼我正在讀hex.Is這是不可能的? –

+0

@coding_gal您應該可以在帖子下面點擊(編輯),以便您可以編輯實際帖子以刪除評論。你也應該告訴我們當你運行你的程序時會發生什麼。 – joeytwiddle

回答

0

$fseek不從文件中讀取字符,它只是指定字符在哪裏讀取。相反,你可以使用$fgetc

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

    initial begin 
     fd = $fopen("README.lz4", "rb"); 
     status=$fseek(fd,4,0); 
     while (!$feof(fd)) begin 
      file_char=$fgetc(fd); 
      $display("file char is %h",file_char); 
     end 
    end 
endmodule 

所以,我提出了循環外調用$fseek - 我們只想做一次給你所描述的格式。我還將偏移量更改爲4,假設您想跳過00000000。我已經改變了由$fseekstatus的返回值賦值給變量,因爲這是從$fseek返回:

0成功,-1錯誤

此外,$fgetc返回-1來表示文件的結尾。所以,你也許想將while循環更改爲dowhile循環,並在年底測試file_char值(和擺脫$feof)如

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

    initial begin 
     fd = $fopen("README.lz4", "rb"); 
     status=$fseek(fd,4,0); 
     assert (status); 
     do begin 
      file_char=$fgetc(fd); 
      $display("file char is %h",file_char); 
     end 
     while (file_char != -1); 
    end 
endmodule 

(我沒有測試過以下兩種塊代碼給出缺少文件來測試它們。)

+0

謝謝!很多。這有助於:) –