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


von Tobias (Gast)


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

von TobiFlex (Gast)


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

von TobiFlex (Gast)


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

von Tobias (Gast)


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

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
Noch kein Account? Hier anmelden.