Hola qb_1!!
A tu primera pregunta: a la hora de declarar las variables o constantes que utilices en tu diseño, las variables de tipo "simple" que implementan las entidades ENTITY, es decir, las que están implementadas en el package o librería standard, ieee.std_logic_1164.all, esas variables deben ser de tipo std_logic. En el caso de arrays o vectores, debes declararlas std_logic_vector, y dar un rango natural que indique la posición del bit inicial del vector y la posición del bit final. Por ejemplo:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DECODER2X4 is
port(A, B, ENABLE: in STD_LOGIC;
Z: out STD_LOGIC_VECTOR(0 to 3));
Las variables de entrada son de tipo bit (A, B y ENABLE); mientras que la salida es un vector, Z, de cuatro bits.
Vale. Ahora vamos con los tipos de de variables "complejos" o que declaras tú a partir de tipos simples, y que debes incluir en un paquete que luego llamas como si fuera una librería más.
En el caso de std_vector, esto se suele usar para implementar SEÑALES, SIGNALS, que se obtienen a partir de operaciones lógicas o aritméticas entre señales o variables simples y standard. Por ejemplo:
Signal DBUS: std_vector(0 to 7);
signal CTRL: std_logic_vector(0 downto 7);
signal enable, RW: signal std_logic;
signal count: std_logic_vector(0 to 3);
DBUS <= Ctrl & Enable & RW & count;
La señal DBUS, que es un vector de 8 bits, se obtiene a partir de la concatenación (&

de las señales CTRL, Enable, RW y count.
Bueno, sigo en el siguiente mensaje para que no se forme un "chorizo" y te aburras.
Besotes
Elena