Forum: FPGA, VHDL & Co. ForgeFPGA statt CPLD. Ein riesen Erforg für mich, keiner für die Menscheit. ;-)


von Nick (b620ys)


Lesenswert?

Hi!

Ich hatte (mal wieder) so eine Idee ...

Es ging darum, einen Sinus abzutasten und dann den per Software 
auszuwerten. Harmonische, Störungen, Frequenz etc.
Dazu hab ich den ADE9103 ausgewählt (wer kommt jetzt drauf welche Art 
von Sinus das ist?).
Ganz entscheident ist, dass der Takt für den ADE9103 exakt die 
geforderten 16.384 MHz hat. Das wird über einen TCXO realisiert der 
zusätzlich per DAC fein abgestimmt wird *1). Denn in den Datenstrom 
werden Zeitmarker eingefügt die synchron mit der realen Zeit (Unix time) 
sein müssen.
Aus den 16.384 MHz wird ein 1 kHz-Signal abgeleitet das ein uC bekommt 
der somit 1 ms genau die Zeit kennt. Zusätzlich (wenn ich schon dabei 
bin) braucht der uC einen 8 MHz Takt (per PLL aus den 16.384 MHz 
abgeleitet). Und einen Reset.

Mein erster naiver Gedanke war, das per CPLD zu machen. Enttäuschend war 
aber, dass das so riesen Dinger sind. Naja, egal. Ich hab dann versucht 
das per WinCUPL hinzubekommen. Aber mit der Doku konnte ich nichts 
anfangen.
Dumm-dreiste Idee: Ich versuch das mal per ChatGTP. Hahaha! Das war der 
reine Müll! Das ChatGTP hat sich einfach eine Syntax zusammengebastelt. 
Schlüsselwörter die nicht existieren. Nach dem Hinweis, dass das so 
nicht geht, einfach neuer Unsinn und dann wieder neue "innovative" 
Syntax. Nach 2 Stunden hab ich das dann in die Tonne getreten.

Da ich mich ein *wenig* mit Verilog auskenne, dann halt so. Aber die 
FPGAs die ich kannte waren alle zu mächtig und zu groß. Also hab ich 
rumgesucht und von Renesas den SLG47910V gefunden. Nach DaBla-Studium 
hab ich mich entschlossen, dass das der richtige Weg ist. Also das 
Demo-Board bestellt (wurde letztes Jahr verschenkt) und durch den ganzen 
Berg durchgeknabbert. Die Seltsamkeiten von Yosys entdeckt und gelöst 
und ... tataaa! Heute kommen die ersten und erwünschten Signale aus dem 
FPGA!

Einige werden die Nase rümpfen, dass das ja gar kein echter[tm] FPGA ist 
und nix kann. Aber für die Anwendung kann er mehr als genug. Die 
Resourcen-Belegung ist aktuell im Bereich von 1 .. 3%. Der Preis ist mit 
2,50 € überschaubar.

Unangenehm ist lediglich die Programmierung. Entweder im Demoboard das 
OTP programmieren, einlöten und hoffen, oder per uC den Bitstream beim 
Start hochladen. Ein externes Flash das in circuit programmierbar ist 
scheint (meines Wissens nach) nicht zu gehen. Ein Flash geht schon, aber 
in-circuit???
Die Simulation per GTKWave geht leider nicht mehr (ging zu Anfang), das 
steigt mit für mich sinnlosen Fehlermeldungen aus. Na, dann halt mit dem 
Oszi oder mit dem LA.

Also ich bin zufrieden.

Und der ForgeFPGA ist schon die Lösung für ein anderes Projekt für das 
ich mehrere Quadratur-Dekoder bis 50 MHz und SPI brauch (mechanisches 
Messsystem mit 0.5 µm Auflösung).

So, ihr könnt losmeckern!


1) Hab so was ähnliches schon mal gemacht für eine RTC. Die hab ich 
auf 1 Sekunde Abweichung / Monat hinbekommen (das sind dann gut 7 
Stellen Genauigkeit). Genauer lies ich der Chip nicht abstimmen. Das 
ganze wurde per NTP innerhalb weniger Stunden Laufzeit realisiert.

von Rick D. (rickdangerus)


Lesenswert?

Nick schrieb:
> Ganz entscheident ist, dass der Takt für den ADE9103 exakt die
> geforderten 16.384 MHz hat.
Warum will man das?
Nach meiner Erfahrung ist es ein Ding der Unmöglichkeit zwei Taktquellen 
identisch hinzubekommen. Daher wurde ja auch die PLL erfunden, um eine 
Taktquelle auf eine andere zu synchronisieren.

> ... die synchron mit der realen Zeit (Unix time)
> sein müssen.
Hast Du mal qualitativ erfasst, wie genau Deine 'reale' Zeit ist?
Die billigste Methode um an soetwas wie die reale Zeit zu kommen, ist 
der Einsatz eines GPSDO: 
https://de.wikipedia.org/wiki/GPS-synchronisierter_Oszillator

von Nick (b620ys)


Lesenswert?

Rick D. schrieb:

>> Ganz entscheident ist, dass der Takt für den ADE9103 exakt die
>> geforderten 16.384 MHz hat.
> Warum will man das?

Weil 16384 == 2^14 ist. Damit sind die samples synchron mit dem 
Sekundentakt. Und ich will nicht, dass das über die Zeit davondriftet. 
Daher wird DER Takt per NTP immer fein nachgezogen.

> Nach meiner Erfahrung ist es ein Ding der Unmöglichkeit zwei Taktquellen
> identisch hinzubekommen.

Kommt auf as Teilerverhältnis an. Bei den 1 kHz klappt es perfekt. Die 
16.384 MHz sind wohl kein Zufall.

> Daher wurde ja auch die PLL erfunden, um eine
> Taktquelle auf eine andere zu synchronisieren.

Daher nehme ich eine PLL für die 8 MHz Prozessortakt her. Wenn der bissl 
daneben ist, ist es mir egal. Für die Millisekunden im uC verwende ich 
keinen Timer, sondern die 1 kHz.

> Hast Du mal qualitativ erfasst, wie genau Deine 'reale' Zeit ist?

Wie ich geschrieben hab, ja. NTP ist recht genau (je nach Strata). 
Ethernet ist sowieso da, warum also noch GPS (in geschlossenen Räumen, 
mit Antennenkabel)? Kurzzeitige Schwankungen der NTP-Zeit werden auf die 
Dauer gemittelt. Der TCXO wird nur langsam in die richtige Richtung 
gezogen. Über paar Stunden pendelt sich das dann ein. Wie gesagt, hab 
ich schon mal so gemacht. Entscheidend ist, dass es keine Sprünge in der 
Zeit gibt.


> Die billigste Methode um an soetwas wie die reale Zeit zu kommen, ist
> der Einsatz eines GPSDO:
Noch billiger ist ein:
#include "NTP.h"

Stabile lokale Abweichungen kann ich hinnehmen. Ich schau mir die 
Paketlaufzeit an und kann so die Laufzeit vom NTP-Server zum uC 
abschätzen. Wenn ein ping 1 ms dauert (tut er), dann kann ich damit 
leben. Das ist meine Auflösung. Die Sample-Frequenz ist, so meine 
Erfahrung, auf 7 Stellen genau hinzubekommen. Notfalls heize ich den 
Oszillator, auch wenn das dann doppelt gemoppelt ist. Die Heizung mach 
ich aber selber, da brauchts keinen TCXO.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Nick schrieb:
> Weil 16384 == 2^14 ist. Damit sind die samples synchron mit dem
> Sekundentakt.

Sind nicht alle ganzzahligen Samplerates synchron zum Sekundentakt? So 
wie z.B. 24 MHz?

von Nick (b620ys)


Lesenswert?

Niklas G. schrieb:

> Sind nicht alle ganzzahligen Samplerates synchron zum Sekundentakt? So
> wie z.B. 24 MHz?

Der ADC ADE9103 macht mit den 16.384 MHz 32768 (oder 16k, 8k, ..., je 
nach Auflösung) samples / Sekunde. Und die 16.384 MHz für den ADC sind 
nicht beliebig wählbar. Lt. DaBla geht das von 15.84 MHz bis 16.547 MHz.
Also 500 (1000, 2000, ...) Takte pro Sample. Um synchron mit dem 
Sekundentakt zu bleiben (das macht die Auswertung einfacher) müssen es 
also zumindest Vielfache von 500 (1000, 2000, ...) sein.

Aber im Prinzip hast Du Recht.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Nick schrieb:

> Ich hatte (mal wieder) so eine Idee ...
[...]

Irgendwie ziemlicher Unsinn. Was soll der FPGA hier (egal ob nun "echt" 
oder nicht)?

Wenn sowieso ein µC involviert ist, kann man den doch gleich aus der 
16.384MHz-Quelle mitversorgen und hat schon fertig.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ich hab die Essenz des Ganzen Blahs mal rausgezogen:

Der SLG47910V ist ein kleiner schnuckeliger und günstiger FPGA der wohl 
auch von yosys unterstützt wird.

Sieht nicht ganz uninteressant aus!

edit: Solche Stories wie deine erzähle ich jetzt immer einer KI, weil es 
sonst niemanden interessiert^^ 😂

: 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.