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
>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.
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.
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.
Ä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).
>Ä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.
Arty S7 XADC Demo https://reference.digilentinc.com/learn/programmable-logic/tutorials/arty-s7-xadc-demo/start https://www.xilinx.com/support/documentation/ip_documentation/xadc_wiz/v3_0/pg091-xadc-wiz.pdf?_ga=2.252776397.592055707.1619989727-55133973.1604735456 RefDesign und Doku. Gruss Holger.
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.
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.
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"
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
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 (-:
Hallo Gustl, vielen Dank für den Tip...ich werde es versuchen...mal schauen wie weit ich kommen werde (-: Merci Mira
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.