Ich möchte einen std_logic_vector innerhalb von case mit Werten belegen:
wenn Vektor = 0..63 dann
Fall "0" -> Output = 3
Fall "0" -> Output = 5
Fall "63" -> Output = 8
Der Vektor ist ein "14 downto 0" und die Zahlen kommen aus MATLAB.
Egal wie ich es kontruiere, Xilinx will nicht.
Normalerweise verwende ich z.B. sowas:
1 | constant XYZ : std_logic_vector (10 downto 0) := STD_LOGIC_VECTOR(to_unsigned( 456,11));
|
Das hat aber hier im case nicht geklappt. Hilfsweise benutze ich oft
auch sowas:
1 | value_sx <= STD_LOGIC_VECTOR(unsigned(empty15) + 201);
|
... wobei ich oben "empty15" als leeren Vektor mit 15 Bit deklariere.
Damit kriegt die Synthese die richtige Länge mit und das klappt.
Diese Zeile synthetisiert nun in meinem Programm ebenfalls, jedoch nur
ausserhalb des case Konstruktes! Sie funktioniert innerhalb der case
Anweisung nicht!
1 | case unsigned (input) is
|
2 | when 0 => value_sx <= STD_LOGIC_VECTOR(unsigned(empty15) + 201);
|
3 | when 1 => value_sx <= STD_LOGIC_VECTOR(unsigned(empty15) + 562);
|
WARUM GEHT DAS NICHT????
Andere Frage: wie sollte eine VHDL Zuweisung einfacher zu machen sein?
Ich verwende die Bibliotheken:
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
Wie gesagt geht es aus funktioneller Sicht nur darum, in insgesamt 64
Fällen (input Vektor) einen Ausgangsvektor (14 downto 0) eine von 64
Stützstellen zuzuweisen. Die Werte habe ich aus MATLAB als *.txt Liste.
Mit CONV_STD_LOGIC VECTOR etc habe ich es nicht hinbekommen.
(p.S. ich MUSS diese Bibs nehmen)