mikrocontroller.net

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


Autor: Bustle (Gast)
Datum:

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

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin...

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

--
 SJ

Autor: Axel (Gast)
Datum:

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

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...gut, das dachte ich mir schon... wollte mir nur sicher gehen

Dankeschön.

Autor: Jürgen Schuhmacher (Gast)
Datum:

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

Autor: Bustle (Gast)
Datum:

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

Autor: Axel (Gast)
Datum:

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

Autor: -daniel- (Gast)
Datum:

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

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.