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
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
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.
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?
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.)
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...
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.
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...
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.
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.
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 ;)
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.