Habe gerade mal probiert einen 8bit VA in VHDL zu entwerfen.
ENTITY VA IS
... (einfachen 1bit VA)
END VA;
ARCHITECTURE VA_VERH OF VA IS
... (einfachen 1bit VA)
END VA_VERH;
ENTITY 8bit_VA IS
PORT(a,b : IN std_logic_vector(7 DOWNTO 0);
sum : OUT std_logic_vector(7 DOWNTO 0);
carry : OUT std_logic);
END 8bit_VA;
ARCHITECTURE 8bit_VA_VERH OF 8bit_VA IS
SIGNAL carry0, carry1, ... , carry6 : std_logic;
COMPONENT VA
PORT((wie oben));
END COMPONENT;
BEGIN
fa_0 : VA
PORTMAP(a(0), b(0), OPEN, sum(0), carry0);
fa_1 : VA
PORTMAP(a(1), b(1), carry0, sum(1), carry1);
...
fa_7 : VA
PORTMAP(a(7), b(7), carry6, sum(7), carry);
END 8bit_VA_VERH;
CONFIGURATION 8bit_VA_conf OF 8bit_VA IS
FOR 8bit_VA_VERH
FOR ALL: VA
USE ENTITY VA
END FOR;
END FOR;
END 8bit_VA_conf;
Habe ich das richtig verstanden?
Oder habe ich hier nur Müll gemacht?
Sieht grob rüber gschaut halbwegs gut aus, nur zwei Dinge
- portmap heißt afair port map, also getrennt ;)
- den ersten carry-Eingang open zu lassen halte ich für gefährlich, gib dem 8-Bit-VA lieber nen carry-Eingang [img]
http://www.fb18.de/gfx/28.gif[/img]
Ich denke, das ist im prinzip richtig. Nur ein paar syntaktische Sachen gehen, glaube ich, anders:
- Die COMPONENT innerhalb der 8Bit_VA_Verh Architecture heisst auch VA, ich weiss nicht, ob das erlaubt ist (weil die
entity schon VA heisst).
- Es muss "PORT MAP" statt "PORTMAP" heissen (Leerzeichen muss
rein). Zumindest wird das in der VHDL-Beschreibung von
TAMS so geschrieben. Vielleicht ist PORTMAP auch möglich.
- Ans Ende der "COMPONENT VA" muss noch "is" stehen (wie bei
einer ENTITY)
- Die Zeile der Configuration die die Entity und Architecture
für die VA component angibt (die mit use entity) muss mit
einem Semikolon enden.
tschüs
Georg
<edit>: war wieder jemand schneller :)</edit>
warum wird folgendes gemacht?
SIGNAL carry0, carry1, … , carry6 : std_logic;
muss man folgendes so machen, oder kann man?
fa_0 : VA
PORTMAP(a(0), b(0), OPEN, sum(0), carry0);
fa_1 : VA
PORTMAP(a(1), b(1), carry0, sum(1), carry1);
…
fa_7 : VA
PORTMAP(a(7), b(7), carry6, sum(7), carry);
sind ein paar dumme frage, weiß ich, aber hab grad voll die vor-prüfung-angst-phase….
warum wird folgendes gemacht?
SIGNAL carry0, carry1, … , carry6 : std_logic;
Um auszurücken, dass der carry-Ausgang von fa_n verbunden werden soll mit dem carry-Eingang von fa_{n+1}. Eine andere möglichkeit sehe ich hier nicht, weil man sonst bei der Ein- und Ausgangsbelegung die Ausgänge vorher definierter fa_i referenzieren müsste (und mir ist nicht bekannt, wie das geht). Daher die Lösung mit den internen Signalen.
muss man folgendes so machen, oder kann man?
Dies ist halt die Strukturbeschreibung eines 8-Bit Volladdierers, der 8 1-Bit-Volladdierer benutzt. Man kann natürlich auch die Gleichungen direkt eingeben, aber das ist evtl. recht aufwendig bzw. der Aufgabenstellung widersprechend.
Ob es allerdings eine andere Möglichkeit gibt, einen 8-Bit-VA aus 8 1-Bit-VA zu beschreiben, weiss ich nicht (siehe oben).
Danke Euch!
Meint ihr ein vergessenes ; oder das mit PORTMAP sind Fehler für die man Punktabzug bekommt? Ich denke für solche Sachen sollte man nur minimalen Abzug bekommen. Oder??
Dieses std_logic macht mich noch verrückt.
Warum kann ich nicht einfach z.B.:
a,b: IN bit_vector(7 DOWNTO 0) verwenden.
Ähnliches wurde auch schon mal im Forum beim 4-1-MUX gefragt. Nur bin ich nicht wirklich schlauer geworden.
Um es kurz zu machen: Wann std_logic, wann bit?
Das ist eine Gute Frage. Habe mal im Internet gesucht. Es gibt manchmal Lösungen mit bit und mit std_logic.
Kann da jemand mehr zu sagen??
Das ist eine Gute Frage. Habe mal im Internet gesucht. Es gibt manchmal Lösungen mit bit und mit std_logic.
Kann da jemand mehr zu sagen??
Tri hatte das ganze schonmal erklärt. Schau mal unter:
http://3773.rapidforum.com/topic=101881105646&search=vhdl
Das habe ich auch gelesen, aber mir hilft das net weiter. Oder zumindest nicht zu diesem Zeitpunkt :D.
Ich will Fakten, Fakten, Fakten wann std_logic verwendet werden MUSS und wann NICHT.
Das habe ich auch gelesen, aber mir hilft das net weiter. Oder zumindest nicht zu diesem Zeitpunkt :D.
Ich will Fakten, Fakten, Fakten wann std_logic verwendet werden MUSS und wann NICHT.
Denke im Zweifelsfall kann ein std_logic wohl nicht schaden!
Herkömmliche Bitoperationen machen mit std_logic wohl wenig Sinn. Denn dann müsste man erstmal definieren, was W XOR X bedeutet. Okay, bitte nicht schlagen, wenn es so eine Definition gibt. Wenn allerdings das Signal durchgeschliffen werden soll, wie bei einem MUX, dann kann std_logic natürlich Sinn machen, damit sich der endgültige Empfänger um die Interpretation der Daten kümmern kann.
So würde ich das jedenfalls benutzen.
Ich glaube so die Standardoperation sind alle auf std_logic definiert. bit/bit_vector sind im Prinzip etwas abstraktere Typen, da gibts nur einsen und nullen. std_logic/std_logic_vector sind "realistische" Typen, bei ihnen sind Fälle vorgesehen wie zwei verbundene Eingänge geben 1 und 0 gelichzeitig oder so. std_logic zu benutzen schadet i.A. nicht