Hallo alle,
ich bin noch unerfahren in VHDL und habe eine kurze Frage. Ich arbeite
an einem Projekt bei dem ich alle Prozesse synchron über den globalen
Takt laufen lasse. Ich vereinfache mal das Projekt und hoffe ihr könnt
trotzdem folgen:
In einem Prozess läuft ein Zähler hoch und bei einem bestimmten Wert x,
soll ein "enable"-Signal ("blinksignal")auf 1 gesetzt werden. Im
nächsten Prozess soll, immer wenn enable auf 1 ist, ein Output generiert
werden. Beide Prozesse haben in der Sensitivitätsliste nur die clock.
Das enable ist also nur einen Taktzyklus lang auf 1, wechselt wieder auf
0, wenn die neue steigende Taktflanke erkannt wird. Genau dann sollte
aber eignetlich mein zweiter Prozess das enable Signal verarbeiten, aber
jetzt ist es ja schon wieder auf 0...
Wie geht man hier vor? Macht man das dann so, dass das enable beim Wert
x auf 1 springt und bei x+1 noch einen Takt lang aktiv bleibt? Oder
macht man den zweiten Prozess dann asynchron mit enable in der
Sensiliste? Oder gibt es noch eine andere Möglichkeit?
Hier der noch nicht funktionierende Code:
1 | if rising_edge(clk_50) then
|
2 | if (data_in(7 downto 3) = "11001") or (data_in = "11100000") then -- Blinklicht, langsam/ einzelne LEDs, alle LEDs
|
3 | if (blink_counter < unsigned(blinklicht_langsam)) then
|
4 | blink_counter <= blink_counter + 1;
|
5 | blinksignal <= '0';
|
6 |
|
7 | elsif (blink_counter = unsigned(blinklicht_langsam)) then -- wenn counter bei 50 Mio, also nach 1s -> aktiviere Blinksignal
|
8 | blink_counter <= (others => '0'); -- und resette counter
|
9 | blinksignal <= '1'; -- LED soll aufblinken
|
10 | end if;
|
und im zweiten Prozess sowas wie:
1 | if rising_edge(clk_50) then
|
2 | if (blinksignal = '1') then
|
3 | ...
|