$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 do
while
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.)
Veuillez revenir en arrière et éditer votre code en supprimant tous les commentaires. –
Oui, c'est pourquoi je lisais le fichier en hexadécimal. Cela n'est-il pas possible? –
@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