mikrocontroller.net

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


Autor: Carlo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Mathi (Gast)
Datum:

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

Autor: Carlo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.