Hallo an alle, ich bräuchte nur mal kurz eine kleine Hilfe bei einem Problem, was sicher kein Problem darstellt, aber an dem ich schon seit letzter Woche hänge. Ich versuche einen Counter zu realisieren, der mein Taktsignal moduliert und das Tastverhältnis entsprechend ändert. Dies konnte ich soweit auch realisieren. Als weiteres Feature soll ein Offset auf den Takt moduliert werden, um den Takt nach Wunsch in der Phase zu verschieben. Leider funktioniert nach der eingestellten Wartezeit der Reset des internen Counters nicht (Zeile 42). Ich habe schon viel versucht und konnte bis jetzt keinen Fehler entdecken. Ich bin für jede Hilfe dankbar MfG the-sandman
>> -- Clearable loadable enablable counter
Der hat was ;-)
1 | PROCESS (ClockIn, Reset_N, ClockModulation, ClockDelay) |
2 | BEGIN
|
3 | IF Reset_N = '0' THEN |
4 | signalcount10 <= 0; |
5 | signalclock <= '0'; |
6 | signalenable <= '0'; |
7 | ELSIF (ClockIn'EVENT AND ClockIn = '1') THEN |
8 | IF signalenable = '1' THEN |
9 | IF signalcount10 = ClockModulation THEN |
10 | signalclock <= '1'; |
11 | END IF; |
12 | ELSE
|
13 | IF signalcount10 = ClockDelay THEN |
14 | signalcount10 <= 0; --Counter-Reset funktioniert nicht WEIL ************** |
15 | signalenable <= '1'; |
16 | END IF; |
17 | END IF; |
18 | |
19 | IF signalcount10 = 9 THEN |
20 | signalcount10 <= 0; -- ********** hier noch eine Zuweisung kommt |
21 | signalclock <= '0'; |
22 | ELSE
|
23 | signalcount10 <= signalcount10 + 1; -- ********** oder hier noch eine Zuweisung kommt |
24 | END IF; |
25 | END IF; |
26 | END PROCESS; |
Die letzte Zuweisung an signalcount10 im Prozess wird verwendet. Dreh das Ganze doch mal rum:
1 | PROCESS (ClockIn, Reset_N) |
2 | BEGIN
|
3 | IF Reset_N = '0' THEN |
4 | signalcount10 <= 0; |
5 | signalclock <= '0'; |
6 | signalenable <= '0'; |
7 | ELSIF (ClockIn'EVENT AND ClockIn = '1') THEN |
8 | IF signalcount10 = 9 THEN |
9 | signalcount10 <= 0; |
10 | signalclock <= '0'; |
11 | ELSE
|
12 | signalcount10 <= signalcount10 + 1; |
13 | END IF; |
14 | |
15 | IF signalenable = '1' THEN |
16 | IF signalcount10 = ClockModulation THEN |
17 | signalclock <= '1'; |
18 | END IF; |
19 | ELSE
|
20 | IF signalcount10 = ClockDelay THEN |
21 | signalcount10 <= 0; |
22 | signalenable <= '1'; |
23 | END IF; |
24 | END IF; |
25 | END IF; |
26 | END PROCESS; |
Vielleicht hilft das ;-) BTW: Das reicht aus:
1 | PROCESS (ClockIn, Reset_N) |
EDIT: Noch besser wäre:
1 | PROCESS (ClockIn) |
2 | BEGIN
|
3 | IF (ClockIn'EVENT AND ClockIn = '1') THEN |
4 | IF signalcount10 = 9 THEN |
5 | signalcount10 <= 0; |
6 | signalclock <= '0'; |
7 | ELSE
|
8 | signalcount10 <= signalcount10 + 1; |
9 | END IF; |
10 | |
11 | IF signalenable = '1' THEN |
12 | IF signalcount10 = ClockModulation THEN |
13 | signalclock <= '1'; |
14 | END IF; |
15 | ELSE
|
16 | IF signalcount10 = ClockDelay THEN |
17 | signalcount10 <= 0; |
18 | signalenable <= '1'; |
19 | END IF; |
20 | END IF; |
21 | |
22 | IF Reset_N = '0' THEN -- synchroner Reset, weil |
23 | signalcount10 <= 0; -- die letzte Signalzuweisung |
24 | signalclock <= '0'; -- im Prozess gilt |
25 | signalenable <= '0'; |
26 | end if; |
27 | END IF; |
28 | END PROCESS; |
Genau das war das Problem. Hätt ich eigentlich aus selbst sehen können, aber manchmal sieht man so Kleinigkeiten garnicht mehr ^^. Vielen Dank für die Hilfe!!! LG the-sandman
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.