Forum: FPGA, VHDL & Co. Vektor zusammensetzen: 0 definitions of operator "&" match here


von Martin (Gast)


Lesenswert?

Hallo an alle,

ich habe folgendes Ausgangslage: Ich habe einen Vektor len, der um size 
nach links geschoben werden soll. Dazu habe ich folgende Signal- bzw. 
Variablen:
1
signal s_len      : std_logic_vector(7 downto 0);
2
signal s_size     : std_logic_vector(2 downto 0);
3
variable v_size   : integer range 0 to 7;
4
variable v_result : std_logic_vector(14 downto 0);

Ich möchte nun in v_result das Signal so zusammensetzen, dass in den 
unteren Bits v_size-1 Nullen, dann s_len und darüber die restlichen 
Nullen angeordnet sind.

Dazu habe ich folgendes versucht:
1
v_size   := to_integer(unsigned(s_size));
2
v_result := (7 - v_size downto 0 => '0') & s_len & (v_size-1 downto 0 => '0');

Mit ist schon klar, dass damit nicht die einfachste Logik synthetisiert 
wird, doch es scheitert bei mir mit VHDL. Leider liefert mir Vivado die 
folgende Fehlermeldung:
1
[Synth 8-944] 0 definitions of operator "&" match here ["test.vhd":45]

Kann mir jemand damit helfen?

lg Martin

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


Lesenswert?

Martin schrieb:
> Kann mir jemand damit helfen?
Probiers mal so:
1
 v_result := (others=>'0');
2
 v_result(v_size+7 downto v_size) := s_len

von Sigi (Gast)


Lesenswert?

s_len und v_result sind zwar vom Typ std_logic_vector,
aber (others => '0') oÄ kann verschiedene Typen matchen,
z.B. auc bit_vector. Und da der &-Operator eben auch für
diese Typen definiert ist und std_logic_vector erwartet
wird, kommt es nun mal zu Mehrdeutigkeiten. VHDL mag's
aber nur eindeutig.

von Martin (Gast)


Lesenswert?

Lothar Miller schrieb:
> Probiers mal so: v_result := (others=>'0');
>  v_result(v_size+7 downto v_size) := s_len

Danke Lothar, das hat funktioniert :)

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


Lesenswert?

Martin schrieb:
> Danke Lothar, das hat funktioniert :)
Keine Ursache.
Auf den fehlenden Strichpunkt bist du ja selber gekommen... ;-)

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.