为什么 if-else 序列末尾缺少“end if”?

1 if-statement vhdl

错误是

teclat.vhdl:57:12:需要“if”而不是“process”

end if是它应该在的地方。我不明白为什么它不能像缺少end ifalways一样编译。

architecture v1 of teclat is
begin
    process(Buttons, COL, ROW) begin

    if (Buttons(1) = '1') then
        COL <= "100";
        ROW <= "100";
    else if (Buttons(2) = '1') then
        COL <= "010";
        ROW <= "100";
    else if (Buttons(3) = '1') then
        COL <= "001";
        ROW <= "100";
    else 
        ROW <= "111";
    end if;

    end process;
end v1;
Run Code Online (Sandbox Code Playgroud)

mkr*_*er1 5

一个 end if它应该在的地方,但您缺少if打开的其余报表的那些。

您的代码当前被处理为

if (Buttons(1) = '1') then
    COL <= "100";
    ROW <= "100";
else
    if (Buttons(2) = '1') then
        COL <= "010";
        ROW <= "100";
    else
        if (Buttons(3) = '1') then
            COL <= "001";
            ROW <= "100";
        else
            ROW <= "111";
        end if;
    end if; -- missing
end if; -- missing
Run Code Online (Sandbox Code Playgroud)

或者,使用elsif避免打开如此多的if语句。现在您只有一个语句 if并且只需要一个end if.

if (Buttons(1) = '1') then
    COL <= "100";
    ROW <= "100";
elsif (Buttons(2) = '1') then
    COL <= "010";
    ROW <= "100";
elsif (Buttons(3) = '1') then
    COL <= "001";
    ROW <= "100";
else
    ROW <= "111";
end if;
Run Code Online (Sandbox Code Playgroud)