Ich habe zwei ADCs, die parallel Strom und Spannung messen und mit 30MHz
getaktet werden. Nun will ich die im FPGA durch Fensterfunktion und FFT
schicken. Da meine Lookup tables für die Fensterung und FFT schnell
recht groß werden dachte ich mir, dass ich jeweils nur eine Lookup table
nehme, da die für beide ADC Daten ja nach aktuellem sample zählwert
immer das gleiche Ergebnis liefern. Wird sowas von toolchains dann
hinreichend beim Timing berücksichtigt, wenn der Datenbus der Lookup
table Adresse (kommend von einem Zähler) und das Ergebnis der Lookup
table dann jeweils parallel an die Multipliziereingänge gehen?
Beide ADC sampling Einheiten werden mit der gleichen Clock versorgt, die
dann jeweils beide ADCs und die FPGA Logik treibt.
Hängt von der Toolchain, dem FPGA und der Plazierung ab. Somit:
Ausprobieren, und allenfalls weitere Pipeline-Register spendieren, bis
das Timing stimmt.
Die Frage ist nicht wirklich 100% sinnvoll, weil mit "constraints" auf
das timing zwischen zwei Taktflanken abgezielt wird, was impliziert,
dass du das Auslesen der LUT (= Anlegen der Adresse und Gewinnung der
Daten) in einem Takt machen möchtest, was aber der anderen Aussage
"große Tabellen" widerspricht.
Das wird man also nicht machen, sondern per design dafür sorgen, dass
das Daten-timing stimmt, also alle Wege, die zum gleichen Zeitpunkt an
einem Punkt DAten anliefern müssen, dies auch in der gleichen Zahl der
Takte tun.
Das sind zwei unterschiedliche Themen. Du wirst in jedem Fall mit FFs
arbeiten MÜSSEN, weil deine "LUT" zu einem BRAM mutieren wird, dass ohne
Takt praktisch keine Bandbreite liefert.
In der Timinganalyse werden alle Pfade mit den vorgegebenen
Randbedingungen geprüft. Also ja, beide Pfade werden separat analysiert.
Bei 30 MHz sollte das aber wirklich kein Problem sein.
Wie würde man das denn designtechnisch besser machen wenn zwei ADCs
gleichzeitig Daten liefern und nur eine lookup table vorhanden ist.
Insbesondere hinsichtlich Erhöhung der samplerate.
Jan G. schrieb:> Wie würde man das denn designtechnisch besser machen wenn zwei ADCs> gleichzeitig Daten liefern und nur eine lookup table vorhanden ist.
Wenn du für die Signalverläufe beider ADCs die identische Bearbeitung
machen willst: eine lookup table reicht, auf beiden Kanälen wird jeweils
der identische Wert aus der look up table benötigt, ihr Ausgang geht in
die Verarbeitung beider Signale ein.
Wenn du eine look up table hast, aber die Werte für die beiden
ADC-Kanäle von unterschiedlichen Stellen gelesen werden: lege die look
up table als dual ported ROM an. Dann kann jeder Kanal auf die Stelle
zugreifen, die er grade benötigt.
Jan G. schrieb:> Beide Kanäle benötigen zum Beispiel beim windowing den gleichen wert aus> dem block RAM.
Wo ist das Problem?
Du kannst doch in VHDL jedes Signal mehrfach nutzen und hindrahten (???)
Und wenn man ihn etwas später braucht, einfach speichern ...
Jan G. schrieb:> eine lookup tables sind für einen Takt ausgelegt
Wie langsam ist das getaktet, dass das geht?
wie auch immer, die LUT ist dann funktionell und realisationstechnisch
nichts anderes, als eine reine Kombinatorik und für die gilt, was auch
sonst gilt.
Ich frage mich nur, wie groß und breit man da werden kann, wenn alles
noch in einem Takt passieren muss.
Jan G. schrieb im Beitrag #7079283:
> Wieso sollte das nicht gehen? Ein Wort in einem Takt zu bekommen sollte> doch wohl machbar sein. Wie soll man das sonst machen?
Einfach ein Missverständnis aufgrund unklarer Begrifflichkeiten und
Darstellungen.
Jürgen geht wohl davon aus, dass du die Adresse anlegen und noch im
selbem Takt den Datenwert verwenden willst. Man kann speziell deine
ursprüngliche Frage so verstehen, und wenn du tatsächlich ein BRAM ohne
Takt verwenden wolltest (als reine Kombinatorik) wäre das ungeschickt.
Was du stattdessen wohl machst: in Takt n die Adresse anlegen, in Takt
n+1 die Daten verwenden. Also einfach ein getaktetes BRAM. Das
funktioniert problemlos auch bei höheren Frequenzen.
Jan G. schrieb:> Beide Kanäle benötigen zum Beispiel beim windowing den gleichen wert aus> dem block RAM.
Genau wie Franko verstehe ich dann nicht, wo du ein Problem siehst. Wie
schon weiter oben geschrieben:
Achim S. schrieb:> Wenn du für die Signalverläufe beider ADCs die identische Bearbeitung> machen willst: eine lookup table reicht, auf beiden Kanälen wird jeweils> der identische Wert aus der look up table benötigt, ihr Ausgang geht in> die Verarbeitung beider Signale ein.
Jan G. schrieb:> Wie würde man das denn designtechnisch besser machen wenn zwei> ADCs> gleichzeitig Daten liefern und nur eine lookup table vorhanden ist.> Insbesondere hinsichtlich Erhöhung der samplerate.
Ich würde eine State Machine (FSM) verwenden, die die beiden ADC-Werte
nimmt, zwischenspeichert und nacheinander in die Lookup-Table steckt.
Wenn die Größe der Lookup-Table überschaubar ist, wird die vermutlich
vom Synthesetool als Block-RAM realisiert. Bei den großen
FPGA-Herstellern gibt es Dual-Port-Block-RAM. Da können auch zwei
Instanzen gleichzeitig von unterschiedlichen Adressen lesen.
Die Methode klappt aber nur, wenn es auf absehbare Zeit bei zwei ADCs
bleibt.
Duke
Die FSM habe ich sowieso. Ich mache es jetzt so, dass ich meine fsm,
blockram für die fensterparameter und ADC jeweils mit der gleichen clock
betreibe, dann aber nur die kontrollsignale der ersten ADC sampling
Einheit benutze.
Es soll zwar bei 2 ADCs bleiben. Aus reiner Neugier würde ich gerne
wissen wie sowas skaliert.
Wie gut das skaliert hängt im Wesentlichen von der Platzierung und den
Leitungslängen nach dem Routing ab. Die dominieren schnell mal die
Latenzen der LUTs. Vor allem, weil die Multiplizierer nicht beliebig
über den FPGA verteilt sind. 30 MHz sind aber noch völlig harmlos,
spannend wird es eher bei 200+ MHz.
Wieviel Bit hat überhaupt ein ADC Sample?
rossi schrieb:> Wie gut das skaliert hängt im Wesentlichen von der Platzierung und> den> Leitungslängen nach dem Routing ab. Die dominieren schnell mal die> Latenzen der LUTs. Vor allem, weil die Multiplizierer nicht beliebig> über den FPGA verteilt sind. 30 MHz sind aber noch völlig harmlos,> spannend wird es eher bei 200+ MHz.>> Wieviel Bit hat überhaupt ein ADC Sample?
Ein ADC Sample hat 14 Bit.