Hola, en primer lugar, el inglés no es mi idioma. Estoy usando un SPARTAN 3E como placa de desarrollo Traté de hacer un FSM que cambia el estado con un contador llamado "T" (a veces como un pseudo-procesador) y usa un botón como impulso para incrementar, en un caso el FSM asigna un std_logic_vector de 4 tamaños desde cuatro interruptores en la placa fpga a "A", luego incrementa el contador y, en otro momento, coloca el valor del mismo interruptor en "B", finalmente hace la operación C: = A + B y lo envía a dos pantallas externas. El problema principal ocurre cuando quiero hacer la adición entre A y B, parece que A y B no tienen el valor asignado y muestran una operación incorrecta cuando probé, soy nuevo en vhdl así que mi conocimiento es limitado gracias por la ayuda :)
'PROCESS(T)
variable A: std_logic_vector(3 DOWNTO 0);
variable B: std_logic_vector(3 DOWNTO 0);
variable C: STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
IF T="00000" THEN--0
X0<="00000011";
END IF;
IF T="00001" THEN--1
IF MEM="0001" THEN
VAL<="00001";
ELSE
VAL<="11111";
END IF;
X0<="00000110";
END IF;
IF T="00010" THEN--2
X0<="00011010";
END IF;
IF T="00011" THEN--3
X0<="00000011";
END IF;
IF T="00100" THEN--4
VAL<=('0'& MEM);
X0<="00000110";
END IF;
IF T="00101" THEN--5
A:=MEM;--takes A from the switch
VAL<=('0' & A);
X0<="00110010";
END IF;
IF T="00110" THEN--6
X0<="00000011";
END IF;
IF T="00111" THEN--7
B:=MEM;--takes B from the switch
VAL<=('0' & B);
X0<="00000110";
END IF;
IF T="01000" THEN--8
X0<="01010010";
END IF;
IF T="01001" THEN--9
C:=STD_LOGIC_VECTOR(UNSIGNED('0' & A)+UNSIGNED('0' & B));
VAL<=(C);--shows the result
X0<="10000010";
END IF;
IF T="01010" THEN--10
X0<="00000011";
END IF;
IF T="01011" THEN--11
IF MEM="0001" THEN
VAL<="00010";
ELSE
VAL<="11111";
END IF;
X0<="00000110";
END IF;
IF T="01100" THEN--12
X0<="00011010";
END IF;
IF T="01101" THEN--13
X0<="00000011";
END IF;
IF T="01110" THEN--14
VAL<=('0' & MEM);
X0<="00000110";
END IF;
IF T="01111" THEN--15
A:=MEM;--takes A
VAL<=('0' & MEM);
X0<="00110010";
END IF;
IF T="10000" THEN--16
X0<="00000011";
END IF;
IF T="10001" THEN--17
VAL<=('0' & MEM);
X0<="00000110";
END IF;
IF T="10010" THEN--18
B:=MEM;--takes B
VAL<=('0' & B);
X0<="01010010";
END IF;
IF T="10011" THEN--19
C:=STD_LOGIC_VECTOR(UNSIGNED('0' & A)-UNSIGNED('0' & B));
VAL<=(C);--shows the result
X0<="00000000";
END IF;
if T>"10011" then
X0<="00000000";
end if;
END PROCESS;'