Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Fonctions Verilog

Souvent, nous constatons que certains morceaux de code sont répétitifs et appelés plusieurs fois dans le RTL. Ils ne consomment généralement pas de temps de simulation et peuvent impliquer des calculs complexes qui doivent être effectués avec différentes valeurs de données. Dans ce cas, on peut déclarer un function et placez le code répétitif à l'intérieur de la fonction et permettez-lui de renvoyer le résultat. Cela réduira considérablement le nombre de lignes dans le RTL puisque tout ce que vous avez à faire maintenant est de faire un appel de fonction et transmettre des données sur lesquelles le calcul doit être effectué. En fait, cela ressemble beaucoup aux fonctions en C.

Le but d'une fonction est de renvoyer une valeur qui doit être utilisée dans une expression. Une définition de fonction commence toujours par le mot-clé function suivi du type de retour, du nom et d'une liste de ports entre parenthèses. Verilog sait qu'une définition de fonction est terminée lorsqu'il trouve le endfunction mot-clé. Notez qu'une fonction doit avoir au moins une entrée déclarée et le type de retour sera void si la fonction ne retourne rien.

Syntaxe

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

  

Le mot-clé automatic rendra la fonction réentrante et les éléments déclarés dans la tâche sont alloués dynamiquement plutôt que partagés entre les différentes invocations de la tâche. Cela sera utile pour les fonctions récursives et lorsque la même fonction est exécutée simultanément par N processus lorsqu'elle est forkée.

Déclarations de fonction

Il existe deux manières de déclarer des entrées à une fonction :

  
  
	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

  

Renvoyer une valeur d'une fonction

La définition de la fonction créera implicitement une variable interne du même nom que celui de la fonction. Par conséquent, il est illégal de déclarer une autre variable du même nom à l'intérieur de la portée de la fonction. La valeur de retour est initialisée en affectant le résultat de la fonction à la variable interne.

  
  
	sum = a + b;

  

Appeler une fonction

Un appel de fonction est un opérande avec une expression et a une syntaxe comme indiqué ci-dessous.

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

  

Règles de fonctionnement

Fonctions récursives

Les fonctions qui s'appellent elles-mêmes sont appelées fonctions récursives. Dans l'exemple ci-dessous, une fonction récursive est écrite pour calculer la factorielle d'un nombre donné.

  
  
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

  
Journal de simulation
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 fonctions populaires dans Stratasys Insight
  2. Fonctions C++ avec exemples de programmes
  3. Fonctions Python Lambda avec EXEMPLES
  4. Tutoriel Verilog
  5. Concaténation Verilog
  6. Affectations Verilog
  7. Verilog bloquant et non bloquant
  8. Fonctions mathématiques Verilog
  9. C-Fonctions