Bueno después de revisar el código has tenido varios errores.
En primer lugar, hay un error en la asignación de la señal CF. Leasignas valores dentro y fuera de un proceso y eso no se puede hacer. Yo la he quedado fuera.
Después tienes los warnings en la suma y la resta. En este tipo de operaciones es recomendable utiliza paréntesis, ya que el warning es que estás asignando 19bits a una señal de 9.
Aqui te paso el cósigo corregido:
Codigo:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SUM_DIC IS
PORT(A,B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
C0,C1,C2,CIN: IN STD_LOGIC;
SALIDA: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
CF: OUT STD_LOGIC ;
ZF: OUT STD_LOGIC);
END SUM_DIC;
ARCHITECTURE SOLUCION OF SUM_DIC IS
SIGNAL C : STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL X : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
X <= C1 & C2 & C0;
PROCESS(A,B,X,CIN)
BEGIN
CASE X IS
WHEN "000" =>
C <=("0" & A) + ("0" & B) + ("00000000" & CIN) ;
WHEN "001" =>
C <=("0" & A) - ("0" & B) - ("00000000" & CIN) ;
WHEN "010" =>
C <=A(7 DOWNTO 0) & C(8);
WHEN "011" =>
C <=A(0) & C(8) & A(7 DOWNTO 1);
WHEN "100" =>
C <= "0" & (A AND B);
WHEN "101" =>
C <= "0" & (A OR B);
WHEN OTHERS =>
C <= ("0" & NOT A);
END CASE;
END PROCESS;
SALIDA <= C(7 DOWNTO 0);
CF <= C(8);
ZF <= NOT(C(7) OR C(6) OR C(5) OR C(4) OR C(3) OR C(2) OR C(1) OR C(0));
END SOLUCION;