Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Verilog

Operasi File IO Verilog

Verilog memiliki tugas dan fungsi sistem yang dapat membuka file, mengeluarkan nilai ke dalam file, membaca nilai dari file dan memuat ke variabel lain serta menutup file.

Membuka dan menutup file

  
  
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

  

Membuka mode file

Argumen Deskripsi "r" atau "rb" Terbuka untuk membaca "w" atau "wb" Buat file baru untuk menulis. Jika file ada, potong menjadi nol dan timpa "a" atau "ab" Jika file ada, tambahkan (buka untuk menulis di EOF), jika tidak buat file baru "r+", "r+b" atau "rb+" Terbuka untuk membaca dan menulis "w+", "w+b" atau "wb+" Potong atau buat untuk pembaruan "a+", "a+b", atau "ab+" Tambahkan, atau buat file baru untuk pembaruan di EOF

Cara menulis file

Fungsi Deskripsi $fdisplay Mirip dengan $display, menulis ke file sebagai gantinya $fwrite Mirip dengan $write, menulis ke file sebagai gantinya $fstrobe Mirip dengan $strobe, menulis ke file sebagai gantinya $fmonitor Mirip dengan $monitor, menulis ke file sebagai gantinya

Masing-masing sistem di atas berfungsi mencetak nilai dalam radix desimal. Mereka juga memiliki tiga versi lain untuk mencetak nilai dalam biner, oktal, dan heksadesimal.

Fungsi Deskripsi $fdisplay() Mencetak dalam desimal secara default $fdisplayb() Mencetak dalam biner $fdisplayo() Mencetak dalam oktal $fdisplayh() Mencetak dalam heksadesimal
  
  
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

  
Log Simulasi
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

Cara membaca file

Membaca satu baris

Fungsi sistem $fgets membaca karakter dari file yang ditentukan oleh [hl]fd[/hd] ke dalam variabel str hingga str terisi, atau karakter baris baru dibaca dan ditransfer ke str, atau ditemukan kondisi EOF.

Jika kesalahan terjadi selama membaca, itu mengembalikan kode nol. jika tidak, ia mengembalikan jumlah karakter yang dibaca.

Mendeteksi EOF

Fungsi sistem $feof mengembalikan nilai bukan nol ketika EOF ditemukan, dan mengembalikan nol sebaliknya untuk deskriptor file yang diberikan sebagai argumen.

  
  
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

  

Beberapa argumen untuk fdisplay

Ketika beberapa variabel diberikan ke $fdisplay , itu hanya mencetak semua variabel dalam urutan yang diberikan satu demi satu tanpa spasi.

  
  
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

  
Log Simulasi
10111213

Memformat data menjadi string

Argumen pertama di $sformat fungsi sistem adalah nama variabel di mana hasilnya ditempatkan. Argumen kedua adalah format_string yang memberi tahu bagaimana argumen berikut harus diformat menjadi 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

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


Verilog

  1. Tutorial Verilog
  2. Rangkaian Verilog
  3. Tugas Verilog
  4. Pemblokiran &Non-Pemblokiran Verilog
  5. Fungsi Verilog
  6. Tugas Verilog
  7. Generator Jam Verilog
  8. Fungsi Matematika Verilog
  9. Format Waktu Verilog
  10. Lingkup Skala Waktu Verilog