Forum: FPGA, VHDL & Co. FPGA Lab: modulierbarer Signalgenerator, Universalzähler,.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Werner C. (arvuser)


Lesenswert?

Ich habe mich nun einige Zeit mit dem FPGA-Board aus dem c´t-Lab sowie 
mit VHDL (und LabView) beschäftigt. Dabei ist bisher ein kleines 
Signallabor inklusive LabView-Frontend entstanden:

- Frequenz-/Periodenmesser
- 4-kanaliger modulierbarer DDS-Signalgenerator
- Pulsgenerator mit getrennt einstellbaren Puls- und Pausendauern

Alle Komponenten sind in VHDL implementiert. Dabei ist auch eine neue 
adressierbare SPI-Schnittstelle entstanden.

Die detaillierte Beschreibung gibt es als Wiki-Artikel mit dem Titel 
FPGA Lab, der Quellcode steht im SVN-Repository.

Neben diesem Thread hier gibt es auch einen im c´t-Lab-Forum 
(http://thoralt.ehecht.com/phpbb/viewtopic.php?f=25&t=393).

Kritik und Anregungen bitte in einem dieser beiden Threads.

von Werner C. (arvuser)


Lesenswert?

Ich habe nun eine Klassenbibliothek für .NET veröffentlicht, mit der man 
das c´t-Lab und das FPGA-Lab steuern kann.

Eine detaillierte Beschreibung und die Verweise zum Quellcode kann man 
hier einsehen:

http://www.mikrocontroller.net/articles/Ct_Lab_Client_Library

von Werner C. (arvuser)


Lesenswert?

Hallo zusammen,

ich habe jetzt die FPGA-Karte und mein altes Projekt wieder reaktiviert, 
alles funktioniert noch. Die .NET-Bibliothek habe ich auf Mono (eine 
.NET-Umgebung unter Linux) übertragen. Auch das hat nach ein paar 
Änderungen geklappt.

Ich nutze nun Ubuntu 16.04 und MonoDevelop. Die ganzen Unit-Tests habe 
ich etwas modernisiert (sie basieren nun auf SpecsFor). Ich plane 
weiters, das Projekt auf GitHub zu übertragen und endlich auch eine GUI 
zu bauen (mit Gtk#). Zeitlich will ich mich nicht festlegen, ich wollte 
nur bekannt geben, dass das Projekt wieder erwacht.

Die Domain des c´t-Lab-Forum hat sich geändert, der o.g. Link lautet 
daher nun:
http://www.thoralt.de/phpbb/viewtopic.php?f=25&t=393

: Bearbeitet durch User
von Werner C. (arvuser)


Lesenswert?

Ich habe nun zu diesem Projekt neue Wikiseiten angelegt:
https://www.mikrocontroller.net/articles/CtLab_Library
https://www.mikrocontroller.net/articles/CtLab_FPGA_SigLab

Der Quellcode steht nun auf GitHub:
https://github.com/JosiCoder/CtLab/

Mit der Bedienoberfläche habe ich schon angefangen, bis ich da was 
veröffentliche, wird es aber noch etwas dauern.

: Bearbeitet durch User
von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Du hast Zeit bis zum 23.12.! Danach gilt es nicht mehr :-)

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

So, hab mir die Sourcen angesehen: Ohne Dir zu nahetreten zu wollen, 
folgender Kommentar:

- Zuviele Module für so wenig Funktion

- Bei der Phase wird abgesägt, statt interpoliert ?

- Ich finde es verdächtig, dass Du 50Mhz UND 100MHz brauchst. Eigentlich 
reicht einer.

von Werner C. (arvuser)


Lesenswert?

Ich nehme an, Du sprichst hier über die VHDL-Module. Ja, ich weiß, da 
habe ich nicht wirklich viel Erfahrung. Ich wollte mir z.B. offenhalten, 
die SPI-Schnittstelle in anderen Projekten wiederverwenden zu können. 
Vielleicht habe ich es mit der Modularisierung tatsächlich übertrieben.

Ich habe aber z.B. sehr darauf geachtet, Taktdomänen sauber zu trennen 
und externe Signale ordentlich einzusynchronisieren. Ob mir das gelungen 
ist?

Wie meinst Du das mit der abgesägten Phase? Ja es stimmt, interpoliert 
habe ich da nichts. Ich habe zumindest versucht, die vier 
Sinusviertelperioden auch wirklich symmetrisch zueinander hinzubekommen, 
wie hier angeregt: 
https://www.mikrocontroller.net/articles/Digitale_Sinusfunktion

Zum Takt: Die FPGA-Karte hat einen externen 50-MHz-Takt, den ich intern 
auf 100 MHz hochsetze. Habe ich da was übersehen?

Weltbester FPGA-Pongo schrieb im Beitrag #4814414:
> So, hab mir die Sourcen angesehen: Ohne Dir zu nahetreten zu wollen,
> folgender Kommentar:
>
> - Zuviele Module für so wenig Funktion
>
> - Bei der Phase wird abgesägt, statt interpoliert ?
>
> - Ich finde es verdächtig, dass Du 50Mhz UND 100MHz brauchst. Eigentlich
> reicht einer.

: Bearbeitet durch User
von Werner C. (arvuser)


Lesenswert?

Ich glaube, ich weiß, was Du mit den beiden Takten meinst: In Main.vhd
reiche ich tatsächlich beide an diverse Komponenten durch (aber je 
Komponente immer nur einen der beiden). Das ist schon so lange her, dass 
ich das gemacht habe. Es könnte doch sein, dass ich bei 100 MHz nicht in 
allen Komponenten die Timings einhalten konnte. Und einen Takt herunter 
zu teilen, dass soll man ja doch gerade nicht machen.

von Michael W. (Gast)


Lesenswert?

Du könntest aus Deiner Entwicklung ein paper machen. Wissenschaftliche 
Veröffentlichungen zu Sinusgeneratoren in FPGAs sind momentan wieder IN:

Hier haben zwei Japaner einen solchen entwickelt und bei IEEE 
präsentiert:

https://www.researchgate.net/publication/269331819_The_flexible_sound_synthesizer_on_an_FPGA

Eignet sich sogar für Musik!

von J. S. (engineer) Benutzerseite


Lesenswert?

Markus W. schrieb:
> Du könntest aus Deiner Entwicklung ein paper machen. Wissenschaftliche
> Veröffentlichungen zu Sinusgeneratoren in FPGAs sind momentan wieder IN:

Ja, es ist immer wieder erstaunlich, was so präsentiert wird. Vor allem, 
daß man sowas im Jahre 2013 immer noch als "neu" verkaufen kann. 
Hochpräzise Sinusgeneratoren (vor allem auch auf FPGA-Basis) gibt es in 
der Industrie in Hülle und Fülle und der Umstand, daß der dort 
Präsentierte sehr genau ist, ist einfach der Tatsache geschuldet, daß 
sie den Cordic genau genug prozessieren, was sich ja beliebig weit 
treiben lässt.

Das Problem von Sinusgeneration in diskreten Systemen bleibt aber das 
der Abtastrate: Sobald man die Frequenz variieren möchte, bekommt man 
einen Bruch in der Phase und die ist auch mit dem CORDIc nicht zu lösen, 
sondern nur über Filterung zu glätten und mit einem entsprechend 
designten analogen Filter ist das aber mit einem zweistufigen DDS-System 
in ähnlicher Weise möglich. Mit dem CORDIC kommt man daher nur scheinbar 
um das Problem der Phasengranularität herum.


> Eignet sich sogar für Musik!

Nicht wirklich! Abgesehen von dem Umstand, daß selbst in der 
eletronischen Musik kein Mensch einen klinisch reinen Sinus benötigt, da 
es den in der Natur nicht gibt und als Grundlage für Synthesizer auch 
kaum taugt, ist das was dort als musikalische Klangkurve präsentiert 
wird, mit ADSR auch komplett überholt. Die dadurch aufgeprägten Verläufe 
der Amplitude verzerren den Sinus und damit die effektiv wahrgenommene 
Frequenz in unnatürlicher Weise und ruinieren infolge der Granularität 
die angebliche Qualität und Präzision der Frequenz wieder.

Das taugt für Musik so gut wie die Synthies der 80er :-)

Von den klinisch reinen Sinussen hat man sich aus mehreren Gründen 
inzwischen auch ziemlich verabscheidet. Die werden nicht mal mehr für 
Modulation eingesetzt.

Und wenn es anders herum darum ginge, die für die Stimmung von 
Musikinstrummenten benötigten exakten Frequenzen zu generieren, sind 12 
parallele 2-Stufen-DDS mit Filterungen wensentlich einfacher, 
zielführender und vor allem rauscharmer zu produzieren.

Und wenn man dazu FPGAs hernimmt und sie RICHTIG auslastet (d.h. nicht 
einfach dumpf parallel instanziiert, sondern geschickt pipelined) dann 
sind da auch mehr, als 100 Generatoren drin :-)

von Werner C. (arvuser)


Lesenswert?

Markus W. schrieb:
> Du könntest aus Deiner Entwicklung ein paper machen. Wissenschaftliche
> Veröffentlichungen zu Sinusgeneratoren in FPGAs sind momentan wieder IN:

Ich habe gar nicht behauptet, irgendwas Neues zu präsentieren. Dass ein 
im Hobbyraum entstandener DDS nicht mit Fertiglösungen mithalten kann, 
ist mir schon klar. Aber dann kann man das Elektronikbasteln auch 
komplett sein lassen.

Ich wollte einfach mit dem c't-Lab sowie mit FPGAs experimentieren, weil 
ich das eben nicht tagtäglich mache. Sich mit einer Technologie vertraut 
zu machen, geht halt am besten über ein eigenes kleines Projekt. Die 
CtLab Library ist vielleicht auch für Leute interessant, die andere 
c't-Lab-Module nutzen als das FPGA-Modul. Sie ist auch deswegen so stark 
gegliedert, damit man sie für andere c't-Lab-Module erweitern kann.

von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

Was man mal gebrauchen könnte, wäre eine breit aufgezogenen Steuerung 
mit genug Ausgängen Analog und Digital. Ich bin momentan dran, mir da 
was aufzubauen, um 256 Kanäle einlesen und steuern zu können. Habe dazu 
in der Bucht fertig verdrahtete Analog-MUX aufgetrieben.

Jetzt brauche Ich nur noch 256 Analoge Ausgänge als Speisung...

von Martin (Gast)


Lesenswert?

Markus W. schrieb:
> Was man mal gebrauchen könnte, wäre eine breit aufgezogenen Steuerung
> mit genug Ausgängen Analog und Digital.
Um beim Thema zu bleiben: c't-Lab mit 8x ADA-IO

> Ich bin momentan dran, mir da
> was aufzubauen, um 256 Kanäle einlesen und steuern zu können.
Die Frage ist doch immer auch: Wie schnell? Welcher Spannungsbereich? 
Galvanisch getrennt?

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.