mikrocontroller.net

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


Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.