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