Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Funções Verilog


Muitas vezes, encontramos certos trechos de código repetitivos e chamados várias vezes dentro da RTL. Eles geralmente não consomem tempo de simulação e podem envolver cálculos complexos que precisam ser feitos com diferentes valores de dados. Nesses casos, podemos declarar um function e coloque o código repetitivo dentro da função e permita que ela retorne o resultado. Isso reduzirá drasticamente a quantidade de linhas na RTL, pois tudo o que você precisa fazer agora é fazer uma chamada de função e passar os dados sobre os quais o cálculo precisa ser executado. Na verdade, isso é muito semelhante às funções em C.

O objetivo de uma função é retornar um valor que deve ser usado em uma expressão. Uma definição de função sempre começa com a palavra-chave function seguido pelo tipo de retorno, nome e uma lista de portas entre parênteses. A Verilog sabe que uma definição de função terminou quando encontra o endfunction palavra-chave. Observe que uma função deve ter pelo menos uma entrada declarada e o tipo de retorno será void se a função não retornar nada.

Sintaxe

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

  

A palavra-chave automatic tornará a função reentrante e os itens declarados dentro da tarefa são alocados dinamicamente em vez de compartilhados entre diferentes invocações da tarefa. Isso será útil para funções recursivas e quando a mesma função for executada simultaneamente por N processos quando for bifurcada.

Declarações de função


Existem duas maneiras de declarar entradas para uma função:
  
  
	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

  

Retornando um valor de uma função


A definição da função criará implicitamente uma variável interna com o mesmo nome da função. Portanto, é ilegal declarar outra variável com o mesmo nome dentro do escopo da função. O valor de retorno é inicializado atribuindo o resultado da função à variável interna.
  
  
	sum = a + b;

  

Chamando uma função


Uma chamada de função é um operando com uma expressão e tem a sintaxe mostrada abaixo.
  
  
	reg [7:0] result;
	reg [7:0] a, b;
	
	initial begin
		a = 4;
		b = 5;
		#10 result = sum (a, b);
	end

  

Regras de função

Funções recursivas


Funções que chamam a si mesmas são chamadas de funções recursivas. No exemplo mostrado abaixo, uma função recursiva é escrita para calcular o fatorial de um determinado número.
  
  
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 simulação
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 funções populares no Stratasys Insight
  2. Funções C++ com exemplos de programas
  3. Funções do Python Lambda com EXEMPLOS
  4. Tutorial Verilog
  5. Concatenação Verilog
  6. Atribuições Verilog
  7. Verilog Blocking &Non-Blocking
  8. Funções matemáticas Verilog
  9. C - Funções
  10. MATLAB - Funções