mikrocontroller.net

Forum: FPGA, VHDL & Co. interne RAM FPGA?


Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe DE0 Board von Altera und  möchte gern FIFO verwenden, um Daten 
zwischen zu speichern. ich habe ein FIFO Megafunction gefunden.
die erste Frage ist:
wenn ich diese Funktion verwende werden die Daten im FPGA zwischen 
gespeichert ?oder muss ich die externe SDRAM verwenden?
 die zweite Frage ist:
was muss ich tun ,wenn ich die SDRAM verwenden muss ?
Danke

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Sabine Mühller (zizo)

>zwischen zu speichern. ich habe ein FIFO Megafunction gefunden.
>die erste Frage ist:
>wenn ich diese Funktion verwende werden die Daten im FPGA zwischen
>gespeichert ?

Ja,

>oder muss ich die externe SDRAM verwenden?

Nein.

> die zweite Frage ist:
>was muss ich tun ,wenn ich die SDRAM verwenden muss ?

Einen SDRAM Controller per Megafunktion erzeugen und an das FIFO 
anbinden.

Mfg
Falk

Danke

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sabine,

die Frage hast Du ja schonmal gestellt. Und auch diesesmal gibst Du 
deinen Forumskollegen einfach zu wenig Information, als dass sie dir 
gute Hinweise geben könnten.

Ein FIFO im FPGA nutzt immer das interne RAM. Das begrenzt die mögliche 
Breite und die mögliche Tiefe. Wenn Du sehr viel Daten zwischenspeichern 
musst, dann wird Du einen extenen Speicher verwenden müssen. Dabei hängt 
es von der Datenrate und -menge ab, was da sinnvoll ist. Manchmal ist 
sogar eine Software-Lösung die beste. Aber um all das einzuschätzen zu 
können, müsstest Du einfach mehr über deine Anwendung schreiben. Es will 
ja keiner wissen, was das für Daten sind, aber Datenbreite, Datenrate 
und Pufferbedarf sind in dem Fall die Minimalinfos für brauchbare 
Hinweise.

Grüße,
Harald

Autor: Bill Lates (Firma: Mann) (billates)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,
ich habe fast das selbe Problem. Also ich versuche ein Framebuffer zu 
realiieren, aber ich frage mich ob ein interne RAM(1MB) schon für meine 
anwendung reichen könnte.

Auflösung:480 X 640
Farbtief: 16bit(Y,Cr)
PAL format(50 Hz)

was meinst du?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> was meinst du?
Die Frage ist (mit Verlaub) lächerlich.
Warum rechnest du das nicht einfach aus?

> RAM(1MB)
Sind das 1 Mega-Bits oder 1 Mega-Bytes?

> Auflösung:480 X 640
> Farbtief: 16bit(Y,Cr)
Also rechnen wir mal, wieviel so 1 Bild braucht:
480 X 640 X 16bit = 4915200 Bits = 614400 Bytes
Jetzt kannst du nach Beantwortung der vorigen Frage leicht selber 
abschätzen, ob das klappt. Ich tippe: Nein.

> PAL format(50 Hz)
Diese angabe ist für die Lösung des Problems vorerst uninteressant.

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Bill,

ich finde sehr interessant, dass Du anhand von Sabines post erkennst, 
dass Du das gleiche Problem hast. Sabine hat sich doch noch gar nicht 
geäußert zu ihrer Anwendung. Aber egal.

Einen frame buffer für ein Bild (statisch oder bewegt) innerhalb eines 
FPGA zu realisieren ist normalerweise nicht ökonomisch. 480*640*16 = 
4915200 Bits. Da müsste schon ein sehr großes und dementsprechen teures 
FPGA her. So etwas macht man mit externem DRAM.

Das ist dann logisch gesehen aber kein FIFO sondern ein Speicher. Eine 
Maschine muss dann dort die Daten reinschreiben und eine andere wieder 
rausholen, vielleicht bearbeiten, und wieder an andere Stelle in den 
Speicher schreiben. Dort holt das dritte Modul die Daten wieder raus... 
So kann man eine Video-Kette aufbauen, bis die Bandbreite des Speiches 
ausgereizt ist. Aber wie gesagt, das ist kein FIFO.

Autor: Bill Lates (Firma: Mann) (billates)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Harald,

@Lothar Miller
lächerlich,glaube ich nicht.
http://de.wikipedia.org/wiki/Framebuffer#cite_note-0
da steht 640 X 480 X 16 ---- 150 KB VGA  vielleicht  lese ich was 
andere,

und wenn ich keine lächerliche Frage hätte wäre ich bestimmt bei der 
NASA beschäftigt.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bill Lates schrieb:
> da steht 640 X 480 X 16 ---- 150 KB VGA  vielleicht  lese ich was
> andere,

du willst aber
> Farbtief: 16bit(Y,Cr)

und nicht 4bit. Die 16 sind die anzahl der Farben und nicht die der 
Bits.

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bill Lates (Firma: Mann) (billates):

und rechnen kannst Du auch nicht...

Kest

Autor: Bill Lates (Firma: Mann) (billates)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt habe ich die Erklärung und nur das ist mir sehr wichtig, danke 
peter

du willst aber
> Farbtief: 16bit(Y,Cr)

und nicht 4bit. Die 16 sind die anzahl der Farben und nicht die der
Bits.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bill Lates schrieb:
> da steht 640 X 480 X 16 ---- 150 KB VGA
> Hast DU selber einfach mal nachgerechnet?
640 Pixel/Zeile x 480 Zeilen = 307200 Pixel.
Für jedes dieser Pixel brauchst DU jetzt 2 Byte, also 2 Byte/Pixel.
Also kommt jetzt 307200 Pixel * 2 Byte/Pixel = 614400 Bytes.

> da steht 640 X 480 X 16 ---- 150 KB VGA
Jetzt aber echt. Es reicht nicht aus, irgendwelche Zahlen 
irgendwoherzugoogeln und nicht mal ansatzweise darüber Nachzudenken.
Denn da steht drüber  Breite × Höhe × Farben
und dann kommt        640    × 480  × 16
Und wenn du wüsstest oder dir überlegen könntest, dass 16 Farben in 4 
Bit passen, und damit 2 Pixel in ein Byte (2 x 4 Bit = 8 Bit), dann 
bekommst du deine 307200 Pixel klar in
307200 Pixel / 2 Pixel/Byte = 153600 Bytes.

> lächerlich,glaube ich nicht.
Doch, ich bleibe dabei: das ist Mathe auf Grundschulniveau, 4. Klasse.
Und die Überlegungen dahinter kannst du einfach mal auf einem Blatt 
kariertem Papier durchführen.


@  Harald Flügel
> So etwas macht man mit externem DRAM.
Ich würde Bill Lates für den Anfang zu einfachem asynchronem SRAM raten.

> Sabine hat sich doch noch gar nicht geäußert zu ihrer Anwendung.
Seit wann ist Sabine eine SIE?  ;-)

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar:

Du bist einfach zu gut. Lass ihn doch selber rechnen. Nach dem ersten 
Satz von ihm habe ich schon abgeschaltet. Das sieht man auch anderen 
Threads von ihm. Bei solchen Leuten vergeht mir einfach die Lust zu 
helfen oder irgendwas zu erklären.


Grüße,
Kest

Autor: Bill Lates (Firma: Mann) (billates)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Lothar

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kest schrieb:
> vergeht mir einfach die Lust zu helfen
Meine Toleranzschwelle liegt recht hoch...   :-)


Bill Lates schrieb:
> Danke Lothar
Schön, dass es doch noch geklappt hat...  ;-)

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke  Harald Flügel,
ich möchte mit mein FPGA Impulshöhe bestimmung, ich verwende ein ADC mit 
40Mhz .
der Signalbreite musste zwischen500 und 700 ns. Der wird digitalisiert 
durch der ADC , dann muss ich die digitale Werte Aufsummieren 
(bestimmung der Impulshöhe), dann in FIFO zwischenspeichern und nachher 
zum Rechner senden.
Vielen Dank für die Antworte es bleibt mir nur ein Frage:

Kann ich die Daten in FIFO schieben und gleichzeitig lesen? oder muss 
der FIFO erstemal voll werden dann kann ich lesen.

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die FIFOs von Altera sind so gemacht, dass man beliebig schreiben und 
lesen kann, also auch gleichzeitig und mit unterschiedlichen Takten. Auf 
der Leseseite muss man halt das Signal "empty" auswerten. Immer wenn das 
Signal 0 ist, dann steht mindestenst ein Datenwert im FIFO drin.

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke
noch eine Frage wenn ich die interne RAM verwende wo werden die Daten 
gespeichert ? in Embedded Memory Blocks oder total RAM bits??

Datenblatt:

Cyclone IIII 3C16 FPGA
 15,408 LEs
 56 M9K Embedded Memory Blocks
 504K total RAM bits
 56 embedded multipliers
 4 PLLs
 346 user I/O pins

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist beides das gleiche. So wie es aussieht hat jeder Mem-Block 9 Bit 
Breite und 1024 Worte Tiefe. 56 Stück davon sind vorhanden, was 
insgesamt 504kBit ergibt.

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.