Forum: FPGA, VHDL & Co. Wieviele Addition pro Takt


von Peter (pittyj)


Lesenswert?

Bisher habe ich immer sehr strikt nur eine Addition pro Takt gemacht, 
also

Signal A1 , A2 , A3 , A4, A5: integer ;
A1 <= A2 + A3;

Im Takt danach:
A1 <= A1 + A4;

usw.


Nun habe ich mal synthetisiert:
 A1 <= A2 + A3 + A4 + A5;

Das geht auch, jedenfalls meldet mir die Synthese keine Probleme.
Oder geht das schon gar nicht?


Wie kann ich herausfinden, wie viele Summanden noch in einem Takt 
berechnet werden können. Dann könnte ich die State-Machine verkürzen.

Ich habe einen Artix7 mit Vivado 2023.2, Wo finde ich da Timing Angaben 
für meine Additionen, oder Hinweise wenn evtl Probleme auftreten.

von Motopick (motopick)


Lesenswert?

Du solltest dein VHDL-Buch noch einmal lesen.

von Peter (pittyj)


Lesenswert?

Das Ding 'Ashenden' hat 909 Seiten. Wo finde ich da die Hinweise darauf?

von Motopick (motopick)


Lesenswert?

Peter schrieb:
> Das Ding 'Ashenden' hat 909 Seiten. Wo finde ich da die Hinweise darauf?

Genau das fehlt in meiner Bibliothek. :)

von Motopick (motopick)


Lesenswert?

> Signal A1 , A2 , A3 , A4, A5: integer ;
> A1 <= A2 + A3;
>
> Im Takt danach:
> A1 <= A1 + A4;

Erleuchtend koennte z.B. sein, dass zwischen den Zeilen ueberhaupt
kein Takt vergeht. Ausser man sorgt mit "Gewalt" dafuer.

von Falk B. (falk)


Lesenswert?

Peter schrieb:

> Nun habe ich mal synthetisiert:
>  A1 <= A2 + A3 + A4 + A5;
>
> Das geht auch, jedenfalls meldet mir die Synthese keine Probleme.
> Oder geht das schon gar nicht?

Du kannst auch 100 Zahlen in einem Takt addieren, nur braucht es dazu 
hat 100 Addierer, die alle kombinatorisch verknüft werden und 
dementsprechend lange Durchlaufzeiten haben.

> Wie kann ich herausfinden, wie viele Summanden noch in einem Takt
> berechnet werden können. Dann könnte ich die State-Machine verkürzen.

Mit einem Blick auf die Timingangaben deines Symnthesetools. Dort gibt 
man übelichrweise die Taktfrequenz der sequentiellen Logik an, das Tool 
berechnet, wieviel real erreicht wird.

> Ich habe einen Artix7 mit Vivado 2023.2, Wo finde ich da Timing Angaben
> für meine Additionen, oder Hinweise wenn evtl Probleme auftreten.

Im Timing-Report.

von Peter (pittyj)


Lesenswert?

Motopick schrieb:
>> Signal A1 , A2 , A3 , A4, A5: integer ;
>> A1 <= A2 + A3;
>>
>> Im Takt danach:
>> A1 <= A1 + A4;
>
> Erleuchtend koennte z.B. sein, dass zwischen den Zeilen ueberhaupt
> kein Takt vergeht. Ausser man sorgt mit "Gewalt" dafuer.

Ich habe meine State Machine mit den Zustandswechsel weg gelassen, um 
die Code-Schnipsel nicht aufzublähen.

Ist zwar Freitag, doch wollte ich eine Antwort, mit der ich am Montag 
weiter arbeiten kann.
Die Trolle sind wohl heute unter den Antwortenden.

Danke an Falk.

von Motopick (motopick)


Lesenswert?

Peter schrieb:
> Motopick schrieb:
>>> Signal A1 , A2 , A3 , A4, A5: integer ;
>>> A1 <= A2 + A3;
>>>
>>> Im Takt danach:
>>> A1 <= A1 + A4;
>>
>> Erleuchtend koennte z.B. sein, dass zwischen den Zeilen ueberhaupt
>> kein Takt vergeht. Ausser man sorgt mit "Gewalt" dafuer.
>
> Ich habe meine State Machine mit den Zustandswechsel weg gelassen, um
> die Code-Schnipsel nicht aufzublähen.

Es haette die Darstellung eben nicht wesentlich aufgeblaeht,
darauf im Code hinzuweisen.

Ein "Im Takt danach" kann auch ein Indiz fuer ein Verstaendnisproblem
sein. Ich hoffe mal, dass dein Synthesetool das Auffinden der Addierer
unterstuetzt. Das kann sonst muehselig werden.

Schoenes WE!

von Martin S. (strubi)


Lesenswert?

Falk hat ja die bisher schon einzig sinnvolle Antwort gegeben. Mit VHDL 
hat das sonst weniger zu tun als mit Synthese.
Ansonsten koenntest du dir noch zum Stichwort Pipelining Gedanken 
machen. Damit faellt eventuell sogar deine State machine weg, du sparst 
Resourcen, und f_max geht rauf.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

>> Ich habe einen Artix7 mit Vivado 2023.2, Wo finde ich da Timing Angaben
>> für meine Additionen, oder Hinweise wenn evtl Probleme auftreten.
>
> Im Timing-Report.

Für den timing-report muss auch die Implementierung durchgelaufen sein.
Constraints setzen und sei es nur für die IO, wäre uch nicht schlecht, 
Synthese allein ist unzureichend.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Peter schrieb:
> Das Ding 'Ashenden' hat 909 Seiten. Wo finde ich da die Hinweise darauf?

Da das vom FPGA und der Breite abhängt, muss man in dessen datasheet 
schauen und die Frequenz, sowie die Addiererbreite (und damit Tiefe) 
berücksichtigen.

Als Beispiel funktioniert ein 2-Stufiger Addierer für 32 Bit und in 
einem Artix mit 100 MHz- allerdings "netto" für sich betrachtet.

Wenn Teile der Addition verteilt und mit anderen Sachen zusammengefasst 
sind, damit kleiner wird, aber auch stärker verteilt ist und obendrein 
der FPGA generell voll ist, geht das runter!

Ein einstufiger Adder, der auf ein Register geht und aus einem solchen 
gespeist wird, läuft aber durchaus locker auf 300 MHz, wenn es nicht 
gerade 64 Bit sind.

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.