Verständnissproblem VHDL

#2022684
Lesenswert?

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
Gast #2022709
Lesenswert?

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
Gast #2022715
Lesenswert?

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...
Gast #2022716
Lesenswert?

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?
Gast #2022799
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #2023001
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren