Forum: FPGA, VHDL & Co. Schieberegister als BRAM


von Tim S. (Gast)


Lesenswert?

Ich brauche mal euren rat wie man folgendes am besten in VHDL in einem 
Spartan 6 umsetzt. Ich brauche ein RAM, welches in per Adresse auslesen 
kann aber wie ein Schieberegister beschreiben kann. Hintergrund ist eine 
Lookup Table, die ich per Mikroprozessor zur Laufzeit immer mal wieder 
verändern möchte und per SPI einen Datenstrom in den FPGA gebe, der mir 
dieses Schieberegister beschreiben soll. SPI kommt mir da sehr einfach 
vor. Hat natürlich dann keine Bitfehlererkennung aber das ist erstmal 
egal.

von Gustl (Gast)


Lesenswert?

Dann beschreibe es doch ebenfalls über Adressen. Also klar du schickst 
über SPI die Daten aber die landen dann nacheinander an aufsteigenden 
Adressen. Ich sehe da keinen Grund wieso das ein Schieberegister seien 
muss. Willst du nur Teile der LUT neu updaten über SPI?

von Fpgakuechle K. (Gast)


Angehängte Dateien:

Lesenswert?

Generier dir mit dem Coregenerator einen passenden dual-Port ram siehe 
Anhang.

von Tim S. (Gast)


Lesenswert?

Gustl schrieb:
> Dann beschreibe es doch ebenfalls über Adressen. Also klar du
> schickst
> über SPI die Daten aber die landen dann nacheinander an aufsteigenden
> Adressen. Ich sehe da keinen Grund wieso das ein Schieberegister seien
> muss. Willst du nur Teile der LUT neu updaten über SPI?

Nein ich möchte das ganze LUT updaten in einem Durchgang, aber beliebig 
lesen. Deswegen die Idee mit dem Schieberegister. Alternativ könnte ich 
natürlich per SPI auch Adresse und Daten mitsenden.

von Samuel C. (neoexacun)


Lesenswert?

Tim S. schrieb:
> Alternativ könnte ich natürlich per SPI auch Adresse und Daten mitsenden.

Entweder das, dann bist du flexibler. Oder du fängst einfach am Anfang 
der Übertragung bei Adresse 0 an und zählst mit jedem Wort hoch.

von Tim S. (Gast)


Lesenswert?

Samuel C. schrieb:
> Tim S. schrieb:
>> Alternativ könnte ich natürlich per SPI auch Adresse und Daten mitsenden.
>
> Entweder das, dann bist du flexibler. Oder du fängst einfach am Anfang
> der Übertragung bei Adresse 0 an und zählst mit jedem Wort hoch.

Dann müsste man natürlich noch eine Art timeout einbauen, damit bei 
nicht vollständiger übertragung auch wieder am Anfang hereingeschoben 
wird.

von Jens (Gast)


Lesenswert?

Das soll also genauso wie ein SPI Flash funktionieren, aber eben nicht 
als Flash Speicher, sondern als RAM.
Die gibt es doch mit SPI Interface.
Warum implementierst du das nicht direkt so?
In den Datenblättern der Speicher steht alles drin, wie das funktionert.

Oder übersehe ich da was?

Grüße, Jens

von Tim S. (Gast)


Lesenswert?

Jens schrieb:
> Das soll also genauso wie ein SPI Flash funktionieren, aber eben
> nicht
> als Flash Speicher, sondern als RAM.
> Die gibt es doch mit SPI Interface.
> Warum implementierst du das nicht direkt so?
> In den Datenblättern der Speicher steht alles drin, wie das funktionert.
>
> Oder übersehe ich da was?
>
> Grüße, Jens

Weil ich das im FPGA haben will und nicht als Extra IC auf der Platine, 
die wirklich voll ist.

von Samuel C. (neoexacun)


Lesenswert?

Tim S. schrieb:
> Dann müsste man natürlich noch eine Art timeout einbauen, damit bei
> nicht vollständiger übertragung auch wieder am Anfang hereingeschoben
> wird.

Nicht zwingend nötig. Start und Ende einer Transkation kann man 
beispielsweise auch über Slave Select signalisieren.

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


Lesenswert?

Tim S. schrieb:
> Dann müsste man natürlich noch eine Art timeout einbauen
Lass mich raten: du machst sonst eher Software?

Beim SPI gehört der Slaveselect SS# zum Bus und zeigt mit seiner 
fallenden Flanke an, wann eine Übertragung beginnt.

Und so ein DPRAM zwischen SPI und dem Rest-FPGA bringt auch den Vorteil, 
dass man auf der SPI-Seite eine SCLK-Taktdomäne aufmachen kann und im 
Rest-FPGA ein beliebig anders getaktetes Design haben kann.

: Bearbeitet durch Moderator
von Jens (Gast)


Lesenswert?

Hallo Tim,

ich sprach nicht von einem externen Chip.
Dass du da nichts extra drauf bauen willst ist mir schon klar.
Ich meinte:
Es gibt SPI Flash Chips. Da ist alles beschrieben wie die funktionieren.
Das bildest du im FPGA nach (also das SPI Interface und den Zugriff auf 
die einzelnen Speicherzellen) und anstatt in eine Flash Zelle zu 
schreiben, schreibst du eben in dein internes RAM.

Das sollte doch alle deine Probleme lösen.
Du brauchst dir dann keine Gedanken machen, das Rad neu zu erfinden.

Grüße, Jens

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.