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

Dominar las funciones en Verilog para diseño RTL eficiente

A menudo encontramos ciertas piezas de código que son repetitivas y se llaman múltiples veces dentro del RTL. Generalmente no consumen tiempo de simulación y pueden involucrar cálculos complejos que deben realizarse con diferentes valores de datos. En tales casos, podemos declarar una function y colocar el código repetitivo dentro de la función permitiéndole devolver el resultado. Esto reducirá drásticamente la cantidad de líneas en el RTL ya que todo lo que necesita hacer ahora es una llamada a función y pasar los 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 usará en una expresión. Una definición de función siempre comienza con la palabra clave function seguida por el tipo de retorno, nombre y una lista de puertos entre paréntesis. Verilog sabe que una definición de función ha terminado cuando encuentra la palabra clave endfunction. Tenga en cuenta que una función debe tener al menos una entrada declarada y el tipo de retorno será void si la función no devuelve nada.

Sintaxis

function [automatic] [tipo_retorno] nombre ([lista_puertos]);
  [declaraciones]
endfunction

La palabra clave automatic hará que la función sea reentrante y los elementos declarados dentro de la tarea se asignarán 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 concurrentemente por N procesos cuando se bifurcan.

Declaraciones de función

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 desde una función

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

sum = a + b;

Llamar a una función

Una llamada a función es un operando con una expresión y tiene una sintaxis como 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 mostrado 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;
    // Esta función se llama dentro del cuerpo de esta
    // función con un argumento diferente
    if (i) begin
      result = i * factorial(i-1);
      $display("i=%0d result=%0d", i, result);
    end else
      result = 1;
    return result;
  endfunction
endmodule
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 esenciales de Insight para optimizar la impresión FDM de Stratasys
  2. Funciones en C++ Explicadas con Ejemplos de Código Prácticos
  3. Dominando funciones en C: Estructura, declaración y mejores prácticas
  4. Dominar Verilog: Tutorial completo para diseño de circuitos digitales
  5. Dominar la concatenación en Verilog: Guía práctica
  6. Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
  7. Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
  8. Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
  9. Funciones en MATLAB: Definición, Workspace, Entradas y Salidas
  10. Dominando las funciones lambda en Python: ejemplos prácticos y mejores prácticas
  11. Funciones en Python explicadas: Construyendo módulos de código reutilizable