VHDL-Ayuda con Variables, banderas, contadores

#1
Que tal hermanos, despues de buscar todo el dia por la web, encontrar ejemplos que no me servian de mucho, y aqui en el foro tutoriales donde no respondian mis dudas, decidi preguntarles:
Alguien sabe manejar variables en VHDL?
Mi intencion es hacer una maquina de estados, pero usar banderas para pasar o activar X estado etc, tmb tengo pensado hacer un contador, un ejemplo seria

variable cont: integer range 0 to 15:=0;

y en X estado: cont:= cont +1;
pero no funciona :S. Las simulaciones me arrojan X en la salida


Segun la informacion que lei, hay imcompatibilidades entre los tipos de varaibles, por ejemplo a la hora de asignar un valor de tipo varaibale a un signal, ya me enfade de leer y no resolver mi duda :(
Estoy usando el Quartus II 9.0 de Altera
Aqui les dejo un codigo para que cheken como lo que ando hacinedo, les agradeceria mucho su ayuda, pues es para un proyecto de circuitos digitales, el cual tengo que entrgar para el lunes :S...
-- Quartus II VHDL Template
-- Four-State Moore State Machine
-- A Moore machine's outputs are dependent only on the current state.
-- The output is written only when the state changes. (State
-- transitions are synchronous.)
library ieee;
use ieee.std_logic_1164.all;
entity NADA is
port(
clk : in std_logic;
input : in std_logic;
reset : in std_logic;
output : out integer range 0 to 5
);
end entity;
architecture rtl of NADA is
-- Build an enumerated type for the state machine
type state_type is (s0, s1, s2, s3, valor1, valor2, valor3);
-- Register to hold the current state
signal state : state_type;
begin
-- Logic to advance to the next state
process (clk, reset)
variable c: integer;
--c:=1;
begin
c:=1;
if reset = '1' then
state <= s0;
elsif (rising_edge(clk)) then
case state is

when s0=>
c:=1;
if c =1 then
state <= valor1;
end if;
when s1=>

if c = 2 then
state <= valor2;
end if;
when s2=>
if c = 3 then
state <= valor3;
end if;
when s3 =>
state <= s0;
when valor1=>
c:=2;
state<= s1;
when valor2=>
c:=3;
state<= s2;
when valor3=>
state<= s3;
end case;
end if;
end process;
-- Output depends solely on the current state
process (state)
variable c: integer range 0 to 5;

begin
case state is
when s0 =>

when s1 =>

when s2 =>

when s3 =>

when valor1=>
output<= 1;

when valor2=>
output<= 2;

when valor3=>
output<= 3;
end case;
end process;
end rtl;


el programa esta programado pensando en que hiciera lo siguiente:
declare la varaible "c" como un integer de 0 a 5, y un output igual integer de 0 a 5, cuando entro al estado 0, asigno un valor a la variable y brinco a otro estado, donde muestro la salida, la cual le asigne el valor del contador (manualmente outpur<= (valor del contador o variable en ese momento);, guardo el archivo, lo simulo pero el diagrama de tiempos o me arroja en los valores de "output" un 0 o una X.
Simplemente intento verificar que la variable "c" este tomando los valores que le asigno pero nada :S
Espero puedan ayuarme, y muchas Gracias.

P:eek: Mire un tutorial subido por un Bakuno, muchas gracias ya lo lei.
PD2: Mi intencion es usar un simple contador y simples banderas, asi como en Java o C/C++
int c=0;..... c++; algo sencillo pero no encuentro la forma.
 
Arriba