Mikey schrieb:
> aber irgendwie funktioniert der Code nicht.
Warum meinst du das? Wie stellst du das fest?
> Kann mir jemand helfen?
Ich würde da mal eine Simulation empfehlen...
Mit deinen zwei Takten:
1 | if falling_edge(key(1)) then
|
2 | :
|
3 | if rising_edge(clock_50) then
|
wirst du dir noch einige Schwierigkeiten an die Backe kleben...
Eine Flankenerkennung für ein externes Signal geht so:
http://www.lothar-miller.de/s9y/categories/18-Flankenerkennung
Sowas ist an Gefährlichkeit kaum zu übertreffen:
1 | process(key(1)) begin
|
2 | if falling_edge(key(1)) then ---- AUTSCH, ein Taster als Taktquelle
|
3 | aufwaerts <= not aufwaerts;
|
4 | end if;
|
5 | end process;
|
Wenn dein Schalter prellt, dann hast du da z.B. 20-30 Taktflanken
blitzschnell hintereinander. Das ist also eher ein Zufallsgenerator...
:-)
Zusammenfassend nochmal meine Postulate für den geneigten VHDL-Anfänger:
1 | Ein Design (insbesondere ein Anfängerdesign) hat genau 1 Takt,
|
2 | der immer auf dieselbe Flanke aktiv ist.
|
3 | Es gibt keinen (und schon gar keinen asynchronen) Reset.
|
4 | Externe Signale werden über 2 Flipflops einsynchronisiert.
|
5 | Jede Abweichung von diesen Regeln muß fundiert begründet werden können.
|