Daten von Schnittstelle in einen Speicher schreiben

OP #692748
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
Angehängte Dateien:
#692754
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).
OP #692760
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren