Forum: FPGA, VHDL & Co. VHDL: Zwei rising_edge Befehle verschachtelt?


von Bustle (Gast)


Lesenswert?

Hallo,

macht es Sinn zwei Takte ineinander zu verschachteln... also z.B.

if (rising_edge (CLOCK1)) then
  if (rising_edge (CLOCK2)) then
     ...
  end if;
 ...
end if;

Wobei der CLOCK2 langsamer als CLOCK1 ist. Wie verarbeitet hier der
FPGA das Signal?
Ist es so, dass bei steigender Flanke von CLOCK2 die innere
If-Anweisung abgearbeitet wird und bei steigender Flanke die äußere
If-Anweisung und die Signale erst dann ausgegben werden? (so würde ich
es brauchen)
Oder passiert nur etwas, wenn die zwei steigenden Flanken zufällig
aufeinander treffen?

Vielen Dank.

von Sven Johannes (Gast)


Lesenswert?

Moin...

Wenn sich da nichts gravierendes in der Software geändert hat passiert
garnichts, weil ungültiger VHDL Code.

--
 SJ

von Axel (Gast)


Lesenswert?

Das geht so nicht. Wie soll das in Hardware denn gebaut werden ?

Da wirst Du Dir was überlegen müssen, um die Signale zu
synchronisieren.

Gruss
Axel

von Bustle (Gast)


Lesenswert?

...gut, das dachte ich mir schon... wollte mir nur sicher gehen

Dankeschön.

von Jürgen Schuhmacher (Gast)


Lesenswert?

Von der reinen Schaltlogik her, müsstes Du die Takte einfach verordern -
ich kann mir nur nicht vorstellen, was das ablauflogisch für einen Sinn
macht: Du detektierst einen gleichzeitigen Flankenwechsel. Eine reale
Schaltung die darauf arbeitet, macht aber keinen Sinn, weil sie infolge
von jitter nicht vorhersagbar läuft.

Sinn macht nur eine parallele FlipFlopArchitketur mit diesen beiden
Takten. Dann aber reicht es, die Eingangs- bzw. die Ausgangssignale zu
verordern und logisch die gewünschte Funktion zu erreichen.

Es sei denn, die Takte seien starr verkoppelt, und Du möchstest ein
Aktion beim gemeinsamen Flankenwechsel. Dann aber reicht es, im obigen
Konstrukt den Pegel des Signals abzuprüfen.

Wenn Du irgendeine obskure Flankendetektion machen möchstest, und die
Takte nicht kombinarisch barbeiten kannst, dann musst du beide Zweige
parallel aufbauen: Einmal Clk1 als Signal und Clk2 als Clk, wobei in
einem von Clk2 getriggerten Prozess ein Flankenwechel per Hand gemerkt
und einmal gespeichert werden muss (alten Zustand mit neuem
vergleichen, dann "risingmemo" kurz auf 1, wenn alt=neu -> risingmemo
= 0). Auf diese Weise erhälst du ein Signal, daß seinen Zustand dann
wechselt, wenn innerhalb einer CLk-Periode der Takt1 gewechselt hat und
Clk2 gerade wechselt. Das baust Du nochmal invertiert auf und erhälst 2
Signale, die Du verordern kannst. Es ist dann high, wenn beide Takte
ihre Flanken geändert haben.

von Bustle (Gast)


Lesenswert?

...der letzte Vorschlag ist sehr interessant. Hatte so ne ähnliche Idee
aber das gab dann immer einen Fehler in ISE wegen schlechter
Signalwertzuordnung. Aber ich könnte es mal nach deinem Vorschlag
probieren.

Dankeschön...

von Axel (Gast)


Lesenswert?

"Von der reinen Schaltlogik her, müsstes Du die Takte einfach
verordern"

Wenn dann CLK1 high ist wird CLK2 nichts auslösen, weil der veroderte
Wert sich nicht ändert.

Wäre natürlich mal ganz gut zu wissen, was Du eigentlich machen willst
und wozu.

Gruss
Axel

von -daniel- (Gast)


Lesenswert?

die VHDL Beschreibung als solche nur ist reiner text
es gibt 2 Domainen für die die entsprechende Semantik ausgehend
aus diesem Text definiert werden muss
1) Simulation
2) Synthese

Für Synthese, macht dein Beispiel keinen Sinn
skew effekte und ähnliches

Für Simulation .. hmm zumindest theoretisch müsste
if a'event and b'event then ... end if;
anspringen wenn a und b im gleichen delta cycle einen event haben.
Müsste man halt sowas ausprobieren

architecture ..
signal a,b: integer;
begin
   a <= 1;
   b <= 2;
   process
   begin
       wait on a,b;
       if a'event and b'event then
          ... dein code hier
       end if;
   end process;
end architecture;

aber für was man das brauchen könnte, weiss ich nicht

hth, Daniel

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.