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