Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Operaciones de E/S de archivos de Verilog

Verilog tiene tareas y funciones del sistema que pueden abrir archivos, generar valores en archivos, leer valores de archivos y cargar en otras variables y cerrar archivos.

Abrir y cerrar archivos

  
  
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

  

Modos de apertura de archivos

Argumento Descripción
"r" o "rb" Abierto para lectura
"w" o "wb" Cree un nuevo archivo para escribir. Si el archivo existe, truncarlo a cero y sobrescribirlo
"a" o "ab" Si el archivo existe, añádalo (abrir para escribir en EOF), de lo contrario, cree un nuevo archivo
"r+", "r+b" o "rb+" Abierto tanto para lectura como para escritura
"w+", "w+b" o "wb+" Truncar o crear para actualizar
"a+", "a+b" o "ab+" Agregar o crear un nuevo archivo para actualizar en EOF

Cómo escribir archivos

Función Descripción
$fdisplay Similar a $display, escribe en archivo en su lugar
$fwrite Similar a $write, escribe en un archivo en su lugar
$fstrobe Similar a $strobe, escribe en archivo en su lugar
$fmonitor Similar a $monitor, escribe en archivo en su lugar

Cada una de las funciones del sistema anteriores imprime valores en base decimal. También tienen otras tres versiones para imprimir valores en binario, octal y hexadecimal.

Función Descripción
$fdisplay() Imprime en decimal por defecto
$fdisplayb() Imprime en binario
$fdisplayo() Imprime en octal
$fdisplayh() Imprime en hexadecimal
  
  
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

  
Registro de simulación
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

Cómo leer archivos

Leyendo una línea

La función del sistema $fgets lee los caracteres del archivo especificado por [hl]fd[/hd] en la variable str hasta que se llena str, o se lee un carácter de nueva línea y se transfiere a str, o se encuentra una condición EOF.

Si ocurre un error durante la lectura, devuelve el código cero. de lo contrario, devuelve el número de caracteres leídos.

Detección de EOF

La función del sistema $feof devuelve un valor distinto de cero cuando se encuentra EOF y, de lo contrario, devuelve cero para un descriptor de archivo dado como argumento.

  
  
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

  

Múltiples argumentos para fdisplay

Cuando se dan múltiples variables a $fdisplay , simplemente imprime todas las variables en el orden dado una tras otra sin espacios.

  
  
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

  
Registro de simulación
10111213

Dar formato a los datos en una cadena

Primer argumento en el $sformat La función del sistema es el nombre de la variable en la que se coloca el resultado. El segundo argumento es format_string que indica cómo deben formatearse los siguientes argumentos en una cadena.

  
  
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

  
Registro de simulación
xcelium> run
a=10 b=0xb
xmsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Tutorial de Verilog
  2. Concatenación Verilog
  3. Asignaciones de Verilog
  4. Bloqueo y no bloqueo de Verilog
  5. Funciones de Verilog
  6. Tarea Verilog
  7. Generador de reloj Verilog
  8. Funciones matemáticas de Verilog
  9. Formato de hora de Verilog
  10. Alcance de la escala de tiempo de Verilog
  11. Verilog Hola Mundo