ich vermute, du vermischst hier einiges bzgl. VHDL...
- Es gibt 2 Arten der Beschreibung:
-- Concurrent
-- Sequential
Sequential wird ueblicherweise fuer einen getakteten Teil verwendet
(also mit clk in der Sensitivity Liste sowie ein rising_edge(clk). Es
kann aber auch fuer 'fliegende' Logik verwendet werden (also alle
Eingangsgroessen in der Sensitivity Liste), das kannst du aber auch
recht einfach als concurrent statement schreiben (z.B. mit dem select
statement anstatt case wie im Prozess).
Variablen kann man nur in einem sequential Prozess verwenden, es ist
grob vereinfacht sowas wie eine lokale Variable in einer
Programmiersprache. Im allgemeinen ist eine Variable im Prozess entweder
ein 'fliegendes' Logiksignal oder auch ein 'lokales' FlipFlop
(allerdings nicht der Q-Ausgang sondern der D-Eingang). Wie Lothar hier
zurecht immer schreibt, als Anfaenger wirst du fuer deine
Problemstellung keine Variable brauchen. Und als Fortgeschrittener
koenntest du deine Variable ganz einfach durch ein concurrent Statement
ersetzen.
Und bzgl. concurrent vs sequential: Der Unterschied zwischen den beiden
Beschreibungsformen ist salopp gesagt, dass bei concurrent es genau
eine Zuweisung im Code gibt, bei sequential wird einem Signal/Variable
mehrmals ein Wert zugewiesen, da gewinnt dann halt die letzte...
Also, gut gemeinter Rat: Vergiss erstmal Variablen. Das kannst du mit
concurrent statements einfacher machen (ich verwende Variablen nur, um
z.B. in einem process eine 'Zwischenberechnung' zu machen die ich danach
an mehreren Stellen weiter verwende). Und ausserdem hat das ganze
garnienix mit lokalen und globalen Variablen einer Programmiersprache zu
tun, wir beschreiben hier schliesslich 'lose auf dem Chip rumliegende
Hardware...'