brugerdefinerede funktioner i VHDL

B

Bartart

Guest
Hej!

Mit problem er jeg har skrevet en funktion med 3 inputparametre (heltal, heltal og std_logic_vector) og returnere std_logic_vector.Denne pakke er synthesible.at OK

men i min VHDL-kode, når jeg bruger den funktion, det virker ikke.

syntaksen er

SO <= sjov 3 6 "101";

fejlen

I mode Formel xfrom af sjov med nogen standardværdi skal være forbundet med en egentlig værdi.en idé om, hvordan man kan løse mit problem?

Bart

 
Bartart wrote:

Hej!

men i min VHDL-kode, når jeg bruger den funktion, det virker ikke.syntaksen erSO <= sjov 3 6 "101";fejlenI mode Formel xfrom af sjov med nogen standardværdi skal være forbundet med en egentlig værdi.

Bart
 
Denne funktion bliver to argumenter som heltal og en række som std_logic_vector.Output af funktionen er logic_vector med udvidet tegn bit (MSB) af input-data.

Eksempel:

sjov (3,6, "101") bør returnere
111.101sjov (8,6, "001") - | | - 001 fejl

Dette er en funktion definition:

funktion sjov (
signal xfrom: integer;
signalal xto: integer;
signal xdat: std_logic_vector) tilbagevenden std_logic_vector er

variable lxdat: std_logic_vector ((xto - xfrom) downto 0);

begynd
hvis ((xto - xfrom) = 0 eller (xto - xfrom) <0) så
tilbagevenden xdat;
elsif (xto - xfrom)> 0 så
for jeg i xfrom til xto loop
lxdat (I xfrom): = xdat (xfrom);
udgangen abonnentkredsløb;
tilbagevenden lxdat;
udgangen, hvis;
udgangen sjovt;Jeg har forsøgt med sjov (), men ingen effekt.<img src="images/smiles/icon_cry.gif" alt="Gråd eller meget trist" border="0" />
thx opkast!

Bart

 
Problemet her er kontakten mellem de faktiske og formelle parametre:

du definerede xfrom, xto og xdata (formelle parametre) som signaler, mens de faktiske parametre du bruger er konstanter.

Du kan:

1) definere tre signaler A, B, som heltal, C som std_logic_vector og bruge dem til at videregive faktiske parametre til funktionen;

2) fjerne signalet definition fra formelle parametre

Prøv at ændre du funktion definition som:

funktion sjov (xfrom: integer;
xto: integer;
xdat: std_logic_vector)
tilbagevenden std_logic_vector

Det fungerer fint!

Vær opmærksom også til din gennemførelse; imho der er nogle fejl: Hvis
jeg har forstået Deres hensigter, den rigtige kode ville være

funktion sjov (xfrom: integer;
xto: integer;
xdat: std_logic_vector)
tilbagevenden std_logic_vector er

variable lxdat: std_logic_vector ((xto - 1) downto 0);

begynd
hvis ((xto - xfrom) = 0 eller (xto - xfrom) <0) så
tilbagevenden xdat;
elsif (xto - xfrom)> 0 så
for jeg i 0 til xfrom - 1 loop
lxdat (i): = xdat (i);
udgangen abonnentkredsløb;
for jeg i xfrom - 1 til xto - 1 loop
lxdat (i): = xdat (xfrom-1);
udgangen abonnentkredsløb;
tilbagevenden lxdat;
udgangen, hvis;
udgangen sjovt;

Håber dette vil være en hjælp for dig,

Ro.

 

Welcome to EDABoard.com

Sponsor

Back
Top