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?
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.