0

私はスペイン語のユーザーであり、VHDL プログラミングの初心者であり、CASE でマシンの状態を作ろうとしたが機能しないという問題があります。次に、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;
4

1 に答える 1

2

は4 ビットのベクトルと比較されているsen=0010ように見えますがsen、実際には 10 進数の値 0010 = 10 = 10 と比較されて ""0010ます。""など を追加して、すべての場所でこれを修正し"0010"ます。

VHDL は基本的に厳密に型指定されていますが、 と を比較できる関数が追加use ieee.std_logic_unsigned.all;されているため、問題は構文チェックに合格します。std_logic_vectorinteger

また:

  • beginの前に追加して構文エラーを修正しますprocessarchitecture
  • rising_edge(clk)ifの代わりに使用することを検討してくださいwait until clk'event and clk='1'
  • で書き直すことを検討してくださいcase
于 2014-02-14T05:56:13.550 に答える