Forum: FPGA, VHDL & Co. Signal mit Verctor verknüpfen und links schieben.


von Knufi (Gast)


Lesenswert?

Ich habe Problem ein Eingangssignal in ein Verctor reinzuschieben.
Versucht habe ich Folgendes:

sig_dataframe <= sig_dataframe_op(0) & mdata;

ModelSim spuckt dabei folgende Fehlermeldung raus:
No feasible entries for infix operator "&".


mdata is ein serielles Datensignal deklariert in der Entity 
folgendermaßen:
mdata  : inout  STD_LOGIC;

sig_dataframe is ein Signal in der architecture:
signal sig_dataframe : BIT_VECTOR(4 downto 0);


Die zweite Geschichte ist ein Vector Vergleich auf die Gleichheit, das 
kriege ich auch nicht hin:

if sig_address = if_address then
-- code
end if;

Fehler:
Type error resolving infix expression "=" as type std.STANDARD.BOOLEAN.


if_address ist in der entity als vector deklariert und sig_adress in der 
architecture mit einer gleichen Breite.


Sorry für Dumme Fragen, habe VHDL seit Jahren nicht angefasst. Die 
Ergebnisse die mir google rausgespuckt hat, brachten auch keinen Erfolg.

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


Lesenswert?

Wie breit ist mdata?

Als was für ein Vektor sind diese beiden zu vergleichenden Vektoren 
definiert?

Hänge doch einfach mal den Code als *.vhd Datei an.

von Chris2k (Gast)


Lesenswert?

Wie sieht's aus mit:
1
sig_dataframe <= To_bitvector(sig_dataframe_op(0)) & mdata;

1. Du kannst nur zwei Signale einander zuweisen oder sie verknüpfen, 
wenn diese den gleichen Datentyp haben. std_logic[_vector] hat viel mehr 
mögliche Werte (U, Z, X...) als ein bit[_vector], der hat nur 0 und 1.

Siehe auch 
http://vhdlguru.blogspot.de/2010/03/what-is-difference-between-stdlogic-and.html

2. Außerdem müssen die Bitbreiten stimmig sein. Deine Zuweisung von 
sig_dataframe wird nur funktionieren, wenn links und rechts vom 
Zuweisungsoperator die Bitfolgen gleich lang sind. Dein sig_dataframe 
ist offensichtlich 5 Bit breit, und mdata mit sig_dataframe_op(0) 
zusammen ergeben einen zwei Bit breiten Vektor. Das passt also nicht.

Dein zweiter Schnipsel ist mir zu kurz, um da einen Tipp geben zu 
können.

von Knufi (Gast)


Lesenswert?

@Chris2k: Danke das war es. Mdata ist als inout STD_LOGIC definiert, das 
hat dem Compiler nicht gefallen, dass ich std_logic mit bit_vector 
verknüpfen wollte. Die Konvertierung to_bit(mdata) hat geholfen.

Vielen Dank an Alle.

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


Lesenswert?

Knufi schrieb:
> Die Konvertierung to_bit(mdata) hat geholfen.
Falsche Konvertierungsrichtung!
Vergiss bit und bit_vector schnellstmöglich. Das verwendet in der 
freien Wildbahn keiner. Nur im akademischen Bereich tauchen die Beiden 
auf...

von Knufi (Gast)


Lesenswert?

Wie meinst du das? Wird das nicht richtig in die Hardware umgesetzt?

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


Lesenswert?

Knufi schrieb:
> Wird das nicht richtig in die Hardware umgesetzt?
Doch, klar.
> Wie meinst du das?
Es wird in der Praxis nicht verwendet. Denn mit einem bit kannst du 
keinen bidirektionalen Bus beschreiben oder irgendwas hochohimg werden 
lassen...

Lothar Miller schrieb:
> Das verwendet in der freien Wildbahn keiner.
> Nur im akademischen Bereich tauchen die Beiden auf...
... weil sich das Gerücht hält, Simulationen wären damit schneller. Nur 
deshalb werden dort bit und bit_vector verwendet. Und das selbe gilt 
für nich aufgelöste std_logic, die std_ulogic.

von Knufi (Gast)


Lesenswert?

Na ja, die Bit-Vectoren verwende ich als eine Art Variable um Daten 
einzuspeisen und zu prüfen, ob diese einem erwarteten Muster 
entsprechen. Die müssen in dem Fall nur '1' oder '0' 
speichern/darstellen können.

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


Lesenswert?

Soso, eine Variable also...  :-/

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.