Forum: FPGA, VHDL & Co. Variablengebrauch


von VHDL-Beginner (Gast)


Lesenswert?

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

von S. (Gast)


Lesenswert?

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.

von S. (Gast)


Lesenswert?

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"

von VHDL-Beginner (Gast)


Lesenswert?

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.

von VHDL-Beginner (Gast)


Lesenswert?

Hat sich überschnitten. Danke für die schnelle Hilfe!

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.