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

Verilog-Funktionen

Oft stellen wir fest, dass sich bestimmte Codeteile wiederholen und innerhalb der RTL mehrmals aufgerufen werden. Sie verbrauchen meistens keine Simulationszeit und können komplexe Berechnungen beinhalten, die mit unterschiedlichen Datenwerten durchgeführt werden müssen. In solchen Fällen können wir einen function deklarieren und platzieren Sie den sich wiederholenden Code in der Funktion und lassen Sie das Ergebnis zurückgeben. Dadurch wird die Anzahl der Zeilen in der RTL drastisch reduziert, da Sie jetzt nur noch einen Funktionsaufruf ausführen müssen und Daten weiterleiten, an denen die Berechnung durchgeführt werden muss. Tatsächlich ist dies den Funktionen in C sehr ähnlich.

Der Zweck einer Funktion besteht darin, einen Wert zurückzugeben, der in einem Ausdruck verwendet werden soll. Eine Funktionsdefinition beginnt immer mit dem Schlüsselwort function gefolgt von Rückgabetyp, Name und einer in Klammern eingeschlossenen Portliste. Verilog weiß, dass eine Funktionsdefinition beendet ist, wenn es den endfunction findet Stichwort. Beachten Sie, dass für eine Funktion mindestens eine Eingabe deklariert sein muss und der Rückgabetyp void sein wird wenn die Funktion nichts zurückgibt.

Syntax

  
  
	function [automatic] [return_type] name ([port_list]);
		[statements]
	endfunction

  

Das Schlüsselwort automatic macht die Funktion reentrant und innerhalb der Aufgabe deklarierte Elemente werden dynamisch zugewiesen und nicht zwischen verschiedenen Aufrufen der Aufgabe geteilt. Dies ist nützlich für rekursive Funktionen und wenn die gleiche Funktion beim Forken gleichzeitig von N Prozessen ausgeführt wird.

Funktionsdeklarationen

Es gibt zwei Möglichkeiten, Eingaben für eine Funktion zu deklarieren:

  
  
	function [7:0] sum;
		input [7:0] a, b;
		begin
			sum = a + b;
		end
	endfunction
	
	function [7:0] sum (input [7:0] a, b);
		begin
			sum = a + b;
		end
	endfunction

  

Rückgabe eines Werts von einer Funktion

Die Funktionsdefinition erstellt implizit eine interne Variable mit dem gleichen Namen wie die Funktion. Daher ist es illegal, eine andere Variable mit demselben Namen innerhalb des Gültigkeitsbereichs der Funktion zu deklarieren. Der Rückgabewert wird durch die Zuweisung des Funktionsergebnisses an die interne Variable initialisiert.

  
  
	sum = a + b;

  

Aufruf einer Funktion

Ein Funktionsaufruf ist ein Operand mit einem Ausdruck und hat die unten gezeigte Syntax.

  
  
	reg [7:0] result;
	reg [7:0] a, b;
	
	initial begin
		a = 4;
		b = 5;
		#10 result = sum (a, b);
	end

  

Funktionsregeln

Rekursive Funktionen

Funktionen, die sich selbst aufrufen, heißen rekursive Funktionen. Im unten gezeigten Beispiel wird eine rekursive Funktion geschrieben, um die Fakultät einer gegebenen Zahl zu berechnen.

  
  
module tb;
  initial begin
    integer result = factorial(4);
    $display("factorial(4) = %0d", result);
  end
  
	function automatic integer factorial(integer i);
      integer result = i;
      
      // This function is called within the body of this 
      // function with a different argument
      if (i) begin
      	result = i * factorial(i-1);
        $display("i=%0d result=%0d", i, result);
      end else
        result = 1;
        
      return result;
	endfunction
endmodule

  
Simulationsprotokoll
xcelium> run
i=1 result=1
i=2 result=2
i=3 result=6
i=4 result=24
factorial(4) = 24
xmsim: *W,RNQUIE: Simulation is complete


Verilog

  1. 10 beliebte Funktionen in Stratasys Insight
  2. C++ Funktionen mit Programmbeispielen
  3. Python-Lambda-Funktionen mit BEISPIELE
  4. Verilog-Tutorial
  5. Verilog-Verkettung
  6. Verilog-Aufgaben
  7. Verilog-Blockierung und Nicht-Blockierung
  8. Verilog Math-Funktionen
  9. C - Funktionen
  10. MATLAB - Funktionen