Hallo ich bin gerade dabei VHDL zu lernen. dabei habe ich noch einbischen probleme! wollte mal fragen, ob ihr mir hier helfen könnt und zwar: Frage 1: Ich blicke das mit der Typkonvertierung nicht: z.b. ich habe ein Bitvektor 100001011 und d=3 (integer) gegeben was kommt hier bei dem code raus? entity S is generic(n:integer; d:integer); port (x:in Bitvecotr(n-1 downto 0); y: out integer); end S; architecture behavior of S is function f(x:Bit_vector; d:integer) return integer is variable z: integer range 0 to 2**d-1; variable y: integer; constant n: integer :=x'length; begin y:=0; for i in o to n/d-1 loop z:=CONV_interger (x((i+1)*d-1 downto i*d)); y:=y+Z; end loop return y; end f; begin y<=f(x,d); end behavior; und wieso deklariert der verfasser y zweimal in der function und itomatn der entity?? Frage 2: Automaten bei Automaten verstehe ich nur Bahnhof! Für was sind die übehaupt wie mache ich so ein Automat,??? Frage 3: Gibt es prinzipiell ein Tipp oder Gutes vorgehen, wenn mann ein VHDL code in ein Schaltbild mit Logik bausteinen umzeichnen will wie z.b. das aus frage 1)) bitte helft mir ich habe in 2 wochen klausur und habe noch nicht so den durchblick wie ich haben sollte danke!! gruss michael
Michael S. schrieb: > Frage 1: > und wieso deklariert der verfasser y zweimal in der function und itomatn > der entity?? Weil die Variable y nur in der Funktion gilt, das y der entity wird hier zugewiesen: (könnten prinzipiell auch komplett unterschiedlich heißen, haben nichts miteinander zu tun)
1 | begin y<=f(x,d); |
> Frage 2: > > Automaten bei Automaten verstehe ich nur Bahnhof! > Für was sind die übehaupt wie mache ich so ein Automat,??? Viel spaß in der Prüfung wenn des noch ned weist ;) http://de.wikipedia.org/wiki/Automat_%28Informatik%29 Tipp: überleg dir mal wie der endliche Automat eines CD-Rom Laufwerks (4 Zustände) aussieht, so hab ichs verstanden damals. > Frage 3: > > Gibt es prinzipiell ein Tipp oder Gutes vorgehen, wenn mann ein VHDL > code in ein Schaltbild mit Logik bausteinen umzeichnen will wie z.b. > > das aus frage 1)) Prinzipell top-down, also erst logische blöcke bilden, danach in die Tiefe gehn. üb das erstmal an einfacheren Logikschaltungen und arbeite dich langsam hoch, bis aus Beispiel 1 n Blockschaltbild zeichnen kannst... Viel erfolg bei der Prüfung Gruß Andz
Michael S. schrieb: > bitte helft mir ich habe in 2 wochen klausur und habe noch nicht so den > durchblick wie ich haben sollte danke!! > Feuer Frei! sage ich da nur. Popcorn hol Falk bitte übernehmen sie.
Also beim CD-Rom laufwerk mein ich natürlich die Schublade :) ...also die 4 Zustände "Geschlossen", "Öffnend", "Offen", "Schließend"....Eingänge sind Taster, Endschalter offen, Endschalter geschlossen...
Deine Komillitonen sollten das eigentlich wissen. Warum fragst du bei solchen Problemen nicht auch mal deinen Professor, der wird schließlich dafür bezahlt dir diese Fragen zu beantworten. Ich versuch's mal, aber ich habe Digitaltechnik noch nicht gelernt und gebe keine Garantie. 1) Die beiden y haben nichts miteinander zu tun. 2) Ein Automat besteht aus sequentiellen (Flipflop) und logischen (Gatter --> Zustandsübergangslogik und Ausgangslogik) Teilen. Dabei wechselt der Automat bei jedem Taktsignal seinen Zustand (der Folgezustand kann gleich dem aktuellen Zustand sein). Auch in VHDL werden eigenständige Teile für Logik und Sequenz verwendet. Wenn du keinen Plan hast, was Automaten sind, dann hast du ziemlich viel Zeit der Vorlesung verpennt. 3) Das würde mich als Erstsemestler auch interessieren, aber ich denke, da ist, sofern es wirklich notwendig ist das umzuwandeln, schlichtes logisches Denken angesagt. VHDL wurde doch auch erfunden, um nicht rießige Schaltpläne aus Gattern und Flipflops zeichnen zu müssen? Warum also wieder in einen Schaltplan konvertieren?
Daniel schrieb: > Warum > > also wieder in einen Schaltplan konvertieren? weil das mein prof halt leider will:-(
Michael S. schrieb: > Daniel schrieb: >> Warum >> >> also wieder in einen Schaltplan konvertieren? > > > weil das mein prof halt leider will:-( Naja, dann müsstet ihr ja entweder einen kleinen Leitfaden dazu aufgeschrieben haben, oder es müsste mit einer normalen Portion Hirnschmalz bewältigbar sein. Bist du da nicht etwas spät dran mit solchen Problemen? Bei mir fangen am Freitag die Prüfungen an... Wenn ich jetzt noch keinen blassen Dunst hätte, was Automaten sind (und darum und dessen Grundlagen gings eigentlich von Anfang an bis es mit VHDL angefangen hat), dann würde ich mir echt ernsthaft sorgen. Ich meine, du solltest ja auch Zustandsdiagramme erstellen können und Boolsche Algebra zur Vereinfachung der Zustandsübergangslogik beherrschen. Lauter so nette Sachen, die eigentlich recht einfach sind. Aber man muss sie verstanden haben... Ich weiß gar nicht, warum alle immer Probleme mit DT haben. Zumal Digitaltechnik ohnehin das spaßigste Fach im ersten Semester ist. Ich habe schon vorher µCs programmiert und habe schon meine ersten Schritte mit DT gemacht. Trotzdem und vielleicht auch gerade deswegen waren die Vorlesungen echt interessant und lehrreich.
Michael S. schrieb: > was kommt hier bei dem code raus? > for i in o to n/d-1 loop -- ein kleines Ooooh? > z:=CONV_interger (x((i+1)*d-1 downto i*d)); -- interger? Ein (paar) Syntax-Fehler. > und wieso deklariert der verfasser y zweimal in der function und itomatn > der entity?? Um dich zu verwirren? > Frage 2: > Automaten bei Automaten verstehe ich nur Bahnhof! > Für was sind die übehaupt > wie mache ich so ein Automat,??? Du brauchst Speichergleider, die den aktuellen Zustand festhalten und eine Logik, die bei Bedarf in einen anderen Zustand weiterschaltet. Aber wenn du das bisher einfach verdrängt hast... :-o > Frage 3: > Gibt es prinzipiell ein Tipp oder Gutes vorgehen, wenn mann ein VHDL > code in ein Schaltbild mit Logik bausteinen umzeichnen will wie z.b. > das aus frage 1)) Du nmußt es machen, wie der Synthesizer: ein Muster erkennen... Und dafür passende Schaltungsabschnitte bereithalten. Das im Beispiel 1 sind einfach n/d Stück d Bit breite Addierer, die hintereinander geschaltet sind. Vermutlich wird der Synthesizer hier sogar einen Addierer weniger einsetzen, denn so wie es hier beschrieben ist, muß der erste Addierer den Wert 0 aufaddieren, und das ist unnötig. Man könnte diese Funktion auch so schreiben:
1 | function f(x:Bit_vector; d:integer) return integer is |
2 | variable z: integer range 0 to 2**d-1; |
3 | variable y: integer; |
4 | constant n: integer :=x'length; |
5 | begin
|
6 | y:=CONV_integer (x(d-1 downto 0)); |
7 | for i in 1 to n/d-1 loop |
8 | z:=CONV_integer (x((i+1)*d-1 downto i*d)); |
9 | y:=y+Z; |
10 | end loop |
11 | return y; |
12 | end f; |
Dann sieht man klar, dass eigentlich nur n/d-1 Addierer nötig sind.
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.