Forum: FPGA, VHDL & Co. Linux zu FPGA Kommunikation mit Zynq


von Wahid W. (wahid)


Lesenswert?

Hi,

ich sitze an einem Projekt wo ich die PL im Zynq für die 
Sensordatenerfassung und Aktuatoren nutze und die PS mit Linux für die 
Verteilung im Netzwerk für ein Kontrollsystem benutze.

Nun sitze ich / wir vor dem folgenden Problem, dass wir nicht genau 
wissen, wie die Werte ausgelesen bzw. gesetzt werden sollen. Nach 
bisheriger Recherche gibt es die folgenden Möglichkeiten:

- UIO
- /dev/mem (memorymapping)
- DMA

Doch habe ich dazu keine "userfreundlichen" Tutorials bzw. 
Dokumentationen gefunden bzw. das Verständnis fehlt mir wohlmöglich, da 
ich erst seit wenigen Wochen mit Linux arbeite.

Meine Vorstellung wäre so, dass wir von allen Sensoren die Daten 
erfassen (z.b. Temperatursensoren, Motorpositionen etc...) und an die PL 
übergeben, sodass man im Linux ein Programm schreiben kann, mit dem z.b. 
aus /dev/Tempsensor/value zugegriffen werden kann und der wert 
ausgelesen wird.

Ich wäre für eure Ratschläge dankbar.

PS: Falls dies die falsche Rubrik sein sollte, lasst es mich wissen.
PPS: Ich habe schon im Zynq und Zedboard Forum einen Thread eröffnet 
aber bisher noch keine Antworten bekommen.
PPPS: Zur Zeit benutzen wir das Zedboard, Zybo und RedPitaya und 
arbeiten mit Vivado 2015.2 auf Linux 14.04 LTS

von Handwerker (Gast)


Lesenswert?

Welches Interface haben die sensoren?

-SPI?
-I2C?
-JESD204?

Wie sind die sensoren im device-Tree (/dev  /proc) eingebunden?


->
Mit diesen Infos nach dem passenden Treiber suchen.


Tipp: Analog devices hat einiges hinsichtlich Linux auf Zynq mit 
treibern für Sensorik:
https://wiki.analog.com/software/linux/docs/iio/iio

von Wahid W. (wahid)


Lesenswert?

Unsere Geräte sind überwiegend Eigenentwicklungen, die wir direkt in der 
PL ansteuern wie z.B. über RS232.

In der PL wird für jedes zu steuerndes Gerät ein IP-Core implementiert, 
welches die Steuerlogik und Kommunikation zum Gerät beinhaltet. Für 
unsere Anbindung an die PS haben wir quasi einen Eingangswert-Port sowie 
Ausgangswert-Port wo jeweils quasi Soll und Ist zustand Übertragen 
werden (sollten).

von Martin O. (ossi-2)


Lesenswert?

Ich hab mal ne kurze Notiz gemacht, wie es beim Red Pitaya geht,
vielleicht hilfts Dir:

Siehe auch:
http://wiki.redpitaya.com/index.php?title=User_Manual#Accessing_FPGA_registers
Siehe auch:
https://github.com/RedPitaya/RedPitaya/blob/master/FPGA/release1/doc/RedPitaya_HDL_memory_map.odt

-----------------------------------------------------------------

C-Seite ARM CPU
Module vom AWG Arbitrary Waveform Generator

  fpga_awg.h
definiert eine C-Datenstruktur zur Kommunikation mit dem FPGA

im Modul
  fpga_awg.c
  int fpga_awg_init(void)
blendet diese Datenstruktur so in den physikalischen Adressraum ein,
dass ein C-Programm die Datenstruktur nutzen kann um über den
"Systembus" aufs FPGA zuzugreifen

Mit
  g_awg_reg->cha_count_wrap     = xyz ;
wird der Wert xyz vom C-Programm aus in die Variable
  cha_count_wrap  // hat offset 8
in der Datenstruktur
  *g_awg_reg
geschrieben
------------------------------------------------------------------------ 
--
FPGA Seite
Datei
   red_pitaya_asg_ch.v

Variable:
   reg   [RSZ+15: 0] set_a_size       ;

Kommunikation mit system-bus
.....
  if (wen) begin // wenn write-enable
         if (addr[19:0]==20'h0)   {set_a_zero, set_a_rst, set_a_once, 
set_a_wrap} <= wdata[ 7: 4] ;
         if (addr[19:0]==20'h0)   {set_b_zero, set_b_rst, set_b_once, 
set_b_wrap} <= wdata[23:20] ;
         if (addr[19:0]==20'h4)   set_a_amp  <= wdata[  0+13: 0] ;
         if (addr[19:0]==20'h4)   set_a_dc   <= wdata[ 16+13:16] ;
         if (addr[19:0]==20'h8)   set_a_size <= wdata[RSZ+15: 0] ; // 
das ist cha_count_wrap auf FPGA
......

von Wahid W. (wahid)


Lesenswert?

danke dir Martin, ich schaue da mal schnell rein

von Wahid W. (wahid)


Lesenswert?

Moin!

ich habe mir das mal vom Redpitaya angeschaut, das ist ja eher eine 
eigene Lösung wie sie es über ein Baremetal-Programm auslesen oder sehe 
ich das falsch?

Gibt es denn überhaupt eine Standardisierte Lösung wie ich auf die PL 
zugreifen kann?

: Bearbeitet durch User
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.