Hallo ich bin beschäftige mich garde mit VHDL und Quartus und komme jetzt zu einem Speicherplatzproblem. dabei summiere ich immer wieder neue Werte auf ein Signal , dass ich dann ausgebe. dabei gehen die Ergebnisse aber auf die logischen Elemente ( total logical elements; Größe 33216 ) während total memory Bits leer bleibt ( Größe 483840 ), wie kann ich aktuelle Werte hier speichern ( und mir zurückholen) ?
Vielleicht solltest Du Dir zuerst die Unterschiede zwischen einem FGPA und einem Prozessor klarmachen. Speicherelemente im FPGA sind etwas anderes als der Speicher im Prozessor und wird üblicherweise nicht zum Abspeichern vom Zwischenergenissen verwendet. Zeig eventuell ein bischen von Deinem Code, dann kann Dir besser geholfen werden.
case zaehler is WHEN 0 => ausgangimag0 <=ausgangimag0 + resultim;ausgang2 <= ausgangimag0; WHEN 1 => ausgangimag1 <=ausgangimag1 + resultim;ausgang2 <= ausgangimag1; WHEN 2 => ausgangimag2 <=ausgangimag2 + resultim;ausgang2 <= ausgangimag2; WHEN 3 => ausgangimag3 <=ausgangimag3 + resultim;ausgang2 <= ausgangimag3; WHEN 4 => ausgangimag4 <=ausgangimag4 + resultim;ausgang2 <= ausgangimag4; WHEN 5 => ausgangimag5 <=ausgangimag5 + resultim;ausgang2 <= ausgangimag5; WHEN 6 => ausgangimag6 <=ausgangimag6 + resultim;ausgang2 <= ausgangimag6; WHEN 7 => ausgangimag7 <=ausgangimag7 + resultim;ausgang2 <= ausgangimag7; WHEN 8 => ausgangimag8 <=ausgangimag8 + resultim;ausgang2 <= ausgangimag8; WHEN 9 => ausgangimag9 <=ausgangimag9 + resultim;ausgang2 <= ausgangimag9; WHEN 10 => ausgangimag10 <=ausgangimag10 + resultim;ausgang2 <= ausgangimag10; WHEN 11 => ausgangimag11 <=ausgangimag11 + resultim;ausgang2 <= ausgangimag11; WHEN 12 => ausgangimag12 <=ausgangimag12 + resultim;ausgang2 <= ausgangimag12; WHEN 13 => ausgangimag13 <=ausgangimag13 + resultim;ausgang2 <= ausgangimag13; WHEN 14 => ausgangimag14 <=ausgangimag14 + resultim;ausgang2 <= ausgangimag14; WHEN 15 => ausgangimag15 <=ausgangimag15 + resultim;ausgang2 <= ausgangimag15; WHEN 16 => ausgangimag16 <=ausgangimag16 + resultim;ausgang2 <= ausgangimag16; WHEN 17 => ausgangimag17 <=ausgangimag17 + resultim;ausgang2 <= ausgangimag17; WHEN 18 => ausgangimag18 <=ausgangimag18 + resultim;ausgang2 <= ausgangimag18; .......... usw ich hab insgesamt etwa 1000 Werte wie ausgangimagX zum Zwischen speichern
2 Anmerkungen : a) Es gibt auch in VHDL arrays, sodass man schreiben kann : ausgangimag[zaehler] <= ausgangimag[zaehler] + resulttim; Wenn ausgangimag vom Typ std_logic_vector ist oder unsigned ist, dann ist es vielleicht ein bischen komplizierter, weil man eine zusätzlichen Type definieren muss, aber es geht. b) Man kann diese ganzen Zählvariablen unter Umständen schon in eine Speicherelement des FPGAs legen (bei Altera kenne ich mich nicht aus, aber bei Xilinx heißt das BlockRAM), aber das hängt von ein paar Bedingungen ab. - Das was Du geschrieben hast, ist einen Anzahl von getrennten Zähler. Jeder Zähler enthält eine Additionseinheit, sodass Du 1000 Zähler, 1000 Adder usw. gleichzeitig im FPGA hast. Jeder Zähler ins unabhängig, sodass allle im Prinzip gleichzeitig zählen könnten, aber nur 1 Zähler wird jeweils aktiv. Damit kann man mit jedem Taktzyklus einen anderen Zähler ein- und ausschalten. - Die Speicher-Komponenten sind wie der Name sagt, Speicher. Diese können nicht einfach so aktualisiert werden, sondern man muss den Wert zuert aus dem Speicher holen, bearbeiten ( = inkrementieren) und zurückschreiben. Das geht nicht in einem einzelen Taktzylus. Als Vorteil hast Du aber nicht mehr 1000 Additionseinheiten, sondern nur mehr eine. Schau Dir einmal diese Blockrams (oder wie sie unter Altera heißen) an.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.