Forum: FPGA, VHDL & Co. Verständnissproblem VHDL


von Michael S. (fendt939)


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

von andz (Gast)


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

von D. I. (Gast)


Lesenswert?

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.

von andz (Gast)


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...

von Daniel (Gast)


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?

von Michael S. (fendt939)


Lesenswert?

Daniel schrieb:
> Warum
>
> also wieder in einen Schaltplan konvertieren?


weil das mein prof halt leider will:-(

von Daniel (Gast)


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.

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


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.

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.