Forum: FPGA, VHDL & Co. warum funktioniert der Code nicht?


von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Tag ihr,
ich will mich momentan in VHDL einarbeiten. Ein Altera Cyclone II-Board 
incl. Mikrocontroller ist bereits in Arbeit.
Nun habe ich mich an die ersten VHDL-Experimente gewagt. Ein paar 
popelige Gatter bauen klappt ganz wunderbar, aber sobald Flipflops ins 
Spiel kommen wirds schwieriger. Die simple Frage, die ich nun habe ist 
folgende: Warum funktioniert der Code im Anhang nicht? Wenn ich genau 
das selbe mit gewöhnlichen Gattern mache, klappt es. So aber meckert er 
"std_logic is not declared".
Ich hab das ganze in Altium Designer und Quartus II ausprobiert, 
nirgends hats funktioniert. Wenn ich aber anstatt eines D-FFs z.B. ein 
AND-Gatter baue, ist std_logic plötzlich nicht mehr "not declared". Kann 
mir einer weiterhelfen?

übrigens: zum testen hab ich einen Cyclone II EP2C8T144C8N ausgewählt, 
falls das irgend eine Rolle spielen sollte.

von Falk B. (falk)


Lesenswert?

@ Tobias Plüss (hubertus)

>ich will mich momentan in VHDL einarbeiten. Ein Altera Cyclone II-Board
>incl. Mikrocontroller ist bereits in Arbeit.

Willst du das Board selber bauen? Nicht sehr sinnvoll, weder technisch 
noch ökonomisch. Aber aus Spass an der Freud, meinetwegen.

>popelige Gatter bauen klappt ganz wunderbar, aber sobald Flipflops ins
>Spiel kommen wirds schwieriger. Die simple Frage, die ich nun habe ist

Nicht wirklich ;-)

>folgende: Warum funktioniert der Code im Anhang nicht? Wenn ich genau
>das selbe mit gewöhnlichen Gattern mache, klappt es. So aber meckert er
>"std_logic is not declared".

Fang nicht mit den Unsinn mit stdulogic an (mit u), std_logic ist 
vollkommen ausreichend (ohne u).

Und mehrere Entitys in einer Datei kann auch mal fix Probleme machen. 
Also in eigene Dateien verfrachten, die Software kümmert sich schon um 
die Projektstruktur.

Das mit den Attributen zur Pinzuweisung sollte man lassen, mach das 
besser über die Tools.

MFG
Falk

von Tobias P. (hubertus)


Lesenswert?

Hallo Falk,
warum soll ich mein FPGA-Board nicht selber bauen? Ich weiss dass es 
nicht ganz einfach ist und man mindestens 4 Layer braucht. Aber das wäre 
nicht das erste mal... Ausserdem habe ich günstig paar Cyclone II 
bekommen. Ich weiss, die sind nicht hypermodern und alles, aber für den 
Anfang sollte das reichen ;)

> Fang nicht mit den Unsinn mit stdulogic an (mit u), std_logic ist ...

Okay, alles klar. was ist der Unterschied?
Leider hat mir der Altium Designer vorgeschlagen, ich solle besser 
std_ulogic verwenden für den CK. Mit std_logic gings nicht, ebensowenig 
mit bit.

Kann ich die Entities also in verschiedene Dateien splitten, wie in C, 
und danach irgendwie includen? Oder merkt die Software selber, in 
welcher Datei welche Entity ist?

von Falk B. (falk)


Lesenswert?

@ Tobias Plüss (hubertus)

>warum soll ich mein FPGA-Board nicht selber bauen?

Weil du dan u.a. an zwei Fronten kämpfst. Hardware und VHDL.

> Ich weiss dass es
>nicht ganz einfach ist und man mindestens 4 Layer braucht. Aber das wäre

Zwei reichen, wenn es kein BGA ist.

>nicht das erste mal... Ausserdem habe ich günstig paar Cyclone II
>bekommen. Ich weiss, die sind nicht hypermodern und alles, aber für den
>Anfang sollte das reichen ;)

Mehr als genug.

>> Fang nicht mit den Unsinn mit stdulogic an (mit u), std_logic ist ...
>Okay, alles klar. was ist der Unterschied?

Hab ich im Detail nicht im Kopf, praktisch ist er aber unwesentlich.

>Leider hat mir der Altium Designer vorgeschlagen, ich solle besser
>std_ulogic verwenden für den CK. Mit std_logic gings nicht, ebensowenig
>mit bit.

Scheiss tool, die immer schlauer sein wollen. OK, für CLK lassen wir das 
mal gelten, alles andere aber std_logic.

>Kann ich die Entities also in verschiedene Dateien splitten, wie in C,
>und danach irgendwie includen? Oder merkt die Software selber, in
>welcher Datei welche Entity ist?

Merkt die Software selber.

MfG
Falk

von Tobias P. (hubertus)


Lesenswert?

Okay danke erstmal Falk.
habs gleich getestet. Und tatsächlich scheint es zu funktionieren!
herzlichen Dank auch.
Kannst du mir übrigens noch schnell verraten, wie man ein 8fach-D-FF 
machen kann sodass ich dann ein Byte darin speichern kann?

von Falk B. (falk)


Lesenswert?

@  Tobias Plüss (hubertus)

>Kannst du mir übrigens noch schnell verraten, wie man ein 8fach-D-FF
>machen kann sodass ich dann ein Byte darin speichern kann?

Sollte das nicht einfach zu machen sein, wenn du schon ein 1 Bit DFF 
hast?

1
signal my_byte: std_logic_vector(7 downto 0);
2
3
process(clk)
4
begin
5
  if rising_edge(clk) then
6
    my_byte <= data;
7
  end if;
8
end process;

MFg
Falk

von Tobias P. (hubertus)


Lesenswert?

aaaach so macht man das.
Danke Falk, sehr nett.
Ich bastel jetzt noch ein wenig herum, ich will nämlich noch 
Tristate-Triber implementieren (für bidirektionale Pins) und noch ein 
paar andere Sachen.
also dann,
einen schönen Abend wünsche ich allerseits,
Grüsse
  Tobias

von Mathi (Gast)


Lesenswert?

Der Unterschied zwischen std_logic und std_ulogic besteht darin das 
std_ulogic der Basistyp des gesamten std_logic_1164 ist.
Das u bedeutet dabei unresolved. std_logic ist dagegen resolved. Das 
heißt es gibt eine Funktion die den Wert eines Signals s berechnet wenn 
s von mehreren Quellen getrieben wird.
Das geschieht mittels einer zweidimensionalen Tabelle. Findest Du im 
Quelltext zum Package std_logic_1164.
z.B. 
http://tams-www.informatik.uni-hamburg.de/vhdl/packages/ieee_1164/std_logic_1164.vhd

Der Vorteil bei unresolved-Typen ist, das man Fehler in der Simulation 
(angeblich) leichter findet. Nachteil ist das viele Simulatoren auf 
resolved optimiert sind, aber auf unresolved nicht. Das macht sich durch 
eine höhere Simulationsgeschwindigkeit bemerkbar.

von Matthias (Gast)


Lesenswert?

bzgl ulogic hab ich gehört, dass es für sicherheitskritische teile 
gedacht war, wo man nicht über eine fehlerhafte resolution function 
stolpern will. mein chef hat sich in seiner früheren firma ein wenig 
damit beschäftigt und wollte das für teile die hohe anforderungen in der 
mission time haben durchsetzen. das problem laut seinen aussagen ist, 
dass dann code von zulieferern kommt, die alles mit std_logic gemacht 
haben (wie fast jeder vhdl-code den ich bisher gesehen habe) und dann 
muss man für die interfaces erst wieder die datentypen konvertieren, was 
das ganze arbeitsintensiver macht und eine weitere gelegenheit für 
fehler schafft.

insofern eine akademische maßnahme die sich in der realität bei weitem 
nicht durchgesetzt hat.

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.