2017-03-25 4 views
-2

私のコーディングで構文エラーが見つかりません。どんな助けでも大歓迎です。私のシンセサイザーは、エラーがblowoncompon> =の状態にあると言いますが、そのコードの状態をコミットすると次の状態に移行するので、エラーはどこか他の場所にあると思います。ステートマシンでのVHDL synaxエラー

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;  
+0

いいえ、エラーはツールが示すところで正しいです。 'blowoncompon> = --------なぜシンタックスエラーが発生するのか? ' IEEE Std 1076-2008 10.9ケースステートメント、構文は* cases_statement_alternative :: =選択肢=> sequence_of_statements *です。 "> ="の代わりに、一連のステートメント(1つ以上の連続ステートメント、10.1)の前に "=>"を使用する必要があります。エラーメッセージを表示します。 – user1155120

答えて

-1

その実体宣言(clk)によれば、ステートマシンは、おそらく同期回路です。しかし、あなたのデザインは同期的なものではなく、クロックを使用しません。

+0

私はまだ時計を追加していません。私は最初の状態を作成するとすぐにエラーが発生したことに気付きました。私は、人間の目で見えるように物事を遅くするためにifステートメントの形でさまざまな状態に送信されるクロックデバイダ信号を作成しています。私はクロック信号の欠如がエラーを作成するとは思わなかったが、私は先に進んでそれを作成し、状態に信号を挿入し、何が起こるか見る。 – cobra66

+0

リンクありがとう。私もそれらを勉強するつもりです。 – cobra66

+0

私の議決権行使ではありませんが、確かに正しいです。imho:状態マシンは同期回路である必要はありません。実際には、非同期設計ではしばしば、ステートマシンが回路動作をガイドする最良の方法です。 – JHBonarius

0
when blowoncompon>= --------Why syntax error near here 

これはエラーメッセージのように、VHDL構文ではありません。ちょうどそれをグーグル:それはまだ動作しませんので、VHDL Case Statement

when blowoncompon => 

しかし、あなたのコードは、end if;秒の多くが欠落しています。

関連する問題