为什么我的VHDL程序无法使用elsif无法识别一个状态

时间:2014-02-14 04:38:58

标签: vhdl intel-fpga

我是一名西班牙语用户,他是VHDL编程的新手,问题是我试图用CASE制作机器状态但不起作用。然后我决定用ELSIF指令完成所有工作完美但状态0010它不工作我不知道为什么它是一个非常轻松的程序但不明白为什么y不工作EXCUSE我的贫穷英语但我尽我所能谢谢我接下来的节目:

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;

1 个答案:

答案 0 :(得分:2)

sen=0010看似sen与4位向量进行比较,但确实如此 实际上比较十进制值0010 = 10 =十,由于缺乏 ""值左右0010。通过添加""来修复此问题 "0010"

VHDL基本上是强类型的,但use ieee.std_logic_unsigned.all;增加了 允许在std_logic_vectorinteger之间进行比较的函数 这个问题通过了语法检查。

此外:

  • 通过在begin之前添加process来修复语法错误,因为那样 architecture
  • 中需要
  • 考虑使用if rising_edge(clk)而不是wait until clk'event and clk='1'
  • 考虑使用case
  • 重写