Forum: Mikrocontroller und Digitale Elektronik Kommunikation uC -> FPGAs


von ampa (Gast)


Lesenswert?

Hallo,

ich hab eine Frage bezueglich des "Timings" von Mikrocontrollern. Habe 
bisher Erfahrung mit FPGA-"Programmierung" aber noch nicht mit uC.

Also, es geht darum, dass ein ARM auf einem Board einige 
Kommunikationsschnittstellen steuert. Die Controller dafuer sind soweit 
vorhanden.
Es werden Daten ueber eine Ethernet-Schnittstelle per TCP/IP empfangen 
und in einen angeschlossenen RAM geschrieben.
Nun moechte ich ueber eine andere Schnittstelle mehrere FPGAs 
anschliessen, an welche bestimmte Daten davon gesendet werden. Ein 
Protokoll dazu kann selbst ausgedacht werden. Allerdings muss ich dafuer 
etwas zum Verhalten des uC wissen.

Also, gesendet wird moeglichst ohne Rueckleitung von den FPGAs, es gibt 
einfach nur ein enable und einen Datenpaketbroadcast mit einem Header 
ueber den der angesprochene FPGA dann seine Daten erkennt (Header+Daten 
ca. 50 Bit).
Im FPGA-Denken wuerde ich nun Taktflanken im Protokoll definieren und 
z.B. sagen, enable geht auf high und ein Datenpaket wird komplett 
uebertragen, ein Datenbit pro Clockcycle bis enable wieder low ist.
Geht das ueberhaupt mit einem uC oder laeuft das eher asynchron zum FPGA 
bzw. braucht mehrere Takte um z.B. ein Bit rauszusenden oder muss den 
Takt mitsenden oder wie auch immer? Also kann ich ein derartiges 
Kommunikationsverhalten voraussetzen oder muss man das anders machen?

Ich muss am Ende nicht das uC-Programm schreiben aber dem dafuer 
Zustaendigen sagen, was ich wie brauche aber dazu muss ich erstmal 
wissen was moeglich ist.
Vielen Dank.

von Falk B. (falk)


Lesenswert?

@ ampa (Gast)

>ich hab eine Frage bezueglich des "Timings" von Mikrocontrollern. Habe
>bisher Erfahrung mit FPGA-"Programmierung" aber noch nicht mit uC.

Hmm.

>Nun moechte ich ueber eine andere Schnittstelle mehrere FPGAs
>anschliessen, an welche bestimmte Daten davon gesendet werden. Ein

Wieviele Daten sollen in welcher Zeit transoportiert werden?
Wieviele FPGAs werden denn angeschlossen?

Spontan würde ich sagen, dass entweder SPI oder memory mapped IO in 
Frage kommen.

SPI

MfG
Falk

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich würde auch spontan auf SPI tippen.  Wichtig dabei ist, dass du
in Blöcken von 8 Bits arbeitest, da Hardware-SPI-Implementierungen
in der Regel nur ganzzahlige Vielfache von 8 Bits ausgeben können.

Auch wenn du eigentlich nichts zurück geben willst, kann es dabei
sinnvoll sein, den Rückkanal trotzdem zu implementieren.  Damit kann
der steuernde Controller dann (wenn ein bestimmtes, definiertes
Bitmuster als Antwort gesendet wird) feststellen, dass er nicht
,,in die Luft redet''.

von ampa (Gast)


Lesenswert?

Hallo Falk,

Danke soweit.
Wieviele FPGAs maximal angeschlossen werden sollen, ist noch nicht ganz 
klar, vier oder acht etwa, wobei nicht alle Plaetze immer belegt sein 
muessen.
Wieviele Daten in welcher Zeit gesendet werden sollen, ist auch erstmal 
nicht wichtig, es geht mir nur um die Synchronisation uC -> FPGA. Der 
FPGA ist dann schon schnell genug, um was mit den Daten anzufangen bevor 
neue kommen.

von ampa (Gast)


Lesenswert?

und danke auch Joerg :-)

von ampa (Gast)


Lesenswert?

Achso, wegen der Daten pro Zeit war die Geschwindigkeit der 
Schnittstelle gemeint, die ist auch erstmal zweitrangig.

Also ich denke ich werde I2C nehmen (unidirektional) oder ist das dafuer 
eher unueblich? Hat das groessere Nachteile gegenueber SPI?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ampa wrote:

> Also ich denke ich werde I2C nehmen (unidirektional) oder ist das dafuer
> eher unueblich? Hat das groessere Nachteile gegenueber SPI?

Unnützer Stress und fehleranfälliger.  I²C hat Sinn, wenn man entweder
viele Geräte adressieren will (wie im System Management Bus in einem
PC) -- SPI braucht pro Gerät ein "slave select"-Signal, oder wenn der
Slave u. U. lange brauchen kann (Microcontroller), bis er bereit ist.
Zumindest letzteres hast du ja nicht.

von ampa (Gast)


Lesenswert?

@Joerg

Wie meinst du das mit dem fehleranfaelligeren I2C?

In meinem Fall waere glaub ich I2C besser, da ich erstens nicht so viel 
Leitungen zur Verfuegung habe (SPI braucht ja viele chip selects) und 
zweitens die Geraete idealerweise ueber eine Adresse ansprechbar sein 
sollten um sie an verschiedene Plaetze der Leitung zu haengen.

Aber lass mich auch belehren, wenn SPI oder andere Varianten besser 
sind.

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.