Forum: FPGA, VHDL & Co. Daten von Schnittstelle in einen Speicher schreiben


von G. B. (geri)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich möchte einem FPGA über eine serielle Schnittstelle Parameter
übergeben.
Die Receive-Routine verwaltet dazu ein Flag RxDataAvailabe. Man weiss
damit, dass neue gültige Daten da sind.

Die Routine sollte für diverse Projekte möglichst flexibel sein.

Was haltet ihr von der folgenden Lösung?:

1.) Im FPGA wird ein Speicherbereich Names DataRec definiert (siehe auch
Bild):
reg [7:0] DataRec [0:255];

2.) mittels einer State-Maschine werden die Daten, wenn RxDataAvailable 
gesetzt ist, der RS232 gelesen und in einen Zwischenpuffer (InputBuf) 
geschrieben. Die Daten bestehen aus
Byte StartByte
Byte Datenlänge
Byte Adresse
Byte[20] Data; // maximal 20 Byte lang

3.) Nachdem die Daten vorhanden sind wird der Inhalt von InputBuf nach
DataRec kopiert.

4.) Der Datenzugriff erfolgt im FPGA dann schliesslich z.B über
AdjustValue=DataRec[AdjAddress];

Im ähnlichen Stil könnte man evtl. beim Lesen vorgehen.

Dünkt Euch dieses Konzept praktisch oder würdet ihr anderweitig 
vorgehen?


Vielen Dank für Euer Feedback

Geri

von Tom N. (tom-nachdenk)


Lesenswert?

Klingt für mich so als wenn Du einen Microcontroller im FPGA 
nachbildest, der dann 'klassisch' Daten empfängt die dann der 
Apllikationslogik übergeben werden. Warum nicht eine SPI-Schnittstelle? 
1. Byte Adresse und dann je nach dem Datenbytes hinterher. Je nach dem 
dann Autoinkrement beim Adresszähler falls mehrere Paramater übergeben 
werden.... Dagegen spricht aus meiner Sicht eigentlich nur das Du ggf. 
die Daten vom PC empfangen willst und der kein 'native' SPI hat.
Evtl. definierst Du in dem 1 Byte 1 Bit für Lesen (Daten werden dann 
auch seriell herausgeschoben) und 1 Bit für Autoincrement an/aus je nach 
dem ob weitere Zugriffe dann auf das nächste Byte zugreifen sollen oder 
das gleiche (ggf Doppelbyte für 16 Bit Wörter).

von G. B. (geri)


Lesenswert?

Hallo Tom

Vielen Dank für Deine Rückmeldung. Die RS232 war hier eigentlich nur 
exemplarisch gedacht. Es könnte, wie du sagst auch die SPI, I2C oder 
eine andere Schnittstelle sein.

Fragwürdig ist für mich das Konzept an sich. Irgendwie möchte ich 
Parameter im FPGA setzen und nachdem diese gesetzt sind eine Operation 
ausführen (z.B. eine Temperatur regeln oder einen PWM-Ausgang gemäss 
Vorgabe setzen).

Du hast auch recht, diese Lösung verwende ich beim Mikrocontroller. Sie 
funktioniert dort sehr gut:). Prinzipiell müsste das Konzept auch beim 
FPGA funktionieren. ..ob es aber vielleicht eine professionellere Lösung 
gäbe..:)?

Ach ja, das CMD-Byte wäre hier eigentlich nicht erforderlich. Vielleicht 
aber in der Zukunft praktisch:)

Beste Grüsse

Geri

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.