Clock Domain Crossing schnell zu sehr langsam

Gast #3869953
Lesenswert?

Moin,
ich hab da ein Verständnisproblem mit dem Clock Crossing. Signale aus 
einer langsamen clockdomain (30KHz) in eine schnelle (12MHz) zu 
übertragen funktioniert. Alles gut.
allerdings blicke ich es nicht, wie ich es mit einem einzelnen Signal 
anders herum mache.
Ich hab ein Xilinx XC95288XL CPLD und dummerweise nur noch eine magere 
hand voll Makrozellen übrig.....
Ich hatte tatsächlich was gefunden, allerdings so abstrahiert, daß ich 
damit (jetzt, unter Zeitdruck) nicht so viel damit anfangen konnte.
Wie lässt scih sowas in VHDL formulieren?
Danke schon einmal im Voraus.
:-) Sarah
#3869986
Lesenswert?

@ Sarah (Gast)

>ich hab da ein Verständnisproblem mit dem Clock Crossing.

Und wir mit deinem Titel des Beitrags ;-)

> Signale aus
>einer langsamen clockdomain (30KHz) in eine schnelle (12MHz) zu
>übertragen funktioniert.

Wie hast du es genau gemacht?

>Alles gut.

Denken die meisten.

>allerdings blicke ich es nicht, wie ich es mit einem einzelnen Signal
>anders herum mache.

Ähnlich. Nur dass dein Signal halt mehrere Takte aktiv sein muss, damit 
es die 300kHz Taktdomäne erkennt. Alternativ muss man halt mit RS-oder 
D-FlipFlops arbeiten, die von der einen Seite gesetzt und von der 
anderen gelesen und gelöscht werden können.

>Ich hab ein Xilinx XC95288XL CPLD und dummerweise nur noch eine magere
>hand voll Makrozellen übrig.....

Reicht doch. Was für ein Signal soll denn übertragen werden?
Gast #3870567
Lesenswert?

Eigentlich nicht so schwierig.
Die empfangende Seite sampled das Signal mit ihrer Clock.
In deinem Fall darf die Frequenz des Signal natürlich nicht höher als 30 
KHz sein, d.h. - wie Falk auch schon sagte - darf sich das Signal 
maximal alle 400 12-MHz Takte ändern.
Moderator (Firma: Titel) Persönliche Seite #3870646
Lesenswert?

Easylife schrieb:
> Eigentlich nicht so schwierig.
Ich würde ein Handshakeverfahren verwenden:
auf der schnellen Seite wird der Wert "eingefroren" und mit einem Flag 
der langsamen Seite gesagt, dass die daten stabil sind (und bleiben 
werden!). Dann wird dieses eine Signal auf der langsamen Seite 
einsynchronisiert und dann die zwischenzeitlich immer noch stabilen 
Daten übernommen.

Das geht natürlich nicth soooo einfach, wenn auf der "schnellen Seite" 
ein Zähler ist, der nicht angehalten werden darf. Das war es, warum
Falk Brunner schrieb:
>>> Was für ein Signal soll denn übertragen werden?
Moderator (Firma: Titel) Persönliche Seite #3874006
Lesenswert?

Allerdings ist in den allermeisten Fällen nicht Metastabilität die 
Ursache von "seltsamen" Problemen, sondern unterschiedlich lange Pfade 
zu unterschiedlichen Flipflops! Das was dort in allen Bildern als 
"bdat1" bezeichnet wird, ist bei heutigen FPGAs nämlich innerhalb von 
ein paar ps abgehandelt und stabil. Ein Flipflop-Ausgang floatet nicht 
5ns undefiniert in der Gegend herum!
Siehe den Beitrag "Detailbetrachtungen zur Metastabilität"

Das Hauptproblem bei Verwendung nicht synchronisierter Eingänge ist also 
schlicht das hier:
http://www.lothar-miller.de/s9y/archives/64-State-Machine-mit-asynchronem-Eingang.html
Gast #3874036
Lesenswert?

Nach meinem Verständnis muss man nur einen FIFO verwenden, dessen 
Signale entsprechend synchronisert werden. Natürlich muss das data 
enable das als hand shake funktioniert, lang genug gemacht werden, dass 
es von der langsamen domain erkannt wird. Einfach also so bauen, wie man 
es in hardware TTl auch bauen würde ..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren