Forum: FPGA, VHDL & Co. E-funktionen mittel LUT in Ram abfahren


von Igor (Gast)


Lesenswert?

Hallo liebe Forenmitglieder,

ich hätte da eine Frage und hoffe, dass jemand so nett sie mir zu 
beantworten, da ich leider ein totaler Anfänger in FPGA bin:(

Ich hab follgendes Problem.
Ich möchte verschiedene E- funktion in mehreren LUT abfahren, dazu sind 
12 bit Quantiesierung (also 4096) und dies für 9091 Werte. Dies 
mulitpliziert 12 bit mal 9091 Werte sind ca. 110Kbits. Jetzt suche ich 
das richtige Board und mich verwirrt bei XILINX dieses Maximum 
Distributed Ram, dann Block Ram, und dann Total Block Ram... verstehe 
ich nicht so genau (selbst nach der Suche und mit durchlesen habs nicht 
so verstanden). Wenn ich jetzt z.B insgesammt verschiedene LUT die 
insgesamt 875 Kbits größe haben, muss ich dann mit welcher Spezifikation 
vergleichen von den drei da oben??


Für ne Antwort wäre ich euch sehr dankbar.

Mfg Igor

von Jan M. (mueschel)


Lesenswert?

distributed RAM -> Speicher der in normalen Logikzellen realisiert wird. 
Vorteil: Sehr genau "dosierbar", also fuer viele sehr kleine RAM-Bloecke 
geeignet. Nachteil: Sehr hoher Ressourcenverbrauch

Block RAM-> fertige Speicherbloecke im FPGA, normalerweise jeweils 
18kbit  gross. Eignen sich vor allem fuer groessere zusammenhaengende 
Speicher. und brauchen keine zusaetzlichen Logik-Ressourcen. Nachteil: 
Nur in 18kBit Bloecken nutzbar, Breite und Tiefe nur in festen Schritten 
einstellbar.
"Block RAM" gibt normalerweise die Anzahl der Speicherbloecke an, "Total 
Block RAM" die Groesse aller Block RAMs zusammen.

Du brauchst 110 kbit am Stueck, also einen FPGA der mindestens 7 Block 
RAMs a 18 kBit besitzt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> da ich leider ein totaler Anfänger in FPGA bin:(
Dann wirst du mit dieser Aufgabe eine steile Lernkurve vor dir haben...

> Ich möchte verschiedene E- funktion in mehreren LUT abfahren
Es gibt doch nur die e-Funktion  :-/
Wie wäre es mit dem Ablegen von Stützpunkten und linearer Interpolation 
dazwischen?

von Experte (Gast)


Lesenswert?

> Ich möchte verschiedene E- funktion in mehreren LUT abfahren

Taylor-Reihe und dann Polynom in Differenz-Gleichung überführen und 
implemtieren.

von Igor (Gast)


Lesenswert?

Wao das ging ja schnell:) danke nochmal.

Also ich habe es nicht richtig beschrieben ich habe eine E-funktionen 
mit verschiedenen Abklingzeiten und dies wird mit der Eingagnsintensität 
also Amplitude mal genommen. Aber die E funktionen besitzen verschiedene 
Abklingzeiten.

also ich habe eimal zwei dynamische E funktionen, d.h mit jeden neuen 
Eingangssignal wird die Amplitude geringer was bedeutet das ich wenn das 
signal kommt einmal dies mit einer LUT ausgeben muss während in einer 
anderen die nächste LUT geladen wird.

Dann habe ich zwei statische E funktion, d.h über die ganze Messreihe 
bliebt die Intensität gleich (Ich weis es klingt ein bischen 
kompliziert)

Zusammengefasst 2 LUT die immer geswitcht werden müssen = 220Kbits

Eine LUT die gleich bleibt (statisch)                   = 110Kbits

Noch eine LUT die gleich bleibt (statisch)              = 545 Kbits

                                                  Summe = 875 Kbis
Also heisst das das ich Block Ram 18 * 52 = totalblockram =  936 Kibts, 
reicht das aus?

Gruss Igor

von Jan M. (mueschel)


Lesenswert?

Deine Erklärung zu den verschiednenen e-Funktionen kann ich nicht ganz 
nachvollziehen. Theoretisch sollte es doch möglich sein, nur eine 
hochauflösende Funktionskurve zu speichern und diese dann in 
verschiedenen Geschwindigkeiten auszugeben, bei sehr hohen 
Geschwindigkeiten / kurzen Abklingzeiten z.B. durch auslassen einiger 
Werte.

Aber gehen wir davon aus, dass du wirklich alle Funktionen im RAM 
brauchst.

Igor schrieb:
> Also heisst das das ich Block Ram 18 * 52 = totalblockram =  936 Kibts,
> reicht das aus?

Du musst noch berücksichtigen, dass du das RAM ja nur in 18kBit Blöcken 
verteilen kannst. Da deine Funktionswerte ja 12 Bit breit sind, das RAM 
aber nur mit 8 oder 18 Bit Breite *) konfiguriert werden kann, wirst du 
normalerweise ohne mehr Programmieraufwand immer einige Bits im Block 
RAM verschenken müssen.

*) In deiner Anwendung wären auch 12 Bit möglich, indem du einen 4 Bit 
breiten RAM parallel zu zwei seriell geschalteten 8 Bit breiten RAMs 
benutzt um dann insgesamt einen 12x4096 großen RAM zu erhalten, aber das 
wirst du von Hand machen müssen, da die Tools das wahrscheinlich nicht 
automatisch erstellen können.

von Mike (Gast)


Lesenswert?

936 KBit ergeben ein ziemlich großes FPGA. Ein passendes Virtex 5 kostet 
deutlich über 300€.

Ich würde mir eine andere Lösung überlegen. Z.B. externen Speicher 
verwenden oder die Werte berechnen. Du müsstest jetzt noch sagen wie 
schnell du diese Werte brauchst...

von Jan M. (mueschel)


Lesenswert?

Lattice ECP2M gibt es schon für 50 Dollar mit dieser Menge RAM - ein 
externer RAM-Baustein dürfte allerdings wirklich die bessere Lösung sein 
solange nicht auch sehr viele Logikressourcen benötigt werden. Je nach 
Geschwindigkeit dürfte sich hier ein Flash ROM anbieten.

Andererseits gehören e-Funktionen aber auch nicht gerade zu den am 
schwierigsten zu berechnenden Funktionen (wiederholtes multiplizieren 
mit einer Konstanten reicht aus) und 12 Bit Auflösung sind hier auch 
nicht sehr viel, ich würde mir also zuerst einmal genau überlegen, ob es 
wirklich eine LUT sein muss.

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.