Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Sonstiges » Metastabilitäten » Themenansicht

Autor Thread - Seiten: -1-
000
21.02.2014, 08:12 Uhr
Mario Blunk

Avatar von Mario Blunk

Hat jemand Erfahrungen in Sachen Metastabilität in digitalen Schaltungen ? Es handelt sich dabei um die Probleme, die entstehen, wenn asynchrone Signale in ein getaktetes System eingetaktet werden müssen.

Das Thema scheint oft vernachlässigt im Entwurf von Schaltungen. So z.B. scheint mir das willkürliche Abfragen der Eingänge einer PIO keine saubere Lösung, weil keine Datenhaltezeiten eingehalten werden können, es aber zu Metastabilitätsproblemen kommen kann.
--
Mein Chef ist ein jüdischer Zimmermann.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
21.02.2014, 12:06 Uhr
sas



Hallo Mario,

ich suche mal was raus, denn ich hatte mal in alter DDR Literatur zur Synchronisation von
Asynchroner Informationen was gelesen.

Frage geht das nicht auch mit einem seriellen - asynchronen Protokoll unter Interrupts?

Jörg


Zitat:
Mario Blunk schrieb
Hat jemand Erfahrungen in Sachen Metastabilität in digitalen Schaltungen ? Es handelt sich dabei um die Probleme, die entstehen, wenn asynchrone Signale in ein getaktetes System eingetaktet werden müssen.

Das Thema scheint oft vernachlässigt im Entwurf von Schaltungen. So z.B. scheint mir das willkürliche Abfragen der Eingänge einer PIO keine saubere Lösung, weil keine Datenhaltezeiten eingehalten werden können, es aber zu Metastabilitätsproblemen kommen kann.

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
21.02.2014, 15:10 Uhr
bernard



Meistens nuzt ich ein Schiebregister. Der Schiebregister ist mit System clock getaktet. Der asynchron Signal liegt an Eingang den Schiebregister. Vier Stufe

Wann alle Schiebregister Ausgange sind hohe wird einen Bistabil hohe geschaltet. ( uber ein UND Gatter )

Wann alle Schiebregister Ausgange dem null hohe wird einen Bistabil null geschaltet. ( uber ein NOR Gatter )
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
21.02.2014, 17:40 Uhr
Mario Blunk

Avatar von Mario Blunk


Zitat:
sas schrieb
ich suche mal was raus, denn ich hatte mal in alter DDR Literatur zur Synchronisation von
Asynchroner Informationen was gelesen.

Frage geht das nicht auch mit einem seriellen - asynchronen Protokoll unter Interrupts?

Mich beschäftigt das im Allgemeinen. Das selbe Problem taucht auf, wenn man mit einem FPGA asynchrone Signale aus der chaotischen Welt von draußen abtastet. Also ob mit Z80 oder einem hochgezüchteten FPGA, die Problematik ist die gleiche.
--
Mein Chef ist ein jüdischer Zimmermann.

Dieser Beitrag wurde am 21.02.2014 um 17:41 Uhr von Mario Blunk editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
21.02.2014, 17:43 Uhr
Mario Blunk

Avatar von Mario Blunk


Zitat:
bernard schrieb
Meistens nuzt ich ein Schiebregister. Der Schiebregister ist mit System clock getaktet. Der asynchron Signal liegt an Eingang den Schiebregister. Vier Stufe

Wann alle Schiebregister Ausgange sind hohe wird einen Bistabil hohe geschaltet. ( uber ein UND Gatter )

Wann alle Schiebregister Ausgange dem null hohe wird einen Bistabil null geschaltet. ( uber ein NOR Gatter )

Sehr gute Idee ! Das Eingangssignal braucht zwar 4 Takte, bis es gültig ist, aber dann ist es mit sehr hoher Warscheinlichkeit gültig.
--
Mein Chef ist ein jüdischer Zimmermann.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
21.02.2014, 17:45 Uhr
Micha

Avatar von Micha

Falls du die nicht ohnehin schon kennst ist eventuell diese Website von Interesse:

http://www.fpga4fun.com/CrossClockDomain.html
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
22.02.2014, 12:49 Uhr
Mario Blunk

Avatar von Mario Blunk

Hallo Micha,

ja, die Seite kenne ich, hab da sogar schonmal einen Beitrag zu I²C und Verilog geleistet. Aber mich interessieren Eure Erfahrungen. Insbesondere vor 1989 gab es bestimmt Gedanken und Lösungen zu der Thematik, die kaum noch in der Literatur zu finden sind...

Gruß,

Mario
--
Mein Chef ist ein jüdischer Zimmermann.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
22.02.2014, 13:37 Uhr
holm

Avatar von holm

Nunja, zumindest bei Mikrorechnern dürfte der Begriff "Entprellen (debounce)" ja nach wie vor gängig sein. Im Prinzip ist das was softwaremäßig abläuft auch nichts anderes als ein Schieberegister, i.A. wird ein Signal periodisch abgetastet und nur nach mehreren identischen Abtastungen als gültig markiert.
Bei Tastenabfragen hat sich bei mir bewährt erst nach 3 maligem Scan mit selbem Pegel auf gültig zu erkennen.

SIOs z.B. tasten während einer Bitzeit mehrmals ab und führen eine Mehrheitsentscheidung durch um zu kennzeichnen ob das aktuelle Bit als High oder Low einsortiert wird, das ist das Selbe in grün.

Man sollte es tunlichst vermeiden ein Signal direkt interrupten zu lassen und den Flankenwechsel direkt auszuwerten, das gibt mit Sicherheit eine hohe Störempfindlichkeit.

Eigentlich sind das Allgemeinplätze...

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
23.02.2014, 18:35 Uhr
Mario Blunk

Avatar von Mario Blunk

Hallo,

mit Entprellen hat das meines Erachtens nichts zu tun. Ich habe in Seiferts Digitalen Schaltungen Kap 15.3 etwas dazu gefunden. Ist aber eher theoretischer Natur. Also authentische Erfahrungsberichte sind mir lieber:



--
Mein Chef ist ein jüdischer Zimmermann.

Dieser Beitrag wurde am 23.02.2014 um 18:37 Uhr von Mario Blunk editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
23.02.2014, 19:47 Uhr
PIC18F2550

Avatar von PIC18F2550

Das Hauptproblem der Problematik besteht darin festzustellen ob sich innerhalb des konstanten Zyklus sich auf der asyncronen Seite was ändert.

Entscheidend zur Lösung ist der Zeitanteil wann das asyncrone signal im syncronen Raster gültig ist.

Der niedrigste (Impulse) deffiniert den mindest Abfragetakt der Eingangsschaltung.

Aus Erfahrung sollte idealerweise der Abfragetakt >1,5 sein damit jeder Flankenwechsel sicher erkannt wird.

Beim Einlesen <1,5 könnten zwei aufeinander folgende Flanken wechsel wie keiner gewertet werden. (einfacher Eingang)


z.B. Abfragetakt = Takt vom Schieberegister
Bedenke aber das das Auswerten auch Rechenzeit benötigt.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen

Dieser Beitrag wurde am 23.02.2014 um 19:48 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
23.02.2014, 21:07 Uhr
holm

Avatar von holm

Es dreht sich doch immer um das Selbe, man möchte ein analog vorliegendes Signal zu bestimmten Abtastzeitpunkten digitalisieren. Da die externe Welt halt nicht digital ist und angenommene Externe
Zustände nicht digital sind, entstehen Fehler die sich nur durch Oversampling ausschließen lassen.
Es ist dabei egal, ob ein Taster prellt oder ein Flipflop gerade beim Umschalten erwischt wird.
(diese "metastabilen Zustände" treten doch eigentlich bei jedem Umschaltvorgang auf, da sich ja die Ausgangsspannung nicht schlagartig von 0 auf 1 ändern kann, sondern Kapazitäten über Quellwiderstände umgeladen werden.
Exact so war das auch mit dem Entrprellen gemeint.

Gruß,
Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
24.02.2014, 18:39 Uhr
Hein_Ko




Zitat:
Mario Blunk schrieb

Zitat:
sas schrieb
ich suche mal was raus, denn ich hatte mal in alter DDR Literatur zur Synchronisation von
Asynchroner Informationen was gelesen.

Frage geht das nicht auch mit einem seriellen - asynchronen Protokoll unter Interrupts?

Mich beschäftigt das im Allgemeinen. Das selbe Problem taucht auf, wenn man mit einem FPGA asynchrone Signale aus der chaotischen Welt von draußen abtastet. Also ob mit Z80 oder einem hochgezüchteten FPGA, die Problematik ist die gleiche.

Ganz schwieriges Thema! Da spielen auch Pegel, Übersprechen, Laufzeitverhalten, Streukapazitäten, Impedanzen und deren Anpassung eine große Rolle (sowie parasitäre Schwingungen...) endloses Thema...

Kurz um alles muss erst mal HF-technisch betrachtet werden. Nur mal so zur Anregung.

Grüsse, Heinrich
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Sonstiges ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek