Forum: FPGA, VHDL & Co. FPGA TIming Constraints für Mehrkanal ADC


von Jan G. (Gast)


Lesenswert?

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.

von Fitzebutze (Gast)


Lesenswert?

Hängt von der Toolchain, dem FPGA und der Plazierung ab. Somit: 
Ausprobieren, und allenfalls weitere Pipeline-Register spendieren, bis 
das Timing stimmt.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Jan G. (Gast)


Lesenswert?

Meine lookup tables sind für einen Takt ausgelegt also meine fensterung 
ist gepipelined

von raX (Gast)


Lesenswert?

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.

von Jan G. (Gast)


Lesenswert?

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.

von Achim S. (Gast)


Lesenswert?

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.

von Jan G. (Gast)


Lesenswert?

Beide Kanäle benötigen zum Beispiel beim windowing den gleichen wert aus 
dem block RAM.

von Franko (Gast)


Lesenswert?

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 ...

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

Beitrag #7079283 wurde von einem Moderator gelöscht.
von Achim S. (Gast)


Lesenswert?

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.

von Duke Scarring (Gast)


Lesenswert?

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

von Jan G. (Gast)


Lesenswert?

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.

von rossi (Gast)


Lesenswert?

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?

von Jan G. (Gast)


Lesenswert?

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.

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.