0
我想寫一個VHDL狀態機,將掃描一個4x4鍵盤。我希望keyP在開始和復位後設置爲0。我還希望Col
在開始和復位後設置爲「1111」。VHDL輸出聲明與狀態機
由於我不完全熟悉VHDL編程,我相信這只是一個愚蠢的語法錯誤。
我得到的錯誤是:
錯誤(10818):無法推斷註冊「上校[0]」在Lab_7_Keypad.vhd(39),因爲它不成立的時鐘邊緣
以外的值
與同爲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.