0
IF (((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) OR ((SW(17) = 1) AND (SW(16) = 0) AND (SW(14) = 1)) AND (tempCounter = 1)) THEN
           next_state <= STATE1;
           resetTempCounter <= '1';
        ELSE
           next_state <= STATE0;
        END IF;

上記のコードは構文エラーをスローします。括弧を確認しましたが、それは問題ではないと思います。私は最初、長蛇の列を中断し、それが問題だと思っていましたが、そうではありませんでした。また、コードがプロセス ステートメント内にあり、それは問題ではないこともお知らせする必要があります。

エラー:

エラー (10500): テキスト "AND" 付近の Lab4b.vhd(241) での VHDL 構文エラー。")" または "," が必要です

エラー (10500): テキスト "ELSE" 付近の Lab4b.vhd(244) での VHDL 構文エラー。"end"、"("、または識別子 ("else" は予約済みのキーワードです)、またはシーケンシャル ステートメントが必要です。

私は VHDL プログラミングにかなり慣れていないので、ご容赦ください。助けていただければ幸いです。

4

3 に答える 3

0

回線を再フォーマットすると、問題が見つけやすくなります...

IF (((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) 
 OR ((SW(17) = 1) AND (SW(16) = 0) AND (SW(14) = 1))
 AND (tempCounter = 1)) THEN

-これSW(17) = '0'は std_logic またはビット値です。正しい。
別の例で SW(17) = 1 は、これは整数です...それほど多くはありません。

括弧が多すぎると明快さが損なわれると思います。

(((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) 
 ... )

((SW(17) = '0' OR (SW(17) = '1' AND SW(16) = '0')) 
 ... )

混乱を少し減らすために。混乱が少し減れば、単純なタイプミスを自分で見つけられるかもしれません。

于 2013-03-30T10:04:16.967 に答える
0

が aまたは anSWとして宣言されていると仮定すると、比較演算子が間違っています。とは両方とも、整数ではなく「実際の」値を模倣した値で構成される列挙型であることを思い出してください (この場合、 とが有効な選択になります)。 .bit_vectorSTD_LOGIC_VECTORbitSTD_LOGIC01

0したがって、この場合はandの前後にアポストロフィを追加するだけです1。これが機能するかどうかを確認します(またはタイプのシグナルtempCounterであると仮定します):STD_LOGICbit

(((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0'))) OR ((SW(17) = '1') AND (SW(16) = '0') AND (SW(14) = '1')) AND (tempCounter = '1'))
于 2013-03-29T20:47:41.160 に答える
0

問題を示すために、別の方法であなたのステートメントを書きましょう。

A = ((SW(17) = '0') OR ((SW(17) = '1') AND (SW(16) = '0')))
B = ((SW(17) = '1') AND (SW(16) = '0') AND (SW(14) = '1'))
C = (tempCounter = '1')

あなたは今持っています:

if A or B and C then
   ...

この問題は、たとえば次のように書くことで解決できます。

if (A or B) and C then
   ...

また

if A or (B and C) then
   ...
于 2013-03-29T21:31:45.820 に答える