Forum: FPGA, VHDL & Co. ein synchronisieren zum Wahrscheinlich nicht letzten mal


von Sync (Gast)


Lesenswert?

Hallo Zusammen,
ich habe eine Anfänger Frage:
Was macht dieser Code ?
Ich weiß was ein synchronisieren ist aber:

Wieso ist EPP_strobe_reg ein Schieberegister ?
Was ist der Eingang des Schieberegister ?
Vielleicht verstehe ich auch den Syntax einfach nicht.
Ich kann mir schon denken, das die Änderungen an EPP_strobe in das 
Register geschoben werden. Ich sehe das aber nicht am Code.
Das ist doch nur eine Zuweisung und eine Zusammenfassung.

// Use a 3-taps shift register to synchronize EPP_strobe to our clock

wire EPP_strobe = EPP_data_strobe | EPP_addr_strobe;  // only one is 
active at a time
reg [2:0] EPP_strobe_reg;
always @(posedge clk) EPP_strobe_reg <= {EPP_strobe_reg[1:0], 
EPP_strobe};

code kommt von da:

http://www.fpga4fun.com/EPP4.html

Vielen Dank schon mal !

von Falk B. (falk)


Lesenswert?

@ Sync (Gast)

>Das ist doch nur eine Zuweisung und eine Zusammenfassung.

>reg [2:0] EPP_strobe_reg;

Definert ein 3 Bit Register

>always @(posedge clk) EPP_strobe_reg <= {EPP_strobe_reg[1:0],
>EPP_strobe};

Das ist ein einfaches Schieberegister, das mit jeder positiven 
Taktflanke Daten schiebt. Als LSB kommt EPP Strobe rein und wird über 
drei Bits geschoben.

Das ist der klassische Ansatz zum Synchronisieren von 
Daten/Steuersignalen zwischen asynchronen Taktsystemen. Der Takt vom 
CPLD ist asynchron zum PC und damt den EPP Signalen.

von Sync (Gast)


Lesenswert?

@  Falk Brunner

Vielen Dank ich dachte mir das schon.

Ich bin damit nicht klargekommen, weil zum Beispiel hier in 1) nur von 
Zusammenfassen die rede ist:
1) 
http://e21.frm2.tum.de/fileadmin/user_upload/documents/lectures/epraktikum/kapitel03.pdf

"Mit geschweiften Klammern können mehrere 'wire' zu
einem gemeinsamen Bus zusammengefasst werden:"
wire [31:0] databus = {b1,b2,b3,b4};

Darf ich noch fragen was ergibt dann folgendes Konstrukt.
reg [2:0] EPP_strobe_reg;
always @(posedge clk) EPP_strobe_reg <= 
{EPP_strobe_reg[1:0],EPP_strobe,in1};

Also wenn EPP_strobe der Eingab des Schieberegister ist, wohin gehen 
dann nachfolgende Signale.
Gibt es das irgentwo zum Nachlesen mit dem Operator {a,b,c} angewedet 
auf Registern.
Danke Nochmal

von Tippgeber (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tippgeber schrieb:
> http://www.mikrocontroller.net/articles/Metastabilit%C3%A4t
Wobei das Einsynchronisieren eher den unterschiedlichen Laufzeiten im 
FPGA entgegen wirken muss. Metastabilität ist nämlich bei Anfängern 
sicher kein relevantes Thema.

Siehe  http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren

von Trundle Trollkönig (Gast)


Lesenswert?

Sync schrieb:
> reg [2:0] EPP_strobe_reg;
> always @(posedge clk) EPP_strobe_reg <=
> {EPP_strobe_reg[1:0],EPP_strobe,in1};

Das wird nix gutes:  du versuchst 4 bit in einem 3 bit Register zu 
"speichern". Müsstest nen Fehler bekommen bei der Synthese mindestens ne 
Warnung... bin mir nicht 100 pro sicher. Hab glaube ich vor nen paar 
Wochen durch nen Schreibfehler ähnliches versucht, kam nen Fehler von 
der ISE.
Und was soll das in1 sein, woher kommt das?

von Sync (Gast)


Lesenswert?

Danke schon mal für eure Antworten !

Aber ich glaube, es ist irgend etwas mehr basisches was ich nicht 
verstehe.
Wenn ich schreibe
reg [2:0] EPP_strobe_reg;.
Gehe ich davon aus, das ich drei unabhängige FilpFlops habe oder nicht?
Woher kann man wissen, das wenn man
always @(posedge clk) EPP_strobe_reg <= 
{EPP_strobe_reg[1:0],EPP_strobe};
der z.B Qn-1 Ausgang eines Registers mit dem nächsten Dn Eingang des 
nachfolgenden Registers verbunden ist (was ja dann ein Schieberegister 
währe).

Vielleicht habe ich es wirklich nicht verstanden oder mir Fehlt ein 
Hinweis.

Danke noch mal.

von Sync (Gast)


Lesenswert?

Ok Danke nochmal. Jetzt ist der Groschen doch noch gefallen.

Siehe  http://www.lothar-miller.de/s9y/categories/35-Eins...

insr <= insr(0) & input;

Diese Zeile hat geholfen

Sorry für die Störung :-)

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.