as funções definidas pelo utilizador em VHDL

B

Bartart

Guest
Oi!

O meu problema é que eu escrevi tem uma função com 3 parâmetros de entrada (inteiro, inteiro e std_logic_vector) e regresso std_logic_vector.Este pacote é synthesible.que OK

mas no meu código VHDL quando eu uso a função não funciona.

a sintaxe é

SO <= diversão 3 6 "101";

o erro é

No modo formal xfrom de diversão sem valor padrão deve ser associado a um valor real.alguma idéia de como resolver o meu problema?

bart

 
Bartart escreveu:

Oi!

mas no meu código VHDL quando eu uso a função não funciona.a sintaxe éSO <= diversão 3 6 "101";o erro éNo modo formal xfrom de diversão sem valor padrão deve ser associado a um valor real.

bart
 
Esta função recebe dois argumentos como um número inteiro e como std_logic_vector.Saída da função é prorrogado logic_vector com sinal bit (MSB) dos dados de entrada.

exemplo:

diversão (3,6, "101") deve retornar
111.101diversão (8,6, "001") - | | - 001 erro

Esta é uma função definição:

função fun (
sinal xfrom: inteiro;
signalal xto: inteiro;
sinal xdat: std_logic_vector) return std_logic_vector é

variável lxdat: std_logic_vector ((xto - xfrom) virou 0);

começo
if ((xto - xfrom) = 0 ou (xto - xfrom) <0) então
retorno xdat;
elsif (xto - xfrom)> 0 then
para i no xfrom para xto loop
lxdat (i xfrom): = xdat (xfrom);
fim loop;
retorno lxdat;
end if;
final diversão;Tenho tentado com diversão (), mas sem efeito.<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Chorando ou muito triste" border="0" />
thx vomitar!

Bart

 
O problema aqui é a correspondência entre real e formal parâmetros:

você definiu xfrom, xto e xdata (parâmetros formais), como sinais, enquanto os verdadeiros parâmetros que você
está usando são constantes.

Você pode:

1) definir três sinais A, B, inteiro, como std_logic_vector C e utilizá-los para passar parâmetros para a função real;

2) remover o sinal definição de parâmetros formais

Tenta modificar a definição você função como:

função fun (xfrom: inteiro;
xto: inteiro;
xdat: std_logic_vector)
return std_logic_vector

Funciona muito bem!

Preste atenção também para a sua execução; imho há alguns erros: se
eu compreendi suas intenções, o código correto seria

função fun (xfrom: inteiro;
xto: inteiro;
xdat: std_logic_vector)
return std_logic_vector é

variável lxdat: std_logic_vector ((xto - 1) virou 0);

começo
if ((xto - xfrom) = 0 ou (xto - xfrom) <0) então
retorno xdat;
elsif (xto - xfrom)> 0 then
para i de 0 a xfrom - 1 loop
lxdat (i): = xdat (i);
fim loop;
para i no xfrom - 1 a xto - 1 loop
lxdat (i): = xdat (xfrom-1);
fim loop;
retorno lxdat;
end if;
final diversão;

Esperando que esta será uma ajuda para você,

Ro.

 

Welcome to EDABoard.com

Sponsor

Back
Top