problemas de programación de VHDL ... novato

0

Estoy intentando escribir una máquina de estado en VHDL que escaneará un teclado 4x4. Quiero que keyP esté en 0 al inicio y después de un reinicio. También quiero que la columna se establezca en "1111" al inicio y después de un reinicio.

Como no estoy completamente versado en la programación VHDL, estoy seguro de que es solo un error de sintaxis estúpido. El error que recibo es:

Error (10818): No se puede inferir el registro para "Col [0]" en Lab_7_Keypad.vhd (39) porque no mantiene su valor fuera del límite del reloj

y lo mismo para Col [1] Col [2] Col [3] y para keyP también.

Aquí está mi código para el comienzo de todo. ¿Puede alguien darme una idea de dónde me he equivocado?

ENTITY Lab_7_Keypad IS
PORT(
nReset          :   IN  STD_LOGIC;
clk             :   IN  STD_LOGIC;
row             :   IN  STD_LOGIC_VECTOR (3 downto 0);
Col             :   OUT STD_LOGIC_VECTOR (3 downto 0);
data            :   OUT STD_LOGIC_VECTOR (3 downto 0);
keyP            :   OUT STD_LOGIC);

END Lab_7_Keypad;

ARCHITECTURE a OF Lab_7_Keypad IS   
TYPE STATE_TYPE IS ( Col1Set, Col2Set, Col3Set, Col4Set );
SIGNAL  coltest :   STATE_TYPE;

BEGIN
PROCESS (clk, nReset )
BEGIN
keyP <= '0';
Col <= "1111";
IF nReset = '0' THEN                        --  asynch Reset to zero
    coltest <=  Col1Set;
    Col <="1111";
    keyP <= '0';
ELSIF clk'EVENT AND clk = '1' THEN          --  triggers on PGT

    CASE coltest IS
        WHEN Col1Set => 
        Col <="1110";
            CASE row IS
                WHEN    "1110"=>--row 1
                data <= "0001";
                keyP <= '1';
                WHEN    "1101"=>--row 2
                data <= "0100";
                keyP <= '1';
                WHEN    "1011"=>--row 3
                data <= "0111";
                keyP <= '1';
                WHEN    "0111"=>--row 4
                data <= "1110";
                keyP <= '1';
                WHEN OTHERS => coltest <= Col2Set;
            END CASE;
    --Continues for another couple Case statements for the extra columns
    
pregunta Chef Flambe

1 respuesta

3

Borre las dos líneas intermedias, abajo

BEGIN
--keyP <= '0';
--Col <= "1111";
IF nReset = '0' THEN                        --  asynch Reset to zero

Estos estados indican que keyP y Col siempre se asignan (como conectado a GND o Power), luego se indica que están conectados a registros. Solicita que VHDL conecte un registro a una señal conectada a GND o Power.

    
respondido por el Jason Morgan

Lea otras preguntas en las etiquetas