clock und invertierter clock

Gast #389277
hallo...ich bastel gerade ein bisschen mit dem ise pack rum.
jetzt wollte ich mal mit den dcm etwas experimentieren und beim
erstellen eines geeigneten moduls ergab sich gleich (wie sollte es auch
anders sein) ein problem.
also als eingänge des moduls gibt es clk und clk_180 aus dem dcm
(invertiert). das modul soll ganz einfach eine clock halbierung machen
und an den ausgängen a1 und a2 diese über eine logische verknüpfung mit
c1 ausgeben.

hier der interessante teil des codes:
...

main: process(clock, clock_180, reset)
      begin
        if (reset = '0') then
            sig1 <= '0';
            sig2 <= '0';
  elsif rising_edge(clock) then
      sig1 <= not sig1;
  elsif rising_edge(clock_180) then
      sig2 <= not sig2;
  end if;
      end process;

      a1 <= sig1 and c1;
      a2 <= sig2 and c1;
...

es wird als error ausgegeben, das sig2 (also das signal auf dem
invertierten clock) nicht synthetisiert werden kann. könnte mir das wer
erklären und eine lösungsvorschlag geben?
Besten Dank
Tobias
Gast #389278
Na das ist klar, daß das nicht geht. Theoretisch treten die steigenden
Flanken von clock und clock_180 nie gleichzeitig auf. sig2 <= not sig2
würde also sowieso nie ausgeführt.
Praktisch geht das aber auch nicht weil du ein FF mit zwei
Takteingängen bräuchtest.
Probier es mal so:

main: process(clock, clock_180, reset)
  begin
      if (reset = '0') then
            sig1 <= '0';
      elsif rising_edge(clock) then
            sig1 <= not sig1;
      end if;

     if (reset = '0') then
            sig2 <= '0';
     elsif rising_edge(clock_180) then
            sig2 <= not sig2;
     end if;
  end process;

  a1 <= sig1 and c1;
  a2 <= sig2 and c1;
...

Viele Grüße
TobiFlex
Gast #389279
Jetzt hab ich etwas Murks geschrieben:

"Theoretisch treten die steigenden
Flanken von clock und clock_180 nie gleichzeitig auf. sig2 <= not sig2
würde also sowieso nie ausgeführt."

Das ist ja eine IF .. ELSIF .. ... Struktur.
Also vom logischen mag das richtig aussehen wenn clock nicht steigt
kann clock_180 steigen. Aber der Compiler versucht clock und clock_180
auf sig2 anzuwenden. Und das geht eben nicht.

Viele Grüße
TobiFlex
Gast #389280
oki..danke für die richtigstellung..
habe mich gerade schon ein bisschen gewundert warum der vom
theoretischen part nie ausgeführt wird.
aber es klappt inzwischen und ich weiss ja jetzt auch warum.
besten dank
gruss tobi

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.