Forum: FPGA, VHDL & Co. von Function auf mehrdimensionalen Array zugreifen


von Carlo (Gast)


Lesenswert?

Hallo,
hab folgendes Problem:
Ich habe dieses Array global deklariert:

"architecture Behavioral of Testbench_1st is

type codematrix is array (0 to 100,0 to 255) of integer;"

und befülle es in einer späteren Prozedur mit Werten. Innerhalb dieser 
Prozedur wird eine Funktion aufgerufen, welche ebenso auf diese 
Codematrix zugreifen soll....passiert allerdings nicht:

function summe(difsign,mid: integer ) return integer is
   variable e,g,x: integer:=0;
  variable cod: codematrix;

begin
  cod(5,0):=12345;

  xy := difsign + mid;
       return xy;
   end summe;

Benötige allerdings unbedingt eine Funktion um einen rekursiven Aufruf 
zu ermöglichen. Ist nur ein theoretisches Beispiel, soll nicht 
synthetisiert werden. Ich will nur diese 12345 in die Codematrix 
schreiben...aus der Funktion. Xilinx gibt mir auch keine Syntaxfehler 
aus.

DANKE!!!

von Mathi (Gast)


Lesenswert?

Hast Du denn auch ne globale Instanz des Arrays angelegt?
Poste doch lieber mal Deinen Quelltext...

von Carlo (Gast)


Lesenswert?

hab es mit:
"shared variable code: codematrix" probiert-stürzt mir aber der 
simulator ab. übrigens hab ich mich oben verschrieben:statt procedure 
mein ich process.

danke!!!

Hier nochmal:

architecture Behavioral of Testbench_1st is

type codematrix is array (0 to 100,0 to 255) of integer;
type rechenmatrix is array (0 to 100,0 to 255) of integer;
-- shared variable code: codematrix;

 impure function summe(difsign,mid: integer ) return integer is
   variable ef,gh,xy: integer:=0;
--  variable code: codematrix;

   begin
  code(5,0):=12345;

  xy := difsign + mid;

    return xy;
   end summe;
.
.
.
begin


testlesen: process
    file INFILE: text open read_mode is "eingabe.txt" ;
    file OUTFILE: text open write_mode is "ausgabe1.txt";
    variable Line1, Line2, Line3: line;
    variable div: rechenmatrix ;
.
.
.
for x in difsign_count-1 downto 1 loop
div(1,x-1) := div(1,x) + div(0,x+1);
--div(1,20) := div(1,x-1);
code(2,x) := 0;--null schreiben
mitte := x;
exit when div(1,x-1) > 500;
end loop;

for i in mitte downto 0 loop
code(2,i) := 1;--eins schreiben
end loop;

div(1,20) := summe(55,500);
.
.
.
ist allerdings erstmal ein test...den eigentlichen algorithmus 
(shannon-fano) muss ich wohl mit rekursiven funktionen verwirklichen, 
deswegen brauch ich das ganze.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.