Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Verilog

Verilog-Datei-IO-Operationen

Verilog hat Systemaufgaben und Funktionen, die Dateien öffnen, Werte in Dateien ausgeben, Werte aus Dateien lesen und in andere Variablen laden und Dateien schließen können.

Öffnen und Schließen von Dateien

  
  
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

  

Öffnen von Dateimodi

Argument Beschreibung
"r" oder "rb" Zum Lesen geöffnet
"w" oder "wb" Erstellen Sie eine neue Datei zum Schreiben. Wenn die Datei vorhanden ist, kürzen Sie sie auf die Länge Null und überschreiben Sie sie
"a" oder "ab" Wenn die Datei existiert, anhängen (zum Schreiben am EOF öffnen), andernfalls eine neue Datei erstellen
"r+", "r+b" oder "rb+" Offen zum Lesen und Schreiben
"w+", "w+b" oder "wb+" Zur Aktualisierung kürzen oder erstellen
"a+", "a+b" oder "ab+" Anhängen oder neue Datei zur Aktualisierung bei EOF erstellen

Wie man Dateien schreibt

Funktion Beschreibung
$fdisplay Ähnlich wie $display, schreibt stattdessen in eine Datei
$fwrite Ähnlich wie $write, schreibt stattdessen in eine Datei
$fstrobe Ähnlich wie $strobe, schreibt stattdessen in eine Datei
$fmonitor Ähnlich wie $monitor, schreibt stattdessen in eine Datei

Jede der oben genannten Systemfunktionen gibt Werte in Radix-Dezimalzahlen aus. Sie haben auch drei andere Versionen, um Werte in binärer, oktaler und hexadezimaler Form auszugeben.

Funktion Beschreibung
$fdisplay() Druckt standardmäßig dezimal
$fdisplayb() Druckt im Binärformat
$fdisplayo() Druckt in Oktal
$fdisplayh() Druckt im Hexadezimalformat
  
  
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

  
Simulationsprotokoll
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

Wie man Dateien liest

Eine Zeile lesen

Die Systemfunktion $fgets liest Zeichen aus der durch [hl]fd[/hd] angegebenen Datei in die Variable str, bis str gefüllt ist, oder ein Newline-Zeichen gelesen und an str übertragen wird, oder eine EOF-Bedingung auftritt.

Wenn während des Lesens ein Fehler auftritt, wird der Code Null zurückgegeben. andernfalls wird die Anzahl der gelesenen Zeichen zurückgegeben.

EOF erkennen

Die Systemfunktion $feof gibt einen Wert ungleich Null zurück, wenn EOF gefunden wird, und gibt sonst Null für einen gegebenen Dateideskriptor als Argument zurück.

  
  
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

  

Mehrere Argumente für fdisplay

Wenn mehrere Variablen an $fdisplay übergeben werden , es gibt einfach alle Variablen in der angegebenen Reihenfolge nacheinander ohne Leerzeichen aus.

  
  
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

  
Simulationsprotokoll
10111213

Daten in einen String formatieren

Erstes Argument im $sformat Systemfunktion ist der Variablenname, in den das Ergebnis eingefügt wird. Das zweite Argument ist der format_string die angibt, wie die folgenden Argumente in einen String formatiert werden sollen.

  
  
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

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


Verilog

  1. Verilog-Tutorial
  2. Verilog-Verkettung
  3. Verilog-Aufgaben
  4. Verilog-Blockierung und Nicht-Blockierung
  5. Verilog-Funktionen
  6. Verilog-Aufgabe
  7. Verilog-Taktgenerator
  8. Verilog Math-Funktionen
  9. Verilog-Zeitformat
  10. Verilog-Zeitskalenumfang