Error (10500): VHDL syntax error at sell.vhd(26) near text "when"; expecting "end", or "else", or "elsif" 求解
library ieee;
use ieee.std_logic_1164.all;
entity sell is
port(a,b,clk:in std_logic;--输入信号投币,a=0为0元;a=1为10元,输入信号投币,b=0为0元;b=1为5元,clk:时钟信号
c:in std_logic;--输入信号,c:互动按钮(用于投币不足不想买了,要找零的情况)
y:out std_logic;--输出信号,y是否吐出商品,y=1为吐出商品;y=0为不吐出商品
z:out std_logic);--z是找零,z=0为不找零,z=1为找零5元
end sell;
architecture behave of sell is
type states is (state0,state1);--定义枚举类型,售货机两个状态(售货机中已投的币):state0为0元,state1为5元
signal state: states;
signal temp:std_logic_vector(1 downto 0);--定义中间变量state:售货机状态,temp:顾客投币情况
begin
process(clk,a,b,c,temp)
begin
temp<=a&b;
if(clk'event and clk='1') then --上升沿触发的时钟信号
case state is
when state0=>--若此时售货机处于state0状态时执行以下操作
if(temp="01") then state<=state1;y<='0';z<='0';--state0状态下投币5元,售货机进入state1状态,不吐出商品不找钱
elsif(temp="10") then state<=state0;y<='1';z<='0';--state0状态下投币10元,售货机吐出商品不找钱,然后回到state0状态
elsif(temp="11") then state<=state0;y<='1';z<='1';--state0状态下投币15元,售货机吐出商品找5元,然后回到state0状态
elsif(temp="01") then if(c='1') then state<=state0;y<='0';z<='1';--顾客投币五元后不想买了,点击互动键,找回五元,售货机回到state0状态
else state<=state0;y<='0';z<='0';--state0状态下未投币,售货机保持state0状态
end if;
when state1=>--若此时售货机处于state1状态时执行以下操作
if(temp="01") then state<=state0;y<='1';z<='0';--state1状态下投币5元,售货机吐出商品,不找钱,回到state0状态
elsif(temp="10") then state<=state0; y<='1';z<='1';--state1状态下投币10元,售货机吐出商品找五元,回到state0状态
elsif(c='1') then state<=state0;y<='0';z<='1';--state1状态下不投币,点击互动按钮,售货机不吐出商品,找五元,回到state0状态
else state<=state1; y<='0';z<='0';--state1状态下未投币,售货机保持state1状态
end if;
end if;
end case;
end if;
end process;
end behave;
library ieee;
use ieee.std_logic_1164.all;
entity sell is
port(a,b,clk:in std_logic;--输入信号投币,a=0为0元;a=1为10元,输入信号投币,b=0为0元;b=1为5元,clk:时钟信号
c:in std_logic;--输入信号,c:互动按钮(用于投币不足不想买了,要找零的情况)
y:out std_logic;--输出信号,y是否吐出商品,y=1为吐出商品;y=0为不吐出商品
z:out std_logic);--z是找零,z=0为不找零,z=1为找零5元
end sell;
architecture behave of sell is
type states is (state0,state1);--定义枚举类型,售货机两个状态(售货机中已投的币):state0为0元,state1为5元
signal state: states;
signal temp:std_logic_vector(1 downto 0);--定义中间变量state:售货机状态,temp:顾客投币情况
begin
process(clk,a,b,c,temp)
begin
temp<=a&b;
if(clk'event and clk='1') then --上升沿触发的时钟信号
case state is
when state0=>--若此时售货机处于state0状态时执行以下操作
if(temp="01") then state<=state1;y<='0';z<='0';--state0状态下投币5元,售货机进入state1状态,不吐出商品不找钱
elsif(temp="10") then state<=state0;y<='1';z<='0';--state0状态下投币10元,售货机吐出商品不找钱,然后回到state0状态
elsif(temp="11") then state<=state0;y<='1';z<='1';--state0状态下投币15元,售货机吐出商品找5元,然后回到state0状态
elsif(temp="01") then
if(c='1') then state<=state0;y<='0';z<='1';--顾客投币五元后不想买了,点击互动键,找回五元,售货机回到state0状态
else state<=state0;y<='0';z<='0';--state0状态下未投币,售货机保持state0状态
end if;
end if;
when state1=>--若此时售货机处于state1状态时执行以下操作
if(temp="01") then state<=state0;y<='1';z<='0';--state1状态下投币5元,售货机吐出商品,不找钱,回到state0状态
elsif(temp="10") then state<=state0; y<='1';z<='1';--state1状态下投币10元,售货机吐出商品找五元,回到state0状态
elsif(c='1') then state<=state0;y<='0';z<='1';--state1状态下不投币,点击互动按钮,售货机不吐出商品,找五元,回到state0状态
else state<=state1; y<='0';z<='0';--state1状态下未投币,售货机保持state1状态
end if;
end case;
end if;
end process;
end behave;