Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Operações de E/S de arquivo Verilog


O Verilog possui tarefas e funções do sistema que podem abrir arquivos, gerar valores em arquivos, ler valores de arquivos e carregar em outras variáveis ​​e fechar arquivos.

Abrindo e fechando arquivos

  
  
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 abertura de arquivo

Argumento Descrição
"r" ou "rb" Aberto para leitura
"w" ou "wb" Cria um novo arquivo para escrita. Se o arquivo existir, trunque-o para tamanho zero e sobrescreva-o
"a" ou "ab" Se o arquivo existir, anexe (abra para escrita em EOF), senão crie um novo arquivo
"r+", "r+b" ou "rb+" Aberto para leitura e escrita
"w+", "w+b" ou "wb+" Truncar ou criar para atualização
"a+", "a+b" ou "ab+" Anexar ou criar um novo arquivo para atualização no EOF

Como escrever arquivos

Função Descrição
$fdisplay Semelhante ao $display, grava em arquivo
$fwrite Semelhante a $write, grava no arquivo em vez disso
$fstrobe Semelhante ao $strobe, grava em arquivo
$fmonitor Semelhante ao $monitor, grava em arquivo

Cada uma das funções do sistema acima imprime valores em decimal de base. Eles também têm três outras versões para imprimir valores em binário, octal e hexadecimal.
Função Descrição
$fdisplay() Imprime em decimal por padrão
$fdisplayb() Imprime em binário
$fdisplayo() Imprime em octal
$fdisplayh() Imprime em 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 simulação
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

Como ler arquivos

Ler uma linha


A função do sistema $fgets lê caracteres do arquivo especificado por [hl]fd[/hd] na variável str até que str seja preenchido, ou um caractere de nova linha seja lido e transferido para str, ou uma condição EOF seja encontrada.

Se ocorrer um erro durante a leitura, ele retornará o código zero. caso contrário, retorna o número de caracteres lidos.

Detectando EOF


A função do sistema $feof retorna um valor diferente de zero quando EOF é encontrado e retorna zero caso contrário para um determinado descritor de arquivo 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

  

Vários argumentos para fdisplay


Quando várias variáveis ​​são fornecidas a $fdisplay , ele simplesmente imprime todas as variáveis ​​na ordem especificada, uma após a outra, sem espaço.
  
  
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 simulação
10111213

Formatando dados para uma string


Primeiro argumento no $sformat função do sistema é o nome da variável na qual o resultado é colocado. O segundo argumento é o format_string que informa como os argumentos a seguir devem ser formatados em uma string.
  
  
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 simulação
xcelium> run
a=10 b=0xb
xmsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Tutorial Verilog
  2. Concatenação Verilog
  3. Atribuições Verilog
  4. Verilog Blocking &Non-Blocking
  5. Funções Verilog
  6. Tarefa Verilog
  7. Gerador de Relógio Verilog
  8. Funções matemáticas Verilog
  9. Formato de hora Verilog
  10. Escopo da escala de tempo da Verilog