mikrocontroller.net

Forum: FPGA, VHDL & Co. Counter-Reset funktioniert nicht


Autor: the-sandman (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> -- Clearable loadable enablable counter
Der hat was ;-)

  PROCESS (ClockIn, Reset_N, ClockModulation, ClockDelay)
  BEGIN
    IF Reset_N = '0' THEN
      signalcount10 <= 0;
      signalclock <= '0';
      signalenable <= '0';
    ELSIF (ClockIn'EVENT AND ClockIn = '1') THEN
      IF signalenable = '1' THEN
        IF signalcount10 = ClockModulation THEN
          signalclock <= '1';
        END IF;
      ELSE
        IF signalcount10 = ClockDelay THEN
          signalcount10 <= 0;  --Counter-Reset funktioniert nicht     WEIL **************
          signalenable <= '1';
        END IF;
      END IF;
            
      IF signalcount10 = 9 THEN
        signalcount10 <= 0;  -- ********** hier noch eine Zuweisung kommt
        signalclock <= '0';
      ELSE
        signalcount10 <= signalcount10 + 1; -- ********** oder hier noch eine Zuweisung kommt
      END IF;      
    END IF;
  END PROCESS;

Die letzte Zuweisung an signalcount10 im Prozess wird verwendet.

Dreh das Ganze doch mal rum:
  PROCESS (ClockIn, Reset_N)
  BEGIN
    IF Reset_N = '0' THEN
      signalcount10 <= 0;
      signalclock <= '0';
      signalenable <= '0';
    ELSIF (ClockIn'EVENT AND ClockIn = '1') THEN
      IF signalcount10 = 9 THEN
        signalcount10 <= 0;
        signalclock <= '0';
      ELSE
        signalcount10 <= signalcount10 + 1; 
      END IF;      
 
      IF signalenable = '1' THEN
        IF signalcount10 = ClockModulation THEN
          signalclock <= '1';
        END IF;
      ELSE
        IF signalcount10 = ClockDelay THEN
          signalcount10 <= 0;  
          signalenable <= '1';
        END IF;
      END IF;
   END IF;
  END PROCESS;
Vielleicht hilft das ;-)



BTW:
Das reicht aus:
  PROCESS (ClockIn, Reset_N)
EDIT:
Noch besser wäre:
  PROCESS (ClockIn)
  BEGIN
    IF (ClockIn'EVENT AND ClockIn = '1') THEN
      IF signalcount10 = 9 THEN
        signalcount10 <= 0;
        signalclock <= '0';
      ELSE
        signalcount10 <= signalcount10 + 1; 
      END IF;      
 
      IF signalenable = '1' THEN
        IF signalcount10 = ClockModulation THEN
          signalclock <= '1';
        END IF;
      ELSE
        IF signalcount10 = ClockDelay THEN
          signalcount10 <= 0;  
          signalenable <= '1';
        END IF;
      END IF;

      IF Reset_N = '0' THEN -- synchroner Reset, weil 
        signalcount10 <= 0; -- die letzte Signalzuweisung 
        signalclock <= '0'; -- im Prozess gilt
        signalenable <= '0';
      end if;
   END IF;
  END PROCESS;

Autor: the-sandman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.