Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Opérations Verilog File IO

Verilog a des tâches et des fonctions système qui peuvent ouvrir des fichiers, générer des valeurs dans des fichiers, lire des valeurs à partir de fichiers et charger dans d'autres variables et fermer des fichiers.

Ouvrir et fermer des fichiers

  
  
module tb;
	// Declare a variable to store the file handler
	integer fd;
	
	initial begin
		// Open a new file by the name "my_file.txt" 
		// with "write" permissions, and store the file
		// handler pointer in variable "fd"
		fd = $fopen("my_file.txt", "w");
		
		// Close the file handle pointed to by "fd"
		$fclose(fd);
	end
endmodule

  

Ouvrir les modes de fichiers

Argument Description
"r" ou "rb" Ouvert à la lecture
"w" ou "wb" Créer un nouveau fichier pour l'écriture. Si le fichier existe, tronquez-le à zéro et écrasez-le
"a" ou "ab" Si le fichier existe, ajoutez-le (ouvert en écriture à EOF), sinon créez un nouveau fichier
"r+", "r+b" ou "rb+" Ouvert pour la lecture et l'écriture
"w+", "w+b" ou "wb+" Tronquer ou créer pour mise à jour
"a+", "a+b" ou "ab+" Ajouter ou créer un nouveau fichier pour mise à jour à EOF

Comment écrire des fichiers

Fonction Description
$fdisplay Similaire à $display, écrit plutôt dans un fichier
$fwrite Similaire à $write, écrit plutôt dans un fichier
$fstrobe Similaire à $strobe, écrit plutôt dans un fichier
$fmonitor Similaire à $monitor, écrit plutôt dans un fichier

Chacune des fonctions système ci-dessus imprime des valeurs en décimal de base. Ils ont également trois autres versions pour imprimer les valeurs en binaire, octal et hexadécimal.

Fonction Description
$fdisplay() Imprime en décimal par défaut
$fdisplayb() Imprime en binaire
$fdisplayo() Imprime en octal
$fdisplayh() Imprime en hexadécimal
  
  
module tb;
	integer  	fd;
	integer 	i;
	reg [7:0] 	my_var;
	
	initial begin
		// Create a new file
		fd = $fopen("my_file.txt", "w");
		my_var = 0;
		
      $fdisplay(fd, "Value displayed with $fdisplay");
		#10 my_var = 8'h1A;
		$fdisplay(fd, my_var);      // Displays in decimal
		$fdisplayb(fd, my_var); 	// Displays in binary
		$fdisplayo(fd, my_var); 	// Displays in octal
		$fdisplayh(fd, my_var); 	// Displays in hex
		
	  // $fwrite does not print the newline char '
' automatically at 
	  // the end of each line; So we can predict all the values printed
	  // below to appear on the same line
      $fdisplay(fd, "Value displayed with $fwrite");
		#10 my_var = 8'h2B;
		$fwrite(fd, my_var);
		$fwriteb(fd, my_var);
		$fwriteo(fd, my_var);
		$fwriteh(fd, my_var);
		
     
      // Jump to new line with '
', and print with strobe which takes
      // the final value of the variable after non-blocking assignments
      // are done
      $fdisplay(fd, "
Value displayed with $fstrobe");
		#10 my_var <= 8'h3C;
		$fstrobe(fd, my_var);
		$fstrobeb(fd, my_var);
		$fstrobeo(fd, my_var);
		$fstrobeh(fd, my_var);
		
      #10 $fdisplay(fd, "Value displayed with $fmonitor");
	  $fmonitor(fd, my_var);
		
		for(i = 0; i < 5; i= i+1) begin
			#5 my_var <= i;
		end
      
      #10 $fclose(fd);
	end
endmodule

  
Journal de simulation
Value displayed with $fdisplay
26
00011010
032
1a
Value displayed with $fwrite
 43001010110532b
Value displayed with $fstrobe
 60
00111100
074
3c
Value displayed with $fmonitor
 60
  0
  1
  2
  3
  4

Comment lire les fichiers

Lire une ligne

La fonction système $fgets lit les caractères du fichier spécifié par [hl]fd[/hd] dans la variable str jusqu'à ce que str soit rempli, ou qu'un caractère de saut de ligne soit lu et transféré vers str, ou qu'une condition EOF soit rencontrée.

Si une erreur survient lors de la lecture, il renvoie le code zéro. sinon elle renvoie le nombre de caractères lus.

Détection EOF

La fonction système $feof renvoie une valeur différente de zéro lorsque EOF est trouvé, et renvoie zéro sinon pour un descripteur de fichier donné comme argument.

  
  
module tb;
	reg[8*45:1] str;
	integer  	fd;
	
	initial begin
	  fd = $fopen("my_file.txt", "r");
	  
	  // Keep reading lines until EOF is found
      while (! $feof(fd)) begin
      
      	// Get current line into the variable 'str'
        $fgets(str, fd);
        
        // Display contents of the variable
        $display("%0s", str);
      end
      $fclose(fd);
	end
endmodule

  

Plusieurs arguments pour fdisplay

Lorsque plusieurs variables sont données à $fdisplay , il imprime simplement toutes les variables dans l'ordre donné les unes après les autres sans espace.

  
  
module tb;
  reg [3:0] a, b, c, d;
  reg [8*30:0] str;
  integer fd;
  
  initial begin
    a = 4'ha;
    b = 4'hb;
    c = 4'hc;
    d = 4'hd;
    
    fd = $fopen("my_file.txt", "w");
    $fdisplay(fd, a, b, c, d);
    $fclose(fd);
  end
endmodule

  
Journal de simulation
10111213

Formater les données en une chaîne

Premier argument dans le $sformat fonction système est le nom de la variable dans laquelle le résultat est placé. Le deuxième argument est le format_string qui indique comment les arguments suivants doivent être formatés en une chaîne.

  
  
module tb;
	reg [8*19:0] str;
	reg [3:0] a, b;
	
	
	initial begin
		a = 4'hA;
		b = 4'hB;
		
		// Format 'a' and 'b' into a string given
		// by the format, and store into 'str' variable
		$sformat(str, "a=%0d b=0x%0h", a, b);
		$display("%0s", str);
	end
endmodule

  
Journal de simulation
xcelium> run
a=10 b=0xb
xmsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Tutoriel Verilog
  2. Concaténation Verilog
  3. Affectations Verilog
  4. Verilog bloquant et non bloquant
  5. Fonctions Verilog
  6. Tâche Verilog
  7. Générateur d'horloge Verilog
  8. Fonctions mathématiques Verilog
  9. Format d'heure Verilog