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.
Moin... Wenn sich da nichts gravierendes in der Software geändert hat passiert garnichts, weil ungültiger VHDL Code. -- SJ
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
...gut, das dachte ich mir schon... wollte mir nur sicher gehen Dankeschön.
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.
...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 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.