Forum: FPGA, VHDL & Co. ADC_im_VHDL_implementieren


von Good P. (good_p)


Lesenswert?

Guten Tag Zusammen

Hardware:
- TCRT1000 (Reflective Optical Sensor with Transistor Output)
- Zync7000 (FPGA)
- ADC128S102

Eine theoretische Trage an die Erfahrenen.
Aktuell wird ein Externer ADC Konverter verwendet um den Analogen 
Ausgang von dem Sensor zu wandeln.
Um das externe Bauteil zu sparen war eine Überlegung den ADC im FPGA zu 
integrieren.

Nun meine Fragen:
1) Ist es möglich Analoge Signale in einen FPGA zu geben?
2) Ist es möglich einen ADC mit ausreichender Auflösung und 
Zeitverhalten
   im FPGA zu realisieren?

Dies ist für eine Vertiefungsarbeit. Wenn dies möglich währe, wäre es 
ein genialer pluspunkt.

Hat jemand Erfahrung hier ob dies möglich ist oder ist es besser einen 
externen ADC zu verwenden und die Finger hiervon zu lassen?

von Helmut -. (dc3yc)


Lesenswert?

Was sagt das Data Sheet des FPGA dazu? Ist da ein ADC implementiert oder 
zumindest ein Komparator? Wenn nein, dann nein.

von Mann Fred (Gast)


Lesenswert?

Good P. schrieb:
> Ist es möglich Analoge Signale in einen FPGA zu geben?

Zumindest der Zynq und einige Xilinx-Bausteine haben einen internen ADC 
mit mind 200kHz und 16 mehreren Kanälen. Alles andere an 
Analog-Digitalwandlung muss man manuell machen. (Also 
Sigma-Delta-Wandler, dual slope und solche Sachen).

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Good P. schrieb:
> Ist es möglich Analoge Signale in einen FPGA zu geben?
Ja. Und solange die analoge Spannung im erlaubten Bereich bleibt, geht 
das FPGA nicht kaputt.

> Ist es möglich einen ADC mit ausreichender Auflösung und Zeitverhalten
> im FPGA zu realisieren?
Wenn du "ausreichend" ausreichend niedrig ansetzt.

Und für genau so einen analogen Optokoppler könnte ich mir da eine 
einfache RC-Schaltung als Analog-Digital Wandlung vorstellen. Dafür 
würde ein einfacher digitaler IO-Pin reichen.

von Good P. (good_p)


Lesenswert?

Besten Dank, eure Antworten haben mir gut weitergeholfen.

von N. M. (mani)


Lesenswert?

Manche FPGAs haben richtige interne ADCs. Da musst du das Datenblatt 
deines FPGA konsultieren.

Wenn die Ansprüche bzgl. Genauigkeit und Abtastrate nicht so hoch sind 
reichen auch 2 LVDS Pins und ein Tiefpass um einen Pseudo ADC 
aufzubauen.

von Gustl B. (gustl_b)


Lesenswert?

Man kann das schon ohne echten ADC bauen, aber man braucht externe 
Bauteile und muss vermutlich auch kalibrieren.

Man könnte ein RC Glied über einen IO aufladen und dann die Zeit 
zählen/messen wie lange es dauert bis die Spannung die am pseudo ADC 
Eingang trifft.

Es gibt da schon einige Implementierungen aber wie schnell und genau 
weiß ich nicht.

von N. M. (mani)


Lesenswert?

Gustl B. schrieb:
> Man könnte ein RC Glied über einen IO aufladen und dann die Zeit
> zählen/messen wie lange es dauert bis die Spannung die am pseudo ADC
> Eingang trifft.
> Es gibt da schon einige Implementierungen aber wie schnell und genau
> weiß ich nicht.

Das wäre die eine Möglichkeit die ich meinte.
Die Andere basiert auf dem Delta Sigma Prinzip.
Bei Lattice und anderen findet man da Papers dazu.

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> und muss vermutlich auch kalibrieren.
>
> Man könnte ein RC Glied über einen IO aufladen
da musst du aber noch mehr kalibrieren :-)

Ich würde einen DAC mit den LVDS-Eingängen nehmen:

Die Eingangsspannung mit einem R/R auf 200 ... 300mV absenken, diesen 
auf einige kOhm dimensionieren und diesen Punkt über ebenfalls einige 
kOhm an den Ausgang eines Tiefpassfilters (RC) hängen und auf diesen mit 
einem 3. Pin PDM-Rauschen draufgeben. weiss für Messignale, rosa für 
Audio.
Dann eintakten und filtern / das ebenso gefiltere Rauschen abziehen. 
Damit sind bis zu 12Bit x 50kHz drin, wenn man es richtig macht. Stumpf 
gefiltert 10Bit, 20kHz, reicht für Audio-to-MIDI-Conversion.

Den LVDS-Komparator kann man auch noch offset-kalibieren, wenn man das 
Eingangssignal nullt und lange filtert, oder weis, dass der Eingang 
langfristig DC-frei ist, wie eben bei Audio.

von N. M. (mani)


Lesenswert?


von DSGV-Violator (Gast)


Angehängte Dateien:

Lesenswert?

Bei Xilinx resp. AMD heisst der integrierte ADC system monitor resp. 
XADC.

https://www.xilinx.com/products/technology/analog-mixed-signal.html

Kurz:

* 1 MSps total
* auslesbar über JTAG deshalb für board/FPGA inbetriebnahme mit 
chipscope o.ä geeignet
* einige externe und einige fest verdrahtetet interne Kanäle 
(Die-Temperatur, Voltage an Versorgung/IO-Rails


https://www.xilinx.com/products/technology/analog-mixed-signal.html

https://www.kampis-elektroecke.de/fpga/zynq/xadc/

von Mann Fred (Gast)


Lesenswert?

DSGV-Violator schrieb:
> AMD heisst der integrierte ADC system monitor resp.
> XADC.
Den meinte ich in meinem Beitrag oben. Wie ich gerade lese, hat der 
WAndler im Ultrascale weniger Abtastrate und auch 2 Bit weniger 
Auflösung.

Der Ultrascale ist doch der bessere Chip?

von Gustl B. (gustl_b)


Lesenswert?

Nun, wozu denn die vielen Bits und die Abtastrate?

In den meisten Projekten wird der nur als Systemmonitor verwendet und da 
braucht man nicht schnell und hochauflösend. Xilinx/AMD sieht das so und 
hat das auch umbenannt in Sysmone1 bzw. Sysmone4.

Vermutlich gibt es nur wenige Kunden die höhere Anforderungen haben und 
dann nehmen die wohl auch lieber externe ADCs. Da bekommt man für wenig 
Geld noch mehr Bits, noch schneller und rauschärmer. Klar, kostet dann 
ein paar wenige FPGA IOs, aber das ist es wohl wert.

von Mann Fred (Gast)


Lesenswert?

Gustl B. schrieb:
> Klar, kostet dann
> ein paar wenige FPGA IOs,

und Platz

von Gustl B. (gustl_b)


Lesenswert?

Ja sicher, das wird der entscheidende Grund sein. Guck mal nach ADCs die 
grob das können was auch der XADC kann, also 12 Bits und 1 MSample/s. 
Die gibt es in sehr klein. Und billig.

Ich habe bisher kein FPGA Design gesehen bei dem der XADC zu etwas 
Anderem als Systemmonitor verwendet wurde. Daher verstehe ich auch die 
Entscheidung von AMD den umzubenennen und etwas abzuspecken.

von DSGV-Violator (Gast)


Lesenswert?

Gustl B. schrieb:

> In den meisten Projekten wird der nur als Systemmonitor verwendet und da
> braucht man nicht schnell und hochauflösend. Xilinx/AMD sieht das so und
> hat das auch umbenannt in Sysmone1 bzw. Sysmone4.
>
> Vermutlich gibt es nur wenige Kunden die höhere Anforderungen haben und
> dann nehmen die wohl auch lieber externe ADCs.

Eigentlich erzählt die Geschichte das Ganze andersherum.
Xilinx hat den internen ADC seit Einführung ca. 2005 nie zu was anderen 
als Monitoring IC-/Board-spannungen etc. vorgesehen, für "richtige" 
AD-Wandler, beispielsweise 50++ MSPs/ 12 bit in Ultraschallapplikationen 
(NDT, bildgebende Verfahren Medizintechnik) oder für Bildsensoren und 
Computervision wurden schon immer externe gern von AnalogDevices 
genommen.
Deshalb hat AnalogDevices auch gute Appnotes samt FPGA-Code für die 
passenden Wandler, seit einigen Jahren auch Linux-treiber etc.

https://www.analog.com/en/technical-articles/interfacing-fpgas-to-an-adcs-digital-data-output.html

Als Interface gabs über die Jahre parallel TTL, LVDS und zuletzt JESD204 
(rauf in die Gbit/s).

Schaut man sich die Preise für diese High-End ADWandler an, verbietet es 
sich sofort, sowas als konfigurierbaren Vorrat als FPGA-Block 
einzubauen, erst recht wenn Digital-Konsumenten ohnehin schon 25$ zu 
teuer für einen FPGA-Chip sind.
Abgesehen davon, das die Silizium-IC-Fertigungs-Technologie für 
Analog-Chips und die die für Digital-chips, nicht die selbe ist. 
Insbesonders der yield verschlechtert sich enorm wie Xilinx vor 20 
Jahren beim Virtex-4 und den Gigabit-Transceivern erfahren musste.

Wenn ich mich recht erinner wurde auch der Systemmonitor erst für den 
Virtex-2 oder Virtex-4 angekündigt, viel aber aber dann aus den 
Serienmodllen raus, weil nicht kostengerecht produzierbar.

Schaut man zu Altera, sieht es ähnlich aus, braucht man schneller als 1 
MSps oder genauer nimmt man externe AD-Wandler. Oder gleich einen µC 
weil der ist für eine solche Kleinscheiss-Anwendung wie 
Temperaturauslesen genau richtig und jeder FPGA überdimensioniert ist.


Beispielsweise arrow, analogmax-Serie:
 * https://www.arrow.de/campaigns/arrow-adi-analogmax
 * 
https://www.konstruktion-entwicklung.de/arrow-electronics-datenerfassungsplattform

Beitrag #7484229 wurde vom Autor gelöscht.
von J. S. (engineer) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> In den meisten Projekten wird der nur als Systemmonitor verwendet und da
> braucht man nicht schnell und hochauflösend. Xilinx/AMD sieht das so und
> hat das auch umbenannt in Sysmone1 bzw. Sysmone4.
Die Frage ist, wozu man den umbenennen muss und mit der Steigerung des 
Namens eine Reduzierung der Auflösung verbindet. So richtig logisch ist 
das nicht.

DSGV-Violator schrieb:
> Xilinx hat den internen ADC seit Einführung ca. 2005 nie zu was anderen
> als Monitoring IC-/Board-spannungen etc. vorgesehen,
Sehe ich ebenso und genau dafür ist der ja auch gut. Natürlich auch mit 
10 Bit. Bei praktisch jedem PCB braucht es Überwachung der Spannungen 
und was UC angeht, durchaus auch hochauflösend in der Zeit, um Einbrüche 
zu verfolgen. Da kann der gar nicht genug Kanäle haben.

DSGV-Violator schrieb:
> * auslesbar über JTAG deshalb für board/FPGA inbetriebnahme mit
> chipscope o.ä geeignet
nicht nur, geht auch intern über VHDL / Verilog im FPGA zur internen 
Verarbeitung und Monitoring. Bei vielen sicherheitskritischen 
Anwendungen wird die Überwachung von Spannungen gefordert. Auch bei 
bestimmten Tests ist das ein Thema. Der JTAG-Zugriff ist da nur ein addy 
für die IB.

von Gustl B. (gustl_b)


Lesenswert?

J. S. schrieb:
> mit der Steigerung des Namens eine Reduzierung der Auflösung verbindet.

Also Sysmone1 und Sysmone4 haben gleich viele Bits, aber weniger als der 
XADC wie das Teil bei der 7er Familie heißt.

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.