Syntax 状态机中的VHDL synax错误

Syntax 状态机中的VHDL synax错误,syntax,vhdl,Syntax,Vhdl,我很难在编码中找到语法错误。任何帮助都将不胜感激。我的合成器说错误位于blowoncompon>=时的状态,但是我认为错误在其他地方,因为当我提交代码的状态时,错误会移动到下一个状态 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity question4 is Port ( --System Clock Declaration-------------------------- clk:

我很难在编码中找到语法错误。任何帮助都将不胜感激。我的合成器说错误位于blowoncompon>=时的状态,但是我认为错误在其他地方,因为当我提交代码的状态时,错误会移动到下一个状态

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity question4 is
 Port (
 --System Clock Declaration--------------------------
 clk: in std_logic;

 --Button Inputs-------------------------------------
 btnL: in std_logic; --
 btnU: in std_logic; --Clear
 btnD: in std_logic; --Reset

 sw: in std_logic_vector(7 downto 0);
 led: out std_logic_vector(15 downto 0)
 );
 end question4;

 architecture Behavioral of question4 is 

 constant active: std_logic := '1'; 
 constant bloweron: std_logic_vector(15 downto 0) := "000000011111111";
 constant compon: std_logic_vector(15 downto 0) := "1111111000000000";
 signal clear: std_logic := btnU; 
 signal reset: std_logic := btnD; 


 type states is (blowoncompoff, 
                blowoffcompoff, 
                blowoncompon);

 signal CurrentState: states; 
 signal NextState: states; 

begin 

motorstatetrans: process(currentsate)
begin

    if clear = active then 
        currentstate <= blowoffcompoff; 
    end if; 

    case currentstate is

       when blowoncompon>=   --------Why syntax error near here
            led <= bloweron;  
            led <= compon;

            if currenttemp=settemp then
                Nextstate <= blowoncompoff;

            elsif
                currenttemp>settemp then 
                    Nextstate <= bloweroncompon; 
            end if; 

       when blowoncompoff >= 
            led <= bloweron; 

            if currenttemp < settemp then 
                Nextstate <= bloweroncompon; 

            elsif current temp = set temp then 
                Nextstate <= blowoffcompoff; 

      when blowoffcompoff >=

            if current temp < settemp then 
                Nextstate <= blowoncompon; 

    end case; 
end process;      
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体问题4是
港口(
--系统时钟声明--------------------------
clk:标准逻辑中;
--按钮输入-------------------------------------
btnL:标准逻辑中--
btnU:在标准逻辑中;--清除
btnD:在标准逻辑中;--复位
sw:标准逻辑向量(7到0);
led:输出标准逻辑向量(15至0)
);
结束问题4;
问题4的架构是
恒定激活:标准逻辑:='1';
常量鼓风机:标准逻辑向量(15到0):=“0000000 11111111”;
常数成分:标准逻辑向量(15到0):=“111111100000000”;
信号清除:标准逻辑:=btnU;
信号复位:标准逻辑:=btnD;
类型状态为(BlownCompoff,
吹脱剂,
BlownCompon);
信号电流状态:状态;
信号下一状态:状态;
开始
motorstatetrans:进程(当前状态)
开始
如果清除=激活,则
currentstate=-----------为什么此处附近出现语法错误

led根据其实体声明(
clk
),您的状态机可能是一个同步电路。但您的设计不是同步的:它不使用时钟

when blowoncompon>=   --------Why syntax error near here
这不是VHDL语法,正如错误所说。只需谷歌一下:


但是您的代码缺少很多
end ifs,因此它仍然无法工作。

我还没有添加时钟。我一创建第一个状态就注意到错误发生了。我正在创建一个时钟分频器信号,它将以if语句的形式发送到不同的状态,以减慢速度,从而使它们可以用人眼看到。我不认为缺少时钟信号会产生错误,但我会继续创建它,并将信号插入到状态中,看看会发生什么。不是我的反对票,但你确实不对,伊姆霍:状态机根本不必是同步电路。实际上,在异步设计中,状态机通常是指导电路行为的最佳方式。在状态机的VHDL模型中,输入端口命名为
clk
,并注释为系统时钟声明,我们可能会假设设计的目标类不是异步的,但您在技术上是正确的,状态机也可以是异步的。据此编辑了我的答案。我不介意否决投票,即使我不理解他们。不,错误就在工具指示的地方当blowoncompon>=----为什么此处附近出现语法错误`。IEEE Std 1076-2008 10.9 Case语句,语法为Case_语句_可选::=when choices=>sequence_of_语句。您应该在一系列语句(一个或多个顺序语句,10.1)之前使用“=>”而不是“>=”。显示您的错误消息。
when blowoncompon =>