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.
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.
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.
@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.
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...
Wie meinst du das? Wird das nicht richtig in die Hardware umgesetzt?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.