Hallo zusammen, ich habe aktuell folgende Anwendung mit einem Spartan-3E FPGA: Ich spreche mittels SPI mehrere Bausteine (DACs, ADCs, digitale 24V IOs) an und habe für jeden notwendige Wortbreite einen eigenen SPI Block Instanziiert. Ähnlich wie hier bei Lothar: http://www.lothar-miller.de/s9y/archives/51-Konfigurierbarer-SPI-Master.html habe auch ich einen SPI Master beschrieben, der mittels Generics einstellbare Frequenz und Wortbreite habe. Jedoch möchte ich nun gerne EIN SPI Modul nutzen, dass ich zur Laufzeit anpassen kann. Lothar schreibt dazu "Eine Änderung der Taktfrequenz, der Protokolllänge und der Delays könnte problemlos auch zur Laufzeit implementiert werden." jedoch bekomme ich das ganze nicht so umgesetzt wie ich mir das vorstelle. Es läuft entweder gar nicht oder nur mittels Unterbrechung des SPIs um eine kleinere Wortbreite zu realisieren. Freue mich über eure Tipps! Grüße Sebastian
Sebastian schrieb: > Es läuft entweder gar nicht oder nur mittels Unterbrechung des SPIs um > eine kleinere Wortbreite zu realisieren. Lass mal deinen Code sehen.
Das ist die synthetisierbare Version mit den Generics
Sebastian schrieb: > Lothar schreibt dazu "Eine Änderung der Taktfrequenz, der Protokolllänge > und der Delays könnte problemlos auch zur Laufzeit implementiert > werden." Ich hatte mich auf meinen Code bezogen... ;-) > jedoch bekomme ich das ganze nicht so umgesetzt wie ich mir das vorstelle. Bei deinen Modulen tu ich mich auf die Schnelle da auch ein wenig schwer... Da brauch ich mal ein paar ruhige Minuten. Aber der erste Schritt weg von den Generics, ist, erstmal die nötigen Generics zu Ports zu machen. Und dann dort zu den richtigen Zeitpunkten passende Signale anzulegen. Das sollte natürlich nicht passieren, solange eine Übertragung aktiv ist. BTW: Der Kommentar stimmt nicht spi_s_data_out <= spi_p_data_in(pointer); -- data is shifted out serial Da wird nichts geshiftet, das ist ein Multiplexer...
Danke, dass Du Dich damit befasst! Bisher ist es so, dass eine State Machine nach einer Übertragung den aktuellen SPI deaktiviert und den nächsten aktiviert. Diese State Machine würde ich gerne nutzen um das " Zur Laufzeit konfigurierbarer SPI Master"-Modul mit neuen Werten zu füttern...
Sebastian schrieb: > Diese State Machine würde ich gerne nutzen um das " Zur Laufzeit > konfigurierbarer SPI Master"-Modul mit neuen Werten zu füttern... Richtig, so mache ich das auch... Und wie gesagt: der erste Schritt ist, die Generics in Ports umzuwandeln, damit du darüber Parameter in Hardware übergeben kannst.
Lothar Miller schrieb > ...der erste Schritt ist, die Generics in Ports > umzuwandeln, damit du darüber Parameter in Hardware übergeben kannst. Damit im FPGA aber klar ist wieviele Ressourcen benötigt werden ist es demnach notwendig, den "größten" notwendigen SPI ins Design zu nehmen und diesen dann zur Laufzeit "abzuspecken". Eigentlich stelle ich mir das nicht so kompliziert vor - "einfach" ein SPI mit 32 Bits beschreiben und wenn nur 16 benötigt werden, dann soll der halt nur bis 16 Zählen und dann die Klappe halten :) Nur mit der zu sendenden und empfangenen Wortbreite habe ich noch Schwierigkeiten, denn die wird ja weiterhin 32 Bit breit sein und dort greife ich dann nur die untersten 16 ab, wenn ich nur auf 16 Zähle - soweit klar. Nur wie mache ich das dynamisch, dass ich nicht vorher die Wortbreite wissen muss. Da hängt es gerade bisschen. Grüße
Sebastian schrieb: > Nur wie mache ich das dynamisch, dass ich nicht vorher die > Wortbreite wissen muss. Da hängt es gerade bisschen. Natürlich mußt du vor dem Senden wissen, wieviele Bits du zu senden hast. Deine Controller FSM, die ja auch die Daten breitstellt und abholt, muß deinem SPI dann also gleichzeitig sagen, wiviele Bits zu versenden sind. und der Rest ist nur eine entsprechende Berechnung des Index für deinen Multiplexer.
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.