2017-10-08 8 views
-1

Je suis peut ne pas sembler lire le 4ème octet dans un fichier hex:fseek ne fonctionne pas dans le système 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 

contenu du fichier ...

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

Merci encore!

+0

Veuillez revenir en arrière et éditer votre code en supprimant tous les commentaires. –

+0

Oui, c'est pourquoi je lisais le fichier en hexadécimal. Cela n'est-il pas possible? –

+0

@coding_gal Vous devriez être en mesure de frapper (éditer) sous votre poste, de sorte que vous pouvez modifier le message réel pour supprimer les commentaires. Vous devriez également nous dire ce qui * arrive * lorsque vous exécutez votre programme. – joeytwiddle

Répondre

0

$fseek ne lit pas un caractère d'un fichier, il indique simplement où le caractère doit être lu dans le fichier. Au lieu de cela, vous pouvez utiliser $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 

Alors, j'ai déplacé l'appel à $fseek dehors de la boucle - nous voulons seulement faire une fois donné le format que vous avez décrit. J'ai également changé le décalage à 4, en supposant que vous vouliez passer le 00000000. J'ai changé la variable affectée par la valeur de retour de $fseek-status, parce que c'est ce qui est de retour de $fseek:

0 pour le succès, -1 pour erreur

En outre, $fgetc retourne une -1 pour indiquer la fin du fichier. , Vous voulez peut-être ainsi changer votre boucle while à une boucle dowhile et tester la valeur de file_char à la fin (et de se débarrasser de $feof) par exemple

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 

(je n'ai pas testé l'une de ces deux blocs de code donné le manque d'un fichier pour les tester sur.)

+0

Merci! beaucoup.Cela aide :) –