Hola Andreakrol
Depende de los paquetes que estes usando. Xilinx suele poner por defecto el paquete std_logic_arith, aunque yo prefiero usar el numeric_std. Los paquetes los puedes ver al principio del fichero y los puedes modificar.
Este es el numeric_std
Código:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
Y este es el std_logic_arith (que suele poner por defecto el Xilinx)
Código:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Si usas el paquete numeric_std, la función de conversión es TO_INTEGER, lo que asignado a la variable tuya sería lo siguiente (en tu caso estaría dentro de un proceso o función, por ser una variable)
Código:
NCajas := TO_INTEGER (Num);
Mientras que si usas el paquete std_logic_arith, la función es CONV_INTEGER
Código:
NCajas := CONV_INTEGER (Num);
Pero esto es si Num fuese un tipo unsigned o signed, y no un std_logic_vector.
Así que antes tendrías que convertirlo con un cast a un unsigned (o signed), y quedaría así:
Código:
NCajas := TO_INTEGER (unsigned(Num));
O con el paquete std_logic_arith:
Código:
NCajas := CONV_INTEGER (unsigned(Num));
Aunque creo que el paquete std_logic_arith lo permite sin el cast, pero no estoy seguro
Por último, aunque no es una norma, muchas veces los vectores se declaran en sentido descendente:
Código:
Num: in STD_LOGIC_VECTOR (3 downto 0)
Espero que te ayude, de todos modos, si profundizar un poco, puedes mirarte el apartado 8.3.2 del libro diseño de sistemas digitales con vhdl que está en este enlace:
http://hdl.handle.net/10115/5700
Saludos