代码之家  ›  专栏  ›  技术社区  ›  Miguelon

为什么不能使用elsif使我的VHDL程序工作,无法识别一种状态

  •  0
  • Miguelon  · 技术社区  · 11 年前

    我是一个西班牙用户,一个VHDL编程新手,我试图用CASE创建一个机器状态,但没有成功。然后我决定使用ELSIF指令,它的所有工作都很完美,但状态0010不工作。我不知道为什么它是一个非常简单的程序,但不明白为什么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;
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   Morten Zilmer    11 年前

    这个 sen=0010 看起来像 sen 与4位矢量相比 由于缺少 "" 周围 0010 价值通过添加 "" 喜欢 "0010" .

    VHDL基本上是强类型的,但是 use ieee.std_logic_unsigned.all; 添加 允许比较的函数 std_logic_vector integer ,和 因此,问题通过了语法检查。

    也:

    • 通过添加 begin process ,因为那是 中的必填项 architecture
    • 考虑使用if rising_edge(clk) 而不是 wait until clk'event and clk='1'
    • 考虑使用重写 case