Forum: FPGA, VHDL & Co. Verständnisfrage Register


von Ben (Gast)


Lesenswert?

Hallo,

hätte noch ne Verständnisfrage zum allg. Thema "Register".

Schreibe und Lese ich ein Register in derselben Clock Domain bekomme ich 
keine Probleme.
Geschieht das Schreiben/Lesen aus 2 verschiedenen Clock Domains muss ich 
die Daten einsynchronisieren.
Soweit richtig, oder?

Jetzt meine Fragen:

1) 2 Clock Domains:
Falls beim lesen zufällig aus der anderen CD geschrieben wird, ist das 
Ergebnis zufällig, oder? Daher das einsynchronisieren, richtig?


2) 1 Clock Domain:
Schreibe/Lese ich zur gleichen Flanke -> Was passiert da genau?

 + Werden vom Leseprozess bereits die neuen Daten oder die vom 
vorherigen Takt übernommen?
 + Wenn genau während dem Lesen geschrieben wird, passiert doch 
eigentlich genau dasselbe wie bei 2 Clock Domains, oder? Sprich, auch 
hier kommt Datenmüll heraus. Oder sorgt das Synthesetool dafür, dass 
hier alles richtig läuft?

von Rick Dangerus (Gast)


Lesenswert?

Dummerweise lassen sich mehrere Clockdomains u.a. schlecht simulieren, 
daher sind sie nicht das ideale Thema zum Einstieg.

zu 1.: Ja, außerdem können metastabile Zustände auftreten.

zu 2.: Gelesen werden die alten Daten und geschrieben die Neuen. Dafür 
wurde u.a. Master-Slave-FF's erfunden.

Rick

von Ben (Gast)


Lesenswert?

Hallo,

nochmal zu meiner 2ten Frage:

2) 1 Clock Domain:
Schreiben/Lesen zur gleichen Flanke -> Was passiert da genau?

+ Ein Master-Slave FF schreibt die Daten doch  bei der steigenden Flanke 
und liest die Daten bei der fallenden Taktflanke.
Ein M-S-FF kann demnach nicht der wahre grund sein, warum 
Lesen/Schreiben auf die selbe Taktflanke funktioniert, oder? Denn da 
wird doch beides auf die steigenden Falnke erledigt (z.B. bei 
rising_edge())

+ Wie verhält es sich, wenn ich mittels Zähler aus einem 200MHz Takt 
einen 50 MHz Takt erzeuge? Werden diese beiden Takte auch noch als 
Synchron zueinander bezeichnet? d.h. ich kann beides zur selber CLock 
Domain zählen?

Grüße,
Ben

von Jan M. (mueschel)


Lesenswert?

Ben wrote:
> Hallo,
>
> nochmal zu meiner 2ten Frage:
>
> 2) 1 Clock Domain:
> Schreiben/Lesen zur gleichen Flanke -> Was passiert da genau?
>
> + Ein Master-Slave FF schreibt die Daten doch  bei der steigenden Flanke
> und liest die Daten bei der fallenden Taktflanke.
> Ein M-S-FF kann demnach nicht der wahre grund sein, warum
> Lesen/Schreiben auf die selbe Taktflanke funktioniert, oder? Denn da
> wird doch beides auf die steigenden Falnke erledigt (z.B. bei
> rising_edge())
Wenn du berücksichtigst, dass alles eine gewisse Zeit braucht, wird 
klar, warum es funktioniert: Bildlich gesprochen beginnt der Erste mit 
der Taktflanke einen neuen Wert zu schreiben, während der zweite kurz 
vor der Taktflanke ein "Foto" macht um selbst mit der Flanke anfangen zu 
können zu schreiben. Der zweite sieht damit in jedem Fall noch den alten 
Wert.

> + Wie verhält es sich, wenn ich mittels Zähler aus einem 200MHz Takt
> einen 50 MHz Takt erzeuge? Werden diese beiden Takte auch noch als
> Synchron zueinander bezeichnet? d.h. ich kann beides zur selber CLock
> Domain zählen?

Jein. Synchron im eigentlichen Sinne sind sie schon, die Phasenbeziehung 
zwischen beiden Takten ist immer fest. Im FPGA gibt es jedoch noch einen 
anderen Faktor: Der neue Takt muss aus dem Zähler wieder in ein 
Taktnetzwerk eingespeist werden und zum "Verbraucher" transportiert 
werden. Das ganze kostet viel Zeit, so dass mit einem solchen 
kombinatorischen Takt oft Probleme (setup- & hold-time violation) 
auftreten und so etwas somit vermieden werden muss. Stichwort 
Clock-enable.

von Ben (Gast)


Lesenswert?

Hallo,

> Bildlich gesprochen beginnt der Erste mit der Taktflanke einen
> neuen Wert zu schreiben.
Ah Ok. Denke das ist klar. Das heißt untern Strich kümmert sich das 
Synthesetool darum oder der FPGA selber?


> Das ganze kostet viel Zeit, so dass mit einem solchen
> kombinatorischen Takt [...]
Hm, ich denke ich habe solche kombinatorischen Takte hier im Forum schon 
des öfteren gesehen. Ist das so ein "sollte man nicht machen, die 
meistens machens trotzdem" Ding?

Ich hab mir den einen Artikel dazu durchgelesen.
http://www.mikrocontroller.net/articles/Taktung_FPGA/CPLD
Verstehe ich das richtig:
+ Mein Clock sollte für jedes Modul derselbe sein.
+ Der Zähler den ich bisher zum generiern des langsameren Taktes 
verwendet habe, wird einfach als Signal am ClockEnable Eingang 
verwendet?

Ist diese ganze Problematik mit "Gated Clock" bei einem FPGA Takt von 
200MHz eigentlich schon wichtig, oder erst bei höheren 
Geschwindigkeiten?

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.