为什么可以';t使用elsif使我的VHDL程序无法工作,如果无法识别一种状态

为什么可以';t使用elsif使我的VHDL程序无法工作,如果无法识别一种状态,vhdl,intel-fpga,Vhdl,Intel Fpga,我是一名西班牙用户,是一名VHDL编程新手。问题是,我试图用这个案例建立一个机器状态,但不起作用。然后我决定使用ELSIF指令,所有指令工作正常,但状态0010不工作a我不知道为什么这是一个非常轻松的程序,但不理解为什么y不工作原谅我的英语不好,但我尽了最大努力谢谢我接下来展示程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; --definimos identidad de la in

我是一名西班牙用户,是一名VHDL编程新手。问题是,我试图用这个案例建立一个机器状态,但不起作用。然后我决定使用ELSIF指令,所有指令工作正常,但状态0010不工作a我不知道为什么这是一个非常轻松的程序,但不理解为什么y不工作原谅我的英语不好,但我尽了最大努力谢谢我接下来展示程序:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

--definimos identidad de la interfaz
entity interfaz is 
port(
    sen:in std_logic_vector(3 downto 0);--entrada de sensor bus de 4 bits
    clk:in std_logic;
    mda, mdr, mia, mir:out std_logic);--mdr,mda=motor derecho retroceso,avance == mia,mir=motor izquiero avance,retroceso
end interfaz;
--comenzando arquitectura de interfaz
architecture behavior of interfaz is
----------------------------------------------------
--Instruccion con herramienta elseif
process
begin
wait until clk'event and clk='1';
if (sen=(0000)) then --alto
mda<='0'; 
mdr<='0'; 
mia<='0'; 
mir<='0';
elsif (sen=(0001)) then --retroceso
mda<='0';
mdr<='1';
mia<='0';
mir<='1';
elsif (sen=0010) then --avance
mda<='1';
mdr<='0';
mia<='1';
mir<='0';
elsif (sen=(0100)) then --izquierda
mda<='0';
mdr<='1';
mia<='1';
mir<='0';
elsif (sen=(1000)) then --derecha
mda<='1';
mdr<='0';
mia<='0';
mir<='1';
end if;

end process;
end behavior;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_unsigned.all;
--国际交流的定义
实体interfaz是
港口(
sen:在标准逻辑向量(3到0)中--entrada de sensor bus de 4位
clk:标准逻辑中;
mda、mdr、mia、mir:输出std_逻辑)--mdr,mda=运动型Derecoso,avance==mia,mir=运动型izquiero avance,Retracoso
结束干涉;
--科门赞多·阿奎特塞拉国际酒店
interfaz的建筑行为是
----------------------------------------------------
--埃尔塞伊夫学院
过程
开始
等待clk'事件和clk='1';
如果(sen=(0000))那么--alto

mda将
sen=0010
类似于
sen
与4位向量进行比较,但它是 实际上,与十进制值0010=10=10进行比较,因为缺少
围绕
0010
值。通过添加
,可以在所有位置修复此问题,如
“0010”

VHDL基本上是强类型的,
使用ieee.std\u logic\u unsigned.all添加
允许比较
标准逻辑向量
整数
的函数,以及 这就是问题通过语法检查的原因

此外:

  • 通过在
    进程
    之前添加
    开始
    来修复语法错误,因为这是
    体系结构中需要
  • 考虑使用if
    上升沿(clk)
    代替
    等待clk'事件和clk='1'
  • 考虑使用
    case

你好,莫顿,谢谢你的快速回答,我将检查修复程序并告诉你它是如何进行的祝你好运朋友再次你好,莫顿,谢谢你的帮助,我能够修复我的问题,工作正常,我将尝试重写用例,但现在很好,谢谢,祝你好运