Hallo, ich habe eine ganz einfache Frage zum Gebrauch von Variablen in VHDL. Wenn ich in meinem VHDL-Code Variablen verwende, verbrauche ich dann nach der Synthese mehr Ressourcen, wenn ich (dummerweise) mehr Variablen als notwendig benutze? Beispiel: Ich habe in einem Teil meines Codes einen Zähler mit einer Variablen zaehl1 realisiert. Nehmen wir an, der Zähler sei 32 Bit unsigned. Außerdem sei eine state machine vorhanden. In einem state wird der Zähler zaehl1 bis 2^32 hochgezählt, und dann wird auf den nächsten state gesprungen (zaehl1 macht während des Sprungs einen Überlauf zu 0). Dort ist wiederum ein Zähler als 32 Bit unsigned als Variable definiert, aber eben eine Variable zaehl2. zaehl1 und zaehl2 werden an unterschiedlichen Stellen der state machine verwendet, also niemals wird auf sie gleichzeitig zugegriffen noch werden sie gleichzeitig verändert. Würde ein Synthesetool das erkennen und zaehl2 durch zaehl1 ersetzen und so etwa hier 32 Bit an Ressourcen einsparen? Oder wie sieht es aus, wenn die Lage in einem zweiten Beispiel identisch ist, aber zaehl2 als 16 Bit unsigned definiert ist? Könnte ja auch prima in den 32 Bit breiten zaehl1 passen. Integer/signed mit 16 Bit ebenso in zaehl1 durch das Synthesetool abbildbar? Und zum Schluss: Wie sieht das dann mit Signalen aus? Vielen Dank! VHDL-Beginner
VHDL-Beginner schrieb im Beitrag #2825439: > Würde ein Synthesetool das erkennen und zaehl2 durch zaehl1 ersetzen und > > so etwa hier 32 Bit an Ressourcen einsparen? Variablen werden nicht synthetisiert, daher gibt es auch nichts einzusparen. Variablen sind rein akstrakte Gebilde im Compiler, während der Compilation und der Simulation. Synthetisiert werden nur a) Signalübergänge = FFs b) Signalzuweisungen = Kombinatorik c) konkret instanziierten Core-Komponenten Sonst nichts! Wie kompliziert du Deine Schaltung bescheibst, um am Ende einem Signal am Ausgang eine Mischung aus Signalen von sonstwoher (letztlich den Eingängen) zuzuordnen, ist Deine Sache.
VHDL-Beginner schrieb im Beitrag #2825439: > In einem state wird > > der Zähler zaehl1 bis 2^32 hochgezählt, und dann wird auf den nächsten > > state gesprungen (zaehl1 macht während des Sprungs einen Überlauf zu 0). > > Dort ist wiederum ein Zähler als 32 Bit unsigned als Variable definiert, > > aber eben eine Variable zaehl2. Mal deutlich: Zwischen Deinem Zähler, den States und allen anderen registrierten Variablen/Signalen ist keinerlei Unterschied. Das sind allesam Schaltungszustände, auch wenn sie nicht states heissen. Denke Dir einfach mal die Struktur: Die FSMs werden als MSBs vor die Zähler gehängtt: FSM1 (4 bit) + Zähler1 (8 Bit) = "3210" & "76543210" FSM2 (4 bit) + Zähler2 (8 Bit) = "3210" & "76543210" Wieviele "states" sind das wirklich? Wieviele FFs werden gebraucht, um das ganze letzlich minimal zu codieren? Um das klein / schell zu machen, kann man die Implementierung mit "restructure muliplexers" "state machine extracting" "lut combining" "remove dupicate registers" steuern. Antwort auf Deine Frage ist also: "Ja, die Synthese kann es erkennen und sie wird es dann runterbrechen, wenn Du es ihr sagst"
Danke für die fixe Antwort. Dann stelle ich die Frage anders. Ich implementiere einen Zähler. Benötige ich in einem späteren Teil meiner Schaltung erneut einen Zähler gleicher Breite, würde das Synthesewerkzeug das erkennen und den ersten Zähler wiederverwenden (mit Multiplexer oder wie auch immer das dann zu realisieren wäre) oder stumpf einen neuen einbauen? Rahmenbedingungen wie oben: Zähler werden durch eine State Machine nicht gleichzeitig verwendet.
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.