0

4x4 キーパッドをスキャンするステート マシンを VHDL で記述しようとしています。開始時とリセット後に keyP を 0 に設定します。Colまた、開始時とリセット後に「1111」に設定したいと思います。

私は VHDL プログラミングに完全に精通しているわけではないので、単純な構文エラーだと確信しています。
私が得るエラーは次のとおりです。

エラー (10818): Lab_7_Keypad.vhd(39) の "Col[0]" のレジスタを推測できません。これは、クロック エッジの外で値を保持していないためです。

Col[1]Col[2]Col[3]および についてkeyPも同様です。

これがすべての始まりのための私のコードです。誰かが私が間違っている場所を教えてもらえますか?

ありがとう

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;
  --And continues with same Case statements three more times.
4

1 に答える 1