Guten Morgen Allerseits, ich bekomme über einen MISO Kanal drei 8 Bit Wörter, welche ich in ein 24 Bit Wort speichern möchte um dieses dann später in einem RAM Speicher abzulegen. Meine Frage: Wie verknüpfe ich die einzelnen Vektoren bzw. wie lege ich Sie in einem neuen Register ab? Oder wäre es besser ein 24 Bit Schieberegister zu bauen, in das in Abhängigkeit des SCLK's alle 24 Bit nacheinander hinein geschoben werden? Viele Grüße, pico
Oh, entschuldigung. Ich habe via SPI Daten über den MISO von einem ADC ausgelesen und möchte diese nun in ein 24 Bit Vektor speichern.
Da du im vhdl-Forum gepostet hast wuerde ich mal folgenden Vorschlag machen (das ist als Vorlage zum selbstdenken gedacht, nicht als Loesung):
1 | bitwort_24 <= bitwort8_1 & bitwort8_2 & bitwort8_3; |
Die drei 8 Bitworte einfach dem 24 Bitwort zuweisen. Gruss Max
Hi Max, das heißt, mit dem '&' Operator hänge ich sozusagen die Wörter aneinander? Entschuldigung, ich habe mich am Anfang ein wenig undeutlich ausgedrückt. Die 8 Bit habe ich nicht einzeln in einem Vektor gespeichert, sondern sie kommen bei fallender Taktflanke des SCLK's über den MISO Kanal. Das bedeutet: für jede der 8 fallende Taktflanken des SCLK's kann ich ein Bit des MISO's entnehmen. Danach geht der SCLK in den IDLE Zustand. Kurz darauf taktet dieser weiter und es werden wieder bei jeder fallenden Taktflanke die 8 Bit übertragen. Und das ganze 3 mal. Wäre es dann besser, erst einmal jedes Byte in ein 8 Bitwort zu packen und dann mit dem '&' Operator verknüpfen oder direkt bei jeder fallenden Flanke den aktuellen Wert des MISO's in ein 24 Bit Register zu schieben?
pico schrieb: > Wäre es dann besser, erst einmal jedes Byte in ein 8 Bitwort zu packen > und dann mit dem '&' Operator verknüpfen oder direkt bei jeder fallenden > Flanke den aktuellen Wert des MISO's in ein 24 Bit Register zu schieben? Letzteres. Bei Lothar Miller findest Du auch ein Beispiel dazu: http://www.lothar-miller.de/s9y/categories/45-SPI-Master Duke
>Wäre es dann besser, erst einmal jedes Byte in ein 8 Bitwort zu packen >und dann mit dem '&' Operator verknüpfen oder direkt bei jeder fallenden >Flanke den aktuellen Wert des MISO's in ein 24 Bit Register zu schieben? Da 24bit wahrscheinlich bei deinem nächsten Projekt nicht mehr aktuell sind, würde ich auf Byte-Ebene arbeiten. Dann kannst du später auch auf 64bit oder was auch immmer gehen.
> Wäre es dann besser, erst einmal jedes Byte in ein 8 Bitwort zu packen > und dann mit dem '&' Operator verknüpfen oder direkt bei jeder fallenden > Flanke den aktuellen Wert des MISO's in ein 24 Bit Register zu schieben? Das kommt auf dein Anwendungsfall an. Das kann man generell nicht so einfach beantworten. Wie "Autsch" schrieb, wenn du die Komponente wiederverwenden willst, bist du mit einer 8 Bitorganisation wahrscheinlich besser dran. Die 24 Bit Schiebeorganisation wird wahrscheinlich die einfachere sein, kann aber beim naechsten Projekt vielleicht gar nicht mehr so eingesetzt werden. Max
Autsch schrieb: > Da 24bit wahrscheinlich bei deinem nächsten Projekt nicht mehr aktuell >sind, würde ich auf Byte-Ebene arbeiten. Es ist mit VHDL auf einem FPGA i.A. eine schlechte Idee, sich an die 8-Bit-Konventionen von irgendwelchen uCs zu halten. Wenn du ein FPGA verwendest, und für irgendeine Aufgabe 7 oder 13 Bits ideal sind, dann nimmst du natürlich nicht 8 bzw. 16 Bits! Und daher ist deine Aufgabe einfach: du bekomst einen Datenstrom mit Blöcken von jeweils 24 Bit und willst den abspeichern. In dieser Aufgabe kommt die Zahl 8 nicht vor... Und wenn du dann hinterher dieses 24-Bit-Wort in 8-Bit Häppchen aufteilen willst (z.B. für eine Übertragung über einen 8-Bit-Bus), dann gibt es Multiplexer...
>Und wenn du dann hinterher dieses 24-Bit-Wort in 8-Bit Häppchen >aufteilen willst (z.B. für eine Übertragung über einen 8-Bit-Bus), dann >gibt es Multiplexer... Ich würde es genau umgekehrt machen: 8-Bit-Wort als Basis und diese Basis dann (in Vielfachen) in einen breiteren Kontext bringen. Aber viele Wege führen nach Rom, man muss sich nur im Klaren darüber sein, dass viele Busbreiten Vielfache von 8 sind ;-) Autsch
Autsch schrieb: > man muss sich nur im Klaren darüber sein, > dass viele Busbreiten Vielfache von 8 sind ;-) Und im Besonderen, dass das innerhalb eines FPGAs total egal ist... ;-)
> Und im Besonderen, dass das innerhalb eines FPGAs total egal ist... > ;-) Deswegen wuerde ich mal das Datenblatt des ADC lesen, wie die Daten dort gesendet werden, und dann entscheiden was in diesem Fall die bessere Loesung ist. Es gibt auch die Moeglichekeit einen generellen SPI Slave machen und die Bitbreite als Generic festlegen. Da gibt es viele Moeglichkeiten... Max
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.