2

このエラーは長い間私を悩ませてきました。どうすればよいかわかりません。他のコードでも同じエラーが出ますが、これは単純なものなので、何が問題なのかを見つけやすいかもしれません。

周波数セレクターです、スイッチ(clau)をONにすると周波数が変わります。

library IEEE;
use IEEE.numeric_bit.ALL; 

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity selector_frequencia is
Port ( unHz : in bit ;
       centHz : in bit ;
       Clock : out bit;
          clau: in bit);
end selector_frequencia;

architecture Behavioral of selector_frequencia is

begin
if (clau = "0") then Clock <= unHz;
else Clock <= centHz;
end if;

end Behavioral;

そして、私が得るエラーはこれです:

ERROR:HDLParsers:164 - "C:/Documents and Settings/Administrador/Escritorio/practica_digital/practica_digital/selector_frequencia.vhdl" 行 23. 解析エラー、予期しない IF

ありがとうございました。

4

3 に答える 3

3

私は VHDL の専門家ではありませんがif、プロセス内でステートメントを使用する必要があると思います。

architecture Behavioral of selector_frequencia is

begin

fqsel:PROCESS(unHz , centHz , Clock , clau)
BEGIN

  if (clau = '0') then
      Clock <= unHz;
  else
      Clock <= centHz;
  end if;

END PROCESS fqsel;

end Behavioral;
于 2012-11-03T17:53:28.690 に答える
1

Alex が指摘したように、if ステートメントはプロセス ブロック内にある必要があります。さらに、VHDL は C ではありません...条件を括弧 () で囲むことは想定されていません。または、プロシージャ/関数呼び出しまたは信号範囲のように見えます。つまり、my_bus(7 downto 0) ですが、構文エラーです。は予約語です。試す:

process (clau, unHz, centHz)
begin
  if clau = '0' then 
    Clock <= unHz;
  else 
    Clock <= centHz;
  end if;
end process;

最後に、プロセスの外では、条件付きシグナル割り当てを使用できます。これは、同等のプロセスと if ステートメントを簡単に実装する方法です。

Clock <= unHz when clau='0' else centHz;
于 2012-11-03T19:24:02.483 に答える
0

IF句で代入ステートメントを使用しています。

// This is assignment, you are assigning 'clau' to 0 and then checking it in 'if'
if (clau = "0") then Clock <= unHz;

// Try this, note the double '='
if (clau == "0") then Clock <= unHz;

割り当てステートメントは、PROCESSブロック内にある必要があります。

お役に立てれば。

于 2012-11-03T18:50:42.437 に答える