Forum: FPGA, VHDL & Co. Sägezahngenerator in VHDL


von Bastian D. (Gast)


Lesenswert?

Guten Abend,

ich muss mich für ein Projekt mit einem Sägezahngenerator in VHDL 
beschäftigen. Leider kenne ich mich in diesem Bereich überhaupt nicht 
aus und stoße auf ein paar grundlegende Verständnis Probleme.

Meine Aufgabe ist:

Ich soll eine Schaltung entwickeln, deren Ausgabe einen DA-Converter 
weitergeleitet wird, der dann eine analoge treppenförmige 
Sägezahnfunktion erstellt.

Ich muss dem Converter also nur Werte übergeben und mich nicht darum 
kümmern wie der arbeitet.

Dieser Converter hat 8 je 1 Bit große Eingänge.

Die Schaltung um die ich mich kümmern soll bekommt einen Frequenzbereich 
der zwischen 100-10.000 Hz liegt.
Ich habe eine Grundfrequenz von 2,56 MHz, eine Auflösung von 1 Hz, und 
es gibt einen zusätzlichen Eingang zur Unterscheidung zwischen 
steigender/fallender Sägezahnfunktion.

Soweit so gut.

Ich soll damit jetzt das passende Ausgangssignal welches an den 
DA-Converter weitergeleitet wird erstellen.

Meine erste Vermutung war dass es sich hierbei um die Anzahl der Zähne 
handelt die pro Takt erstellt werden können.
Also 2,56 MHz/ Frequenzbereich.
Damit komme ich zwar bei 10.000 Hz auf 256 was perfekt in die 8 Bit 
passt aber sollte ich andere Werte nehmen lässt sich das Ergebnis nicht 
mehr mit 8 Bit darstellen.

Das ganze soll nur aus VHDL Code (mit entitys, architecturs) bestehen, 
also keine physischen Bauteile.

Ich wäre sehr dankbar wenn mir jemand erklären könnte, was ich hierbei 
missverstehe und wie sich die Angaben der Grundfrequenz, des 
Frequenzbereiches und der Auflösung sich auf die Funktion beziehen.

Grüße,

Basti

von Marco L. (lehmi)


Lesenswert?

Hallo,

das Stichwort, nach dem du mal suchen solltest, ist NCO oder Numeric 
Controlled Oscillator. Da kommt ein Sägezahnförmiger Phasengang raus.

Grüße

von Christian R. (supachris)


Lesenswert?

Für einen Sägezahn brauchts doch nur einen Zähler und ein bisschen 
Steuerlogik drumherum. Und noch einen 2. Zähler, der per Clock Enable 
die Zählfrequenz vorgibt.

von Bastian D. (Gast)


Lesenswert?

Danke das hilft mir schon mal weiter.
Beim NCO stand dann da wird von einem DDS ausgeführt.
Ich versteh den so als würde er den Frequenzbereich den ich als Eingang 
hab (Beispielsweise jetzt mal 10.000 Hz) auf einen Speicher addieren der 
so groß ist wie das Signal das dann an den DA Converter kommt (Bei mir 
dann 8 Bit also 256).
Als Ergebnis würde dann wohl nach dem ersten Takt "16" rauskommen.
256 passt 39 mal in die 10.000 und dann bleiben noch 16 übrig.
Dann wieder 10.000 drauf addieren also dann hätte ich eine 32 dann 48 
usw bis ich wieder nen Überlauf hab.

Sorry ich stell mich bei Dingen mit denen ich noch nie etwas gemacht 
habe immer ziemlich dumm an und kann mir das mit einem konkreten 
Beispiel besser vorstellen.

Weil dann müsste ich ja nur 1 mal ausrechnen was ich nach der ersten 
Addition im Speicherregister stehen hab und dann einen Zähler für jeden 
weiteren Takt der dieses Ergebnis auf addiert. Sollte etwas weniger 
Performancelastig sein als jedesmal meinen Frequenzbereich zu addieren.
Und das Ergebnis gebe ich dann an meinen DA-Converter weiter.

Oder ist mit dem im 2. Beitrag genannten Zähler etwas anderes gemeint?

von P. M. (o-o)


Lesenswert?

Bastian D. schrieb:
> Sorry ich stell mich bei Dingen mit denen ich noch nie etwas gemacht
> habe immer ziemlich dumm an und kann mir das mit einem konkreten
> Beispiel besser vorstellen.

Kannst du dir denn die Geschichte nicht einfach mal ganz 
unvoreingenommen vorstellen? Halt so, wie du es bauen würdest, wenn du 
es brauchen würdest. Ohne den Kontext einer Studiumsaufgabe. (Btw ist 
diese Aufgabe sehr trivial.)

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


Lesenswert?

P. M. schrieb:
> Halt so, wie du es bauen würdest, wenn du es brauchen würdest.
Und zwar mit Hardwarebausteinen: Zähler, Flipflops und Gatter....

> (Btw ist diese Aufgabe sehr trivial.)
Nachdem die ein Frage beantwortet ist, wie die gewünschte Frequenz an 
das zu erstellende Modul übergeben wird.

Bastian D. schrieb:
>>> eine Auflösung von 1 Hz,
Denn ein einfacher Vorteiler von 256 bringt zwar genau 10kHz, aber schon 
bei 9999Hz wird es kritisch. Der nächste Vorteilerwert wäre ja 257 und 
die erzielbare Frequenz daher 9961kHz. Und schon ist eine der 
Forderungen so einfach nicht erreichbar.
Klar wäre dafür am anderen Ende die Auflösung wesentlich besser, weil 
100Hz einen Vorteiler von 25600 brauchen, und mit 25599 nur 4 mHz mehr 
herauskommen (100.0039Hz), aber das bringt ja am "oberen Ende" nichts...

Eine DFS könnte da nur weiterhelfen, wenn die Maximalwerte des 
Sägezahns 0 und 255 nicht unbedingt in jedem Zyklus am Ausgang 
erscheinen müssen. Wenn es also reicht, z.B. bei 9999Hz nur etwas 
"sägezahnähnliches" zu bekommen.

>>> Dieser Converter hat 8 je 1 Bit große Eingänge.
In der Praxis spricht man da von einem 8 Bit breiten Bus. Und von einem 
8-Bit DA-Wandler...

von Bastian D. (Gast)


Lesenswert?

P. M. schrieb:
> Kannst du dir denn die Geschichte nicht einfach mal ganz
> unvoreingenommen vorstellen? Halt so, wie du es bauen würdest, wenn du
> es brauchen würdest. Ohne den Kontext einer Studiumsaufgabe. (Btw ist
> diese Aufgabe sehr trivial.)

Nun ja ich wüsste nicht wofür ICH das jetzt brauchen würde ;)
Diese Aufgabe mag sicher für viele trivial erscheinen aber für jemanden 
der von sowas noch nie gehört hat ist das nicht ganz klar.


Lothar Miller schrieb:
> Eine DFS könnte da nur weiterhelfen, wenn die Maximalwerte des
> Sägezahns 0 und 255 nicht unbedingt in jedem Zyklus am Ausgang
> erscheinen müssen. Wenn es also reicht, z.B. bei 9999Hz nur etwas
> "sägezahnähnliches" zu bekommen.

Also heißt das im Klartext ich scher mich nicht um die Genauigkeit und 
lasse zu das in den meisten Fällen nur einen Annäherung auskommt?

War denn dann meine Idee in meinem 2. Beitrag so richtig?
Ich sehe grad da dass da die Werte falsch sind ist natürlich 255 aber 
davon abgesehen.

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


Lesenswert?

Bastian D. schrieb:
> Also heißt das im Klartext ich scher mich nicht um die Genauigkeit und
> lasse zu das in den meisten Fällen nur einen Annäherung auskommt?
Hier geht es um die Fälle, die nicht "genau" aufgehen. 9961 Hz wird z.B. 
wieder recht gut gehen, weil da der Teiler 257 ist.
Und bis zu einer bestimmten Frequenz wird es immer funktionieren, dass 
du sowohl den Minimalwert wie auch den Maximalwert erhältst...

von Bastian D. (Gast)


Lesenswert?

Ok danke ich glaube ich habe es jetzt verstanden.

Vielen Dank für die schnelle Hilfe.
Das Thema sollte hiermit dann geschlossen werden können.

von Michael (Gast)


Lesenswert?

Bastian D. schrieb:
> Dieser Converter hat 8 je 1 Bit große Eingänge
seltsame Beschreibung einer Byte-Schnittstelle.???
(wie breit sollten die Bits sonst sein? - die sind immer 1 Bit "gross")

Du hast noch nicht viel mit Digitaltechnik gemacht, was?

Ich fürchte, wenn Dir nicht spontan eine Bausteinlösung und auch die 
mathematische Bescheibung davon in den Kopf kommen, sobald Du due 
Aufgabe siehst, ist die Digitaltechnik nichts für Dich.

Ein Sägezahngenerator ist nichts anderes, als ein Zähler. Je grösser / 
breiter der Zähler, desto feinstufiger und genauer zählt er. Den Zähler 
muss man bei der Ausgabe auf die 8 Bit normieren, um Vooaussteuerung zu 
haben, bzw passend skalieren und verschieben, um die Ausgabe in einem 
bestimmten Bereich zu haben.

von Bastian D. (Gast)


Lesenswert?

Michael schrieb:

> Du hast noch nicht viel mit Digitaltechnik gemacht, was?
>
> Ich fürchte, wenn Dir nicht spontan eine Bausteinlösung und auch die
> mathematische Bescheibung davon in den Kopf kommen, sobald Du due
> Aufgabe siehst, ist die Digitaltechnik nichts für Dich.

Da hast du Recht. Es handelt sich hierbei um ein Projekt was ich von der 
Uni aus bekommen habe und hatte keinerlei Wahlmöglichkeiten und hatte 
gehofft dass ich kein VHDL Thema bekomme. Tja leider Pech gehabt aber 
was solls ich glaub mit eurer Hilfe hab ich das verstanden ;)

von Michael (Gast)


Lesenswert?

Was studierst Du?

Ehrlich gesagt, habe ich solche Lösungen mit 15 aus dem Hut gezogen und 
sie direkt in Assembler in den Computer gehackt oder in Pascal 
geschrieben, ohne, dass wir in der Schule sowas gehabt hätten oder ich 
eine Uni gesehen häbe. Die Sprache ist dabei eigentlich auch egal und 
die Hardware auch. Es ´geht so um das Vorgehen, weisst Du?

Elektronikverständnis kommt dann auch noch obenauf:

Hast Du Dir mal angesehen, wie eine ALU oder ein anderes Rechenwerk in 
einem Rechner funktionieren? Oder wie eine FSM aussieht, wenn sie von 
einer HW gemacht wird oder per SW emuliert wird oder wenn sie abtrakt in 
VHDL geschrieben wird?

Die Zusammenhänge musst Du mehr oder weniger ohne Hilfe oder Lernen 
direkt sehen, sonst ist nix mit Studium.

Meine Erkenntnisgrenze war damals die Vorstellung, wie eine CPU 
multithreading beherrschen kann und dabei organisiert sein muss, damit 
sie sich nicht vertut. Das hab ich erst voll kapiert und hätte es auch 
bauen können, nachdem ich es im Studium hatte.

von Bastian D. (Gast)


Lesenswert?

Ich studiere Informatik mit Nebenfach Mathe und spezialisiere mich auf 
Software.
Alles was mit Hardware zu tun hatte konnte ich soweit, dass es für die 
Klausur gereicht hat aber interessiert habe ich mich dafür nicht.
Ich brauche es auch nie wieder in meinem Studium und habe nicht vor es 
zu meinem Beruf zu machen und hatte Dinge die mir wichtiger waren auf 
die ich mich dann eher konzentriert habe.
Selbstverständlich weiß ich wie ein Rechner arbeitet, wie seine 
Kernbauteile aufgebaut sind, und wieso sie tun was sie tun. Aber nur in 
der Theorie.

von the last commentator (Gast)


Lesenswert?

Die Antwort :

Bastian D. schrieb:
> Selbstverständlich weiß ich wie ein Rechner arbeitet

auf diese Frage:

Michael schrieb:
> Hast Du Dir mal angesehen, wie eine ALU oder ein anderes Rechenwerk in
> einem Rechner funktionieren?

zeigt das Problem: Du hast keine Idee, was eine Alu ist und wie sie 
arbeitet, dass es sich um eine befehlsgesteuerte Architektur handelt, 
die sich Befehle holt, sie ausführt, Daten aus Registern und RAMs holt 
und wieder speichert.

Bastian D. schrieb:
> Ich studiere Informatik mit Nebenfach Mathe und spezialisiere mich auf
> Software.
Man könnte jetzt sagen, ok, dann braucht er keine Hardware. Ja.

Aber: Ein Informatiker sollte auch einen Ablauf eines sich langsam 
erhöhenden Zählers verstehen und sich dann die paar C-Befehle holen, das 
zu formulieren. DAzu muss ich nur wissen, welche HW zur Verfügung steht. 
(Mikrocontroller, CPU oder was auch immer).

Dasselbe geht auch bei den VHDL Befehlen: Hardware studieren und dann 
die Befehle finden.

Die meisten Studies, die ich kenne, haben sich VHDL selber begebracht. 
Selbst die Physiker kriegen das hin.

Ich wünsche Dir viel Glück.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

the last commentator schrieb:
> Die meisten Studies, die ich kenne, haben sich VHDL selber begebracht.
>
> Selbst die Physiker kriegen das hin.

und so sieht der code dann meist auch aus: "selber beigebracht"!

Bastian D. schrieb:
> Dann wieder 10.000 drauf addieren also dann hätte ich eine 32 dann 48
>
> usw bis ich wieder nen Überlauf hab.

Du brauchst nur einen gross genug dimensionierten Akku

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.