www.mikrocontroller.net

Forum: FPGA, VHDL & Co. clock und invertierter clock


Autor: Tobias (Gast)
Datum:

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

Autor: TobiFlex (Gast)
Datum:

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

Autor: TobiFlex (Gast)
Datum:

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

Autor: Tobias (Gast)
Datum:

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

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.