Forum: FPGA, VHDL & Co. ARTY S7 Board, AD-Wandler,FPGA SPARTAN


von Terminus T. (mia2021)


Lesenswert?

Hallo,

vorab, ich bin was FPGAs angeht eine Anfängerin und möchte mit dem ARTY 
S7 Board arbeiten.

Es soll ein von außenkommendes Signal am AD-Wandler eingelesen werden, 
um es dann in das FPGA SPARTAN 7 (XC7S50-1CSGA324C) zu übertragen.
Das übertragene Signal an das FPGA soll dann ausgewertet werden.


Mit der Hardwaresprache VHDL (VIVADO) habe ich mich auseinandergesetzt.

Weil ich das zum ersten mal praktisch angehe, fehlen mir die Ansätze wie 
ich da vorgehen soll.

Habt ihr Ideen für die Herangehensweise ?

Viele Grüße

Mira

von chris_ (Gast)


Lesenswert?

>Weil ich das zum ersten mal praktisch angehe, fehlen mir die Ansätze wie
>ich da vorgehen soll.

Das einfachste ist, ein Beispielprojekt zu suchen, bei dem das schon mal 
gemacht wurde. Für die MAX10 FPGAs gibt es dazu einige, beim Artix weiß 
ich es nicht.

von Gustl B. (gustl_b)


Lesenswert?

Terminus T. schrieb:
> außenkommendes Signal

Welcher Spannungsbereich, welcher Frequenzbereich?

Terminus T. schrieb:
> AD-Wandler

Das Board hat nur den AD-Wandler des FPGAs, den XADC. Guck dir an wie 
der funktioniert.

Terminus T. schrieb:
> um es dann in das FPGA SPARTAN 7 (XC7S50-1CSGA324C) zu übertragen

Da der ADC im FPGA ist muss da nix übertragen werden.

Terminus T. schrieb:
> soll dann ausgewertet werden.

Und wie? Also was interessiert dich am Signal?

Was vor allem fehlt ist was dann passieren soll. Soll da was zum PC 
übertragen werden, soll eine LED blinken, ... wozu die Auswertung wenn 
dann das Ergebnis nicht verwendet wird?

Terminus T. schrieb:
> Mit der Hardwaresprache VHDL

Das ist gut.

Terminus T. schrieb:
> Habt ihr Ideen für die Herangehensweise ?

Das hängt sehr davon ab was du lernen möchtest und ob du etwas lernen 
möchtest.
Das Projekt ist schnell mit XADC, Microblaze und UART zusammengeklickt. 
Dann schreibst du noch Code für den Microblaze. Geht schnell, aber über 
FPGAs und VHDL hast du dann quasi nichts gelernt.
Was du auch machen kannst, ist das alles selber in VHDL zu schreiben. 
Den XADC kann man bequem über den DRP ansteuern, dann bekommt man die 
Daten der Abtastwerte. Die wertest du dann mit einer VHDL Beschreibung 
aus und dann geht es ebenfalls weiter in VHDL. Die Lernkurve ist 
steiler, dauert länger, aber du lernst mehr. Vor allem lernst du dann 
auch die Simulation zu nutzen und eher in Hardware zu denken.

Wenn es dir nur drum geht ein Signal zu erfassen und auszuwerten, dann 
stellt sich sonst die Frage wieso da ein FPGA gebraucht wird. Das macht 
nur Sinn wenn du diesbezüglich was lernen willst oder einen schnellen 
oder viele ADCs brauchst.

von Holger (Gast)


Lesenswert?

Terminus T. schrieb:
> Habt ihr Ideen für die Herangehensweise ?

ADC Register:
https://slidetodoc.com/module-6-analogue-digital-converter-c-28-x/

ADC Sequencer:
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-10/archives/ug-m10-adc-16.1.pdf
ADC Sequencer . Start  wait ... Stop ....get_result...
VHDL Code ....
https://www.embeddedrelated.com/showarticle/89.php

How to Create ADC Design in MAX 10 Device Using Qsys Tool

Gruss Holger.

von Gustl B. (-gb-)


Lesenswert?

Ähm ... es geht hier um ein Board mit Xilinx FPGA und dieser hat einen 
ADC eingebaut, den XADC. Den kann man bequem über AXI verbinden oder 
sehr einfach über DRP. DRP ist die einfachste Lösung wenn man kein 
Blockdesign oder sonstiges AXI im System hat. Schön ist auch, dass der 
XADC Wizard gleich ein Signal für die Simulation erzeugt.

Und so geht das, Ausschnitt:
1
signal drdy_xadc: std_logic:='0';
2
signal eoc_xadc: std_logic:='0';
3
signal do_xadc: std_logic_vector(15 downto 0):=(others => '0'); 
4
 
5
begin
6
7
inst_xadc : xadc_wiz_0 port map(
8
    daddr_in  => "0010011", -- Der Kanal der erfasst werden soll[1]
9
    den_in  => eoc_xadc,
10
    di_in  => (others => '0'),
11
    dwe_in  => '0',
12
    do_out  => do_xadc, -- Daten, (Abtastwert sind die 12 MSBs davon)
13
    drdy_out  => drdy_xadc, -- wird verwendet um Daten zu erfassen
14
    dclk_in  => clk,
15
    vauxp3  => xadc_vauxp3,
16
    vauxn3  => xadc_vauxn3,
17
    busy_out  => open,
18
    channel_out  => open, --channel_xadc
19
    eoc_out  => eoc_xadc,
20
    eos_out  => open,
21
    alarm_out  => open,
22
    vp_in  => xadc_p,
23
    vn_in  => xadc_n);

[1] Der Wert ist die Adresse, und zwar 
https://www.xilinx.com/support/documentation/user_guides/ug480_7Series_XADC.pdf 
Seite 38.
Binär "0010000" (dezimal 16) steht für VAUXP(0)/VAUXN(0)
...
Binär "0011111" (dezimal 31) steht für VAUXP(15)/VAUXN(15).

von chris_ (Gast)


Lesenswert?

>Ähm ... es geht hier um ein Board mit Xilinx FPGA und dieser hat einen
>ADC eingebaut,

Wobei ich aber nicht sicher wäre, ob Sie den verwenden soll. Ich weiß 
von einem Hochschulpraktikum, die das Artixboard mit externem AD-Wandler 
verwenden, damit die Studenten den Umgang mit Schnittstellen lernen.

von Holger (Gast)


Lesenswert?


von Michael W. (Gast)


Lesenswert?

Der XADC ist sehr langsam und ungenau. Den kann man höchstens für 
Spannungs- und Temperatur-Überwachungen einsetzen. Das ARTY hat aber 
eine Reihe von PMOD-Eingängen, an die gute Wandler angeflascht werden 
können. Es gibt z.B. einen 4-Kanal ADC Input bis 1 MHz, sowie PMODs mit 
I2C-interface. An dieses können sehr viele externe Wandler-Chips 
angeschlossen werden.

von Gustl B. (gustl_b)


Lesenswert?

Markus W. schrieb:
> Der XADC ist sehr langsam

Markus W. schrieb:
> Es gibt z.B. einen 4-Kanal ADC Input bis 1 MHz

Der XADC kann ebenfalls 1 MHz. Der kann auch differentielle Eingänge, 
ich finde den durchaus brauchbar. Aber ja, über die PMODs kann man 
bessere ADCs anschließen.

von IQ130+ (Gast)


Lesenswert?

Holger schrieb:
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-10/archives/ug-m10-adc-16.1.pdf
> ADC Sequencer . Start  wait ... Stop ....get_result...
> VHDL Code ....
> https://www.embeddedrelated.com/showarticle/89.php
>
> How to Create ADC Design in MAX 10 Device Using Qsys Tool

Das ist intel/Altera hier geht es um Xilinx Artix da ist Qsys 
prinzipbedingt völlig unbrauchbar.

>Es gibt z.B. einen 4-Kanal ADC Input bis 1 MHz, sowie PMODs mit
I2C-interface.

Der ist nicht zuletzt wegen dem langsamen I2C nicht besser als die 
internen XADC (ebenfalls ein MS/sec). Wenn was externes sucht dann 
sollte man nach minimum 8bit 50 MSps über LVDS schauen. dazu braucht es 
einen FPGA, das langsame I2C/SPI transferiere kann auch ein µC.

Siehe auch:
Beitrag "FPGA Oszilloskop mit VGA Ausgang"
Beitrag "Open Source Oszi"

von Terminus T. (mia2021)


Lesenswert?

Hallo Gustl,

erstmal vielen Dank an euch allen.
Eure Tips haben mir sehr geholfen.

Die Lernkurve ist steil :-) sowie ihr das gesagt habt.
Dennoch vergeht mir nicht der Spaß weiter zu machen.

Ich habe bisher viel Lesen und recherchieren müssen und möchte euch über 
meinen kleinen Erfolg erzählen, was ich bisher gelernt habe.

1.) Zum kennenlernen des Boards habe ich mit den LEDs gearbeitet.
Konnte die LEDs zum blinken bringen (verschiedene Lauflichtmuster).

2.) Das Referenzschaltbild studiert.

3.) Nach der synthese in VIVADO konnte ich die I/O Ports der jeweiligen 
Banken anschauen, um ein besseres Verständnis zu erhalten.


4.) Im Internet habe ich ein Basisdesign gefunden auf welches ich dann 
mein Projekt aufgebaut habe. Ich konnte den XADC instanzieren und 
analoge Spannungswerte mittels der Analog Stimulus File einlesen 
(simulieren) und in digitale Signale konvertieren.
Interface Options habe ich den DRP gewählt.


Ich möchte als nächstes die konvertierten digitalen Signale zur 
Weiterverarbeitung exportieren. Am liebsten in eine CSV-Datei.

Hättet ihr für mich Tips, wie ich da vorgehen soll ?


Viele Grüße

Mira

von Gustl B. (gustl_b)


Lesenswert?

CSV geht schlecht im FPGA. Also wäre der Weg die Daten vom FPGA zum PC 
zu übertragen. Das geht recht einfach mit dem UART. Das ist auch ein 
lehrreiches Beispiel den selber zu schreiben. Und dann am PC kannst die 
Daten mit einem Terminalprogramm wie Realterm oder Cutecom einfach 
empfangen und als Text oder sonst was speichern.
Aber übertrage da bitte keine Asci strings über UART sondern nackte 
Abtastwerte und vielleicht noch Zeitstempel. Wenn du am Ende irgendwie 
schön formatierten Text haben willst dann mach das am PC, Python ist da 
sehr hilfreich.

Alles Gute alles Liebe (-:

von Terminus T. (mia2021)


Lesenswert?

Hallo Gustl,

vielen Dank für den Tip...ich werde es versuchen...mal schauen wie weit 
ich kommen werde (-:

Merci

Mira

von Gustl B. (gustl_b)


Lesenswert?

Stell gerne Fragen.
Und überlege dir wie schnell du abtasten willst. Wenn du das volle 1 
MSample/s nimmst dann passt das nicht durch den UART. Also nicht als 
Streaming. Hängt aber auch von deiner UART Baudrate ab. Dein Board kann 
12 MBd.

Du kannst dir also ausrechnen was durch den UART als streaming durchgeht 
und das oder weniger senden. Oder du nimmst RAM im FPGA als 
Zwischenspeicher. Also RAM füllen mit hoher Abtastrate, dann zum PC 
schicken und wieder RAM füllen.

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.