Contador negativo

Hola a tod@s, soy nuevo en este foro, os queria pedir ayuda para resolver una cuestion que lleva un par de dias dandome quebraderos de cabeza:

Estoy intentando realizar un contador que cuente numeros tanto positivos como negativos pero soy incapaz de sacar estos ultimos. El que estoy realizando es un contador de 5 bits, que se incrementa perfectamente pero que al decrementarse y llegar a cero salta al 31 en lugar de al -1 como queria.
Creo haberlo intentado todo, se que para representar los numeros negativos necesito ponerlo en C2 con la funcion signed pero ya lo he intentado y no dejan de salirme errores
Como señales de entrada tengo:

reset, clk, p: in std_logic ---donde p es una señal que si es 1 incrementa y si es 0 decrementa
out: out std_logic_vector (4 downto 0) --- salida del contador
Tambien he definido una variable auxiliar cuenta para realizar las operaciones

Agradezco vuestras respuestas
 
es muy sencillo en realidad lo que tienes que hacer es conectar la salida Q inversa complemento o como te allan ensenado a la ck de siguiente cojes los valores de Q inverso para la respuesta
 
no me he enterado muy bien como me dices si dejo el programa que tengo es posible que sea mas facil dar la respuesta gracias:

LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;

ENTITY contador IS
PORT( reset, clk, p: in std_logic;
cout: out std_logic_vector (4 downto 0));
END contador;

ARCHITECTURE func OF contador IS
SIGNAL cuenta: std_logic_vector(4 downto 0);

BEGIN
PROCESS (reset, clk)
variable auxc:INTEGER;
BEGIN
if clk'event and clk='1'then
if p='1' then
auxc:=1;
else
auxc:=-1;
end if;
END IF;
if reset='1' then
cuenta<="00000";
elsif clk'EVENT and clk ='0' then
cuenta<=cuenta + auxc;
end if;
end process;
cout<=cuenta;
end func;
 

Arriba