Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Verilog File IO-bewerkingen

Verilog heeft systeemtaken en -functies die bestanden kunnen openen, waarden in bestanden kunnen uitvoeren, waarden uit bestanden kunnen lezen en in andere variabelen kunnen laden en bestanden kunnen sluiten.

Bestanden openen en sluiten

  
  
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

  

Bestandsmodi openen

Argument Beschrijving
"r" of "rb" Open om te lezen
"w" of "wb" Maak een nieuw bestand om te schrijven. Als het bestand bestaat, kap het dan af tot een lengte van nul en overschrijf het
"a" of "ab" Als bestand bestaat, voeg toe (open voor schrijven bij EOF), maak anders een nieuw bestand
"r+", "r+b" of "rb+" Open voor zowel lezen als schrijven
"w+", "w+b" of "wb+" Afkappen of maken voor update
"a+", "a+b" of "ab+" Voeg toe of maak een nieuw bestand voor update bij EOF

Hoe bestanden te schrijven

Functie Beschrijving
$fdisplay Vergelijkbaar met $display, schrijft in plaats daarvan naar bestand
$fwrite Vergelijkbaar met $write, schrijft in plaats daarvan naar bestand
$fstrobe Vergelijkbaar met $strobe, schrijft in plaats daarvan naar bestand
$fmonitor Vergelijkbaar met $monitor, schrijft in plaats daarvan naar bestand

Elk van de bovenstaande systeemfuncties drukt waarden af ​​in radix decimaal. Ze hebben ook drie andere versies om waarden in binair, octaal en hexadecimaal af te drukken.

Functie Beschrijving
$fdisplay() Drukt standaard in decimalen af
$fdisplayb() Print in binair
$fdisplayo() Afdrukken in octaal
$fdisplayh() Print in hexadecimaal
  
  
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

  
Simulatielogboek
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

Hoe lees ik bestanden

Een regel lezen

De systeemfunctie $fgets leest tekens uit het bestand gespecificeerd door [hl]fd[/hd] in de variabele str totdat str is gevuld, of een nieuwe regel wordt gelezen en overgebracht naar str, of een EOF-voorwaarde wordt aangetroffen.

Als er een fout optreedt tijdens het lezen, wordt code nul geretourneerd. anders wordt het aantal gelezen tekens geretourneerd.

EOF detecteren

De systeemfunctie $feof retourneert een waarde die niet nul is wanneer EOF wordt gevonden, en geeft anders nul terug voor een gegeven bestandsdescriptor als 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

  

Meerdere argumenten om weer te geven

Als er meerdere variabelen worden gegeven aan $fdisplay , het drukt gewoon alle variabelen in de gegeven volgorde een voor een af ​​zonder spatie.

  
  
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

  
Simulatielogboek
10111213

Gegevens opmaken naar een string

Eerste argument in de $sformat systeemfunctie is de variabelenaam waarin het resultaat wordt geplaatst. Het tweede argument is de format_string die vertelt hoe de volgende argumenten moeten worden opgemaakt in een 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

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


Verilog

  1. Verilog-zelfstudie
  2. Verilog-aaneenschakeling
  3. Verilog-opdrachten
  4. Verilog blokkeren en niet-blokkeren
  5. Verilog-functies
  6. Verilog-taak
  7. Verilog-klokgenerator
  8. Verilog wiskundige functies
  9. Verilog Tijdnotatie
  10. Verilog Tijdschaalbereik
  11. Verilog Hallo Wereld