Forum: FPGA, VHDL & Co. SPI (Slave) und einsynchronisieren


von VHDL Anfänger (Gast)


Lesenswert?

Hallo zusammen,

es heißt immer die externen Signale müssen zuerst über 1 bzw. 2 FFs 
einsynchronisiert werden.

Wie sieht es aus beim SPI (Slave), muss alles mit einem "SysClock " 
einsynchronisert werden:
=>
1- Nur bei einer SysClock Flanke reagieren die SPI Prozesse?

2- ODER alle SPI Signale zuerst einsynchronisieren und zu internen 
Signale wandeln, diese werden dann in SPI Prozesse bearbteitet => 
Einsynchronisieren über 2FFs heißt in diesem Fall eine Verzögerung von 2 
SysClcks!.

Die meisten Spi Beispiele arbeiten aber direkt mit der Flanke des SPiClk 
ohne einsynchronisieren!

Wie ist es am sichersten/besten?

Vielen Dank

von Schlumpf (Gast)


Lesenswert?

VHDL Anfänger schrieb im Beitrag #3067676:
> Wie ist es am sichersten/besten?

Das kann pauschal nicht beantwortet werden.
Es kommt auf die Anforderungen an dein SPI an.

Wenn du ein sehr schnelles SPI realisieren willst, und nur einen 
langsamen Systemtakt zur Verfügung hast, dann musst du die SPI-Register 
direkt mit SCK takten.
Ebenso, wenn du eine geringe und vorallem konstanten Latency zwischen 
Schreibflanke und MISO haben willst.
Aber ACHTUNG! Wenn du das so machst, dannn musst du ein wenig 
Hinrschmalz reinstecken, wie deine Daten "sicher" über die Domaingrenze 
zu deinem internen Systemtakt kommen.
Außerdem wird so ein System extrem empfindlich gegen Störungen auf der 
SCK-Leitung, da diese ja direkt auf die internen Register des FPGA 
wirken und die sind ziemlich flott..
Also bei der Methode würde ich einen Schmitt-Trigger und ein C am 
SCK-Eingang des FPGA spendieren.

Bei der anderen Methode reicht es, wenn du SCK synchronisierst. Da in 
der Natur des SPI liegt, dass zum Zeitpunkt der Leseflanke MOSI auf 
jeden Fall stabil anliegt. Bei dieser Methode drehen sich Vor- und 
Nachteile zur o.g. Methode einfach um.

von VHDL Anfänger (Gast)


Lesenswert?

Noch eine Frage:

Wenn zusätzlich zu der SPI Übertragung noch andere Signale habe, wo auf 
der Flanke reagiert werden muss (z.B. ExecCmd,...), muss ich alles zum 
SysClock synchronisieren und Flankenerkennung für diese Signale 
einbauen, das diese signale nur einen Clock High sind und danch wieder 
Low?

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


Lesenswert?

VHDL Anfänger schrieb im Beitrag #3073388:
> muss ich alles zum SysClock synchronisieren
Ja.
> und Flankenerkennung für diese Signale einbauen, das diese signale
> nur einen Clock High sind und danch wieder Low?
Das macht Sinn.

von VHDL Anfänger (Gast)


Lesenswert?

Macht es auch Sinn wenn ich die Flanken von 4 externen Signale in einem 
Process(SysClock) erkenne und in einem anderen Process(sysClock) mit den 
internen Signalen (Flankenerkennung) weiterarbeite?
oder können da Konflikte auftreten weil die Flankenerkennung nur ein 
Takt lang ist?

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


Lesenswert?

Häh?

> können da Konflikte auftreten weil die Flankenerkennung
> nur ein Takt lang ist?
Nicht, wenn dein System mit diesem Impuls dann auch was anfangen kann. 
Üblicherweise kann es das, weil die gesamte Hardware immer auf dem 
FPGA und immer aktiv ist...

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.