Forum: FPGA, VHDL & Co. FPGA mit geringer Taktfrequenz takten


von Analogi (Gast)


Lesenswert?

Ich muss kontinuierliche Daten von einem 24 Bit ADC mit 768kHz 
verarbeiten (4 Kanäle a 192)

habe nur einen langsamen Spartan 3E zur Verfügung. Weil ich zu wenige 
Multiplier habe, müssen viele LUTs benutzt werden und die Taktfrequenz 
geht runter. Leider muss ich FFs sparen und die Frequen geht nochmal 
runter. Spricht etwas dagegen, noch mehr in Kombinatorik zu machen und 
die Taktfrequenz auf 1MHz abzusenken, statt mit enable zu arbeiten?

Ich würde eine PLL nehmen und den Eingangstakt des FPGA von 25 MHz 
einfach runterteilen. Die Datenübernahme liefe mit einem Fifo.

von Falk B. (falk)


Lesenswert?

@ Analogi (Gast)

>Ich muss kontinuierliche Daten von einem 24 Bit ADC mit 768kHz
>verarbeiten (4 Kanäle a 192)

Nicht sonderlich viel.

>habe nur einen langsamen Spartan 3E zur Verfügung.

Ach du Armer! :-(

>Weil ich zu wenige
>Multiplier habe, müssen viele LUTs benutzt werden und die Taktfrequenz
>geht runter. Leider muss ich FFs sparen und die Frequen geht nochmal
>runter. Spricht etwas dagegen, noch mehr in Kombinatorik zu machen und
>die Taktfrequenz auf 1MHz abzusenken, statt mit enable zu arbeiten?

Nö. Damit sinkt deine Siliziumausnutzung noch mehr. Du brauchst eher 
MEHR Pipelining und eine sinnvolle Nutzung von BRAMs als 
(Zwischen)speicher. Man kann auch über ein Multiplexing deiner Logik 
nachdenken.

>Ich würde eine PLL nehmen und den Eingangstakt des FPGA von 25 MHz
>einfach runterteilen. Die Datenübernahme liefe mit einem Fifo.

Man muss schon viel Unsinn machen, wenn man die erreichbare Taktfrequenz 
in einem S3E unter 25 MHz drückt. Ich tippe mal, dass deine 
VHDL-Beschreibung suboptimal ist. Du bist eher Softwerker, stimmts?

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


Lesenswert?

Analogi schrieb:
> Spricht etwas dagegen, noch mehr in Kombinatorik zu machen und die
> Taktfrequenz auf 1MHz abzusenken, statt mit enable zu arbeiten?
Spricht was dagegen, die Berechnungen zeitlich gemultiplext 
durchzuführen und das Design mit 100MHz zu takten? Immerhin kannst du 
dann in der selben Zeit z.B. 100 Berechnungen hintereinander machen...

> (4 Kanäle a 192)
192 Erbsen oder wie? Achja: kHz...
Und warum sind das dann 768kHz? Wieso verarbeitest du nicht 4 * 192kHz 
parallel? Wie sieht denn dieses System aus? Was tut es?

von Analogi (Gast)


Lesenswert?

Lothar Miller schrieb:
> Und warum sind das dann 768kHz? Wieso verarbeitest du nicht 4 * 192kHz
> parallel? Wie sieht denn dieses System aus? Was tut es?
Das tue ich doch, es kommen 4 Kanäle mit 192kHz, die in eine pipeline 
fliessen, welche zyklisch abtastet. Daher brauche ich nu 768kHz. 
Schneller laufen lassen würde nur dazu führen, dass der Prozess warten 
muss und die pipeline zu 90% auf ein enable wartet. Ich würde ja 
gänzlich auf 768kHz runtergehen, aber die pipeline muss ja etwas 
schneller den Fifo abfragen, als Daten kommen. Daher die 1 MHz.

Nochmals zum Verständnis:

Das Absenken der Taktfrequenz soll soviel Raum schaffen, wie es geht, um 
lange Kombinatorik ohne FFs zu nutzen, damit FFs gespart werden können 
und alles rein geht.

Gibt es eine untere Taktfrequenz?

von Sigi (Gast)


Lesenswert?

Die Absenkung der Taktfrequenz ist im Prinzip
genau das gleiche wie die Verwendung von Clock-Enable.
Du must es nur deinem Synhtesetools entsprechend
mitteilen, Stichworte sind hier Multicyle-Path und
TimingConstraint, wird ausgibigst in den Constaint
Manuals erklärt.

Und: im Spartan3 können bei 1MHz sicherlich 20-50
LUTs hintereinander geschaltet werden, entsprechende
Plazierung der LUTse. Diese Ketten durchzuschneiden
und ab und an ein FF platzieren schadet sicher nicht.

von Gustl B. (-gb-)


Lesenswert?

Welcher 3e ist es und was muss darin alles passieren? Meine 3e können 
problemlos bei 100MHz noch >32 bit Additionen machen, daher würde ich 
eher höher takten wenn mehr gerechnet werden soll. Oder eben wie schon 
vorgeschlagen parallel machen oder pipelinen. Den einzigem Grund für 
kleinen Takt sehe ich bei der Leistungsaufnahme aber auch das ist 
minimal.

von Daniel (Gast)


Lesenswert?

Analogi schrieb:
> Gibt es eine untere Taktfrequenz?
Meines Wissens nach nein.
Man kann auch den externen Takt stoppen.
Wenn man ihn wieder einschaltet, rennt das FPGA-Design weiter.

Daniel

von J. S. (engineer) Benutzerseite


Lesenswert?

Daniel schrieb:
> Meines Wissens nach nein.
Definitiv : Nein. Wieso auch?

> Man kann auch den externen Takt stoppen.
> Wenn man ihn wieder einschaltet, rennt das FPGA-Design weiter.
so ist es. Der FPGA "merkt" sich ja nicht, wann er das letzte mal 
getaktet hat, das sind jeweils vollkommen isolierte Vorgänge.

Im Grunde ist es vollkommen richtig, den FPGA so langsam wie möglich zu 
takten, weil insbesondere die Taktnetze und PLLs Strom brauchen. Ich bin 
erstaunt, dass hier Ratschläge kommen, es hochzutakten. Die untere 
Grenze ergibt sich dann aus den Datenanforderungen, bzw in Sonderfällen, 
wenn man einen DDR-Speicher zu bedienen hat. Der geht nicht beliebig 
langsam oder verkraftet Taktaussetzer.

Analogi schrieb:
> ch würde eine PLL nehmen und den Eingangstakt des FPGA von 25 MHz
> einfach runterteilen.
Wenn möglich, die PLL einsparen und einen DCM nehmen.

Deine Idee, FlipFlops einzusparen, wird aber nur bedingt funtionieren, 
weil auch alleine durch LUT-Benutzung die slices verbraten werden und 
die darin enthaltenen FFs gleich mit. Allenfalls lässt sich Kombinatorik 
besser zusammenfessen, wenn die Synthese vieles in einem 
Taktzwischenraum "sieht" aber auch das ist irgendwann ausgeschöpft. Ob 
es also viel bringt, den FPGA so weit runter zu "lassen", muss 
ausprobiert werden.

An der Stelle muss sogar die Frage gestellt werden, wozu hier überhaupt 
ein FPGA eingesetzt wird und ob es nicht ein Controller tut. Darf man 
fragen, was hier verarbeitet wird? Hört sich stark nach Audio an.

von Falk B. (falk)


Lesenswert?

@ Analogi (Gast)

>Das tue ich doch, es kommen 4 Kanäle mit 192kHz, die in eine pipeline
>fliessen, welche zyklisch abtastet. Daher brauche ich nu 768kHz.

Zeitlupe für ein FPGA.

>Schneller laufen lassen würde nur dazu führen, dass der Prozess warten
>muss und die pipeline zu 90% auf ein enable wartet.

Nöö. Wenn man z.B. einen FIR FIlter mit 100 Anzapfungen (aka Taps) 
rechnen will, takte man die Logik mit 100*768kHz=76MHz. Damit braucht 
man nur weng Logik und einen RAM.

> Ich würde ja
>gänzlich auf 768kHz runtergehen, aber die pipeline muss ja etwas
>schneller den Fifo abfragen,

Nö, wenn alles synchron ist reichen 768kHz.

>Das Absenken der Taktfrequenz soll soviel Raum schaffen, wie es geht, um
>lange Kombinatorik ohne FFs zu nutzen, damit FFs gespart werden können
>und alles rein geht.

Nochmal. Du machst was falsch. Ich rate nochmal. Du machst einen FIR mit 
vielen Taps REIN kombinatorisch?

>Gibt es eine untere Taktfrequenz?

0 Hz, wenn man keine PLLs oder DCMs nutzt.

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


Lesenswert?

Jürgen S. schrieb:
> Im Grunde ist es vollkommen richtig, den FPGA so langsam wie möglich zu
> takten, weil insbesondere die Taktnetze und PLLs Strom brauchen. Ich bin
> erstaunt, dass hier Ratschläge kommen, es hochzutakten.
Mich wundert hier am meisten dieser Satz, den
Analogi schrieb:
>>> Weil ich zu wenige Multiplier habe, müssen viele LUTs benutzt werden
Wenn ich zu wenige Multiplizierer habe, dann denke ich über einen 
Multiplexer nach...

Analogi schrieb:
> Das tue ich doch, es kommen 4 Kanäle mit 192kHz, die in eine pipeline
> fliessen, welche zyklisch abtastet. Daher brauche ich nu 768kHz.
> Schneller laufen lassen würde nur dazu führen, dass der Prozess warten
> muss
Nein. Schneller laufen heißt, dass die Multiplikationen nicht 
gleichzeitig berechnet werden, sondern eine nach der anderen. Und von 
diesen Berechnungen dann genau so viele parallel, wie du Multiplizierer 
hast.

Aber wenn dein Design im ganzen Leben nur die 768kHz sehen wird, dann 
kannst du es ja gern darauf synchronisieren. Eine "höhere" Taktfrequenz 
von 1MHz bringt hier ausser mehr Jitter gar nichts...

> es kommen 4 Kanäle mit 192kHz
Dann kannst du das Design ja sogar mit 192kHz laufen lassen und alles 
parallel machen...

von Clemens M. (panko)


Lesenswert?

Umfangreiche Kombinatorik spart doch auch gar keine FF oder sehe ich das 
falsch? Wenn ich nur die LUT in den slices benutze und die FF nicht, 
mache ich doch einfach -nichts- damit. Bei sparen denke ich erst mal an 
verwaren für später.
Wenn slices fehlen kann auch Kombinatorik nicht komplexer werden.
Rückmeldung wäre nett.

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


Lesenswert?

Analogi schrieb:
> Leider muss ich FFs sparen und die Frequen geht nochmal runter.
Der logische (Kurz-)schluss hinter diesem Satz will mir auch nicht 
einleuchten...

von Schlumpf (Gast)


Lesenswert?

Lothar Miller schrieb:
>> Leider muss ich FFs sparen und die Frequen geht nochmal runter.
> Der logische (Kurz-)schluss hinter diesem Satz will mir auch nicht
> einleuchten...

Ich könnte mir vorstellen, dass er es so meint:
"Ich habe zu wenige Register und kann deswegen nicht pipelinen und 
dadurch wird die Logiktiefe immer größer und daher geht die maximale 
Frequenz in den Keller"

von Falk B. (falk)


Lesenswert?

@ Schlumpf (Gast)

>Ich könnte mir vorstellen, dass er es so meint:
>"Ich habe zu wenige Register und kann deswegen nicht pipelinen und
>dadurch wird die Logiktiefe immer größer und daher geht die maximale
>Frequenz in den Keller"

Glaub ich nicht, der OP scheint das Konzept von Pipelining und 
Multiplexen nicht wirklich zu kennen.

von Achtung (Gast)


Lesenswert?

Clemens M. schrieb:
> Bei sparen denke ich erst mal an verwaren für später.
Ich denke da eher an die Frage, ob es überhaupt reingeht und an einen 
kleineren Chip.

Lothar Miller schrieb:
> Analogi schrieb:
>> Leider muss ich FFs sparen und die Frequen geht nochmal runter.
> Der logische (Kurz-)schluss hinter diesem Satz will mir auch nicht
> einleuchten...
Weil man üblicherweise FFs setzt, um die mögliche Frequenz hochzusetzen. 
Da ich da sparen muss (der FPGA soll ja kleiner werden) habe ich 
diesbezüglich weniger Optionen.

Falk Brunner schrieb:
> @ Schlumpf (Gast)
>>Ich könnte mir vorstellen, dass er es so meint:
>>"Ich habe zu wenige Register und kann deswegen nicht pipelinen und
>>dadurch wird die Logiktiefe immer größer und daher geht die maximale
>>Frequenz in den Keller"
> Glaub ich nicht, der OP scheint das Konzept von Pipelining und
> Multiplexen nicht wirklich zu kennen.
Schlumpf hat es erfasst und das Konzept von Pipelining habe ich 
verstanden. Es gibt hier aber nicht mehr zu pipelinen.

Falk Brunner schrieb:
> Nöö. Wenn man z.B. einen FIR FIlter mit 100 Anzapfungen (aka Taps)
> rechnen will, takte man die Logik mit 100*768kHz=76MHz. Damit braucht
> man nur weng Logik und einen RAM.
Vollkommen richtig, aber sowas brauche ich ja gar nicht. Es gibt keine 
sequenzielle Bearbeitung dieser Art, die es nötig machen würde, dass ich 
einen Takt brauche, der n-mal schneller ist, als die Daten reinkommen.

Ich brauche nur einen etwas schnelleren, um das Fifo abfraqen zu können.

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


Lesenswert?

Achtung schrieb:
> Weil man üblicherweise FFs setzt, um die mögliche Frequenz hochzusetzen.
> Da ich da sparen muss (der FPGA soll ja kleiner werden) habe ich
> diesbezüglich weniger Optionen.
Man kann ein FPGA zwar schneller takten, wenn man in die Logik FFs 
einfügt. Die eigentliche Berechnung wird dadurch aber nicht schneller! 
Es ist nur wie wenn man im Auto einen anderen Gang einlegt: die 
Geschwindigkeit belibt gleich, nur der Motor läuft schneller oder 
langsamer.

> Schlumpf hat es erfasst und das Konzept von Pipelining habe ich
> verstanden. Es gibt hier aber nicht mehr zu pipelinen.
Richtig, du musst hier nichts pipelinen. Dass dein Design kleiner wird, 
dafür musst du multiplexen und die Multiplizierer nacheinander für 
unterschiedliche Aufgaben verwenden.
Du hast ja zuhause auch nicht ein Auto zur Arbeit, eines zum Einkaufen, 
eines für den Baggersee und eines für die Disco. Sondern du verwendest 
ein und das selbe Auto nacheinander für alle diese Aufgaben.
Und das ist der Trick: die Multiplizierer können mit einer Taktfrequenz 
von 100MHz rechnen, also 100mal schneller als du es brauchst. Du kannst 
somit, wenn 99 Multiplizierer einsparen, wenn einer schnell genug 
umgeschaltet wird.
In deinem Design sind die Multiplizierer "blitzartig" fertig und 
"warten" dann 99% der Zeit auf neue Daten...

> Ich brauche nur einen etwas schnelleren, um das Fifo abfraqen zu können.
Er nicht schneller sein. Er muss nur genauso schnell sein. Dann 
brauchst du nicht mal einen Fifo.

von Schlumpf (Gast)


Lesenswert?

Auch wenn ich Probleme damit habe, mir vorzustellen, wie komplex das 
Design ist, dass man es nur noch mit 1MHz laufen lassen kann (längster 
logischer Pfad wäre dann ja knapp 1000ns), kannst du natürlich mit der 
Frequenz runtergehen.

Ich würde mal eine "normale" Frequenz vorgeben (z.B. 20MHz) und schauen, 
was mir die Synthese berichtet. Wenn dann z.B. der kritische Pfad um x 
ns nicht gehalten werden kann, hast du einen Anhaltspunkt, welches deine 
maximale Frequenz ist.

Aber mal Hand auf´s Herz:
um einen Pfad mit 1000ns Latency zu bauen, musst du ca. 1000 CLBs 
hintereinander schalten. Und dann hast du nur diesen einen Pfad 
abgedeckt.
Wieviele CLBs hast du denn in deinem FPGA? Also wie viel Prozent deiner 
Ressourcen gehen dann schon für diesen einen Pfad drauf?
Und offensichtlich musst du ja noch viele andere Pfade haben, wenn dir 
die Register ausgehen. Das macht aber auch nur Sinn, wenn diese Register 
mit Logik untereinander verknüpft sind, wofür dir wieder CLBs drauf 
gehen.

Also LUTs hast du im Überfluss, aber die Register gehen dir aus, 
richtig?

von Daniel (Gast)


Lesenswert?

Der TO könnte ja mal den Auszug des P&R-Reports posten, wo die 
Ressourcenauslastung aufgeführt ist.

Danile

von Falk B. (falk)


Lesenswert?

@ Achtung (Gast)

>Weil man üblicherweise FFs setzt, um die mögliche Frequenz hochzusetzen.
>Da ich da sparen muss (der FPGA soll ja kleiner werden) habe ich
>diesbezüglich weniger Optionen.

Eben DARUM packt man Logik in eine State Machine und RAMs.

Welche Operationen willst du denn ausführen, dass sie soviele Ressourcen 
benötigen?

>Schlumpf hat es erfasst und das Konzept von Pipelining habe ich
>verstanden. Es gibt hier aber nicht mehr zu pipelinen.

Vielleicht. Dein Wirkliches Problem hast du aber noch nicht mal 
ansatzweise erklärt, siehe Netiquette. Damit kann man dir auch nicht 
wirklich helfen.

>Vollkommen richtig, aber sowas brauche ich ja gar nicht. Es gibt keine
>sequenzielle Bearbeitung dieser Art, die es nötig machen würde, dass ich
>einen Takt brauche, der n-mal schneller ist, als die Daten reinkommen.

Dann verstehe ich das Problem noch weniger.

>Ich brauche nur einen etwas schnelleren, um das Fifo abfraqen zu können.

Ja und, dann tu das doch. Aber das alles kann unmöglich größere 
Logikressourcen benötigen!

von Falk B. (falk)


Lesenswert?

@ Lothar Miller (lkmiller) (Moderator) Benutzerseite

>Und das ist der Trick: die Multiplizierer können mit einer Taktfrequenz
>von 100MHz rechnen, also 100mal schneller als du es brauchst.

Du musst IHM doch nicht das Multiplexen erklären!

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


Lesenswert?

Falk Brunner schrieb:
> Du musst IHM doch nicht das Multiplexen erklären!
Nicht?

von Falk B. (falk)


Lesenswert?

Ironiedetektor und so ;-)

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


Lesenswert?

Nicht doch... ;-)

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.