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.
Das Ding 'Ashenden' hat 909 Seiten. Wo finde ich da die Hinweise darauf?
Peter schrieb: > Das Ding 'Ashenden' hat 909 Seiten. Wo finde ich da die Hinweise darauf? Genau das fehlt in meiner Bibliothek. :)
> 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.
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.
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.
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!
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.
>> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.