Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Funciones de Verilog

A menudo, encontramos que ciertos fragmentos de código son repetitivos y se llaman varias veces dentro del RTL. En su mayoría, no consumen tiempo de simulación y pueden implicar cálculos complejos que deben realizarse con diferentes valores de datos. En tales casos, podemos declarar un function y coloque el código repetitivo dentro de la función y permita que devuelva el resultado. Esto reducirá drásticamente la cantidad de líneas en el RTL, ya que todo lo que necesita hacer ahora es hacer una llamada de función y pasar datos sobre los que se debe realizar el cálculo. De hecho, esto es muy similar a las funciones en C.

El propósito de una función es devolver un valor que se utilizará en una expresión. Una definición de función siempre comienza con la palabra clave function seguido del tipo de devolución, el nombre y una lista de puertos entre paréntesis. Verilog sabe que la definición de una función ha terminado cuando encuentra el endfunction palabra clave. Tenga en cuenta que una función debe tener al menos una entrada declarada y el tipo de devolución será void si la función no devuelve nada.

Sintaxis

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

  

La palabra clave automatic hará que la función reentrante y los elementos declarados dentro de la tarea se asignan dinámicamente en lugar de compartirse entre diferentes invocaciones de la tarea. Esto será útil para funciones recursivas y cuando la misma función se ejecuta simultáneamente por N procesos cuando se bifurca.

Declaraciones de funciones

Hay dos formas de declarar entradas a una función:

  
  
	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

  

Devolver un valor de una función

La definición de la función creará implícitamente una variable interna con el mismo nombre que la función. Por lo tanto, es ilegal declarar otra variable con el mismo nombre dentro del alcance de la función. El valor devuelto se inicializa asignando el resultado de la función a la variable interna.

  
  
	sum = a + b;

  

Llamar a una función

Una llamada de función es un operando con una expresión y tiene una sintaxis como la que se muestra a continuación.

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

  

Reglas de funciones

Funciones recursivas

Las funciones que se llaman a sí mismas se llaman funciones recursivas. En el ejemplo que se muestra a continuación, se escribe una función recursiva para calcular el factorial de un número dado.

  
  
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

  
Registro de simulación
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 funciones populares en Stratasys Insight
  2. Funciones de C++ con ejemplos de programas
  3. Funciones Python Lambda con EJEMPLOS
  4. Tutorial de Verilog
  5. Concatenación Verilog
  6. Asignaciones de Verilog
  7. Bloqueo y no bloqueo de Verilog
  8. Funciones matemáticas de Verilog
  9. C - Funciones
  10. MATLAB - Funciones
  11. Python - Funciones