AR# 32980

11.x XST - 「ERROR:HDLCompiler:545 - "<file>.vhd" Line xx: Initial value for constant declaration is not constant」というエラー メッセージが表示される

説明

キーワード : XST, Spartan-6, Virtex-6, 11.2 , Parser, HDLCompiler:940, 解析

Virtex-6 または Spartan-6 デバイスをターゲットにすると XST で次のエラー メッセージが表示されますが、ほかの古いデバイスだとエラーは発生しません。この理由を教えてください。

ERROR:HDLCompiler:545 - "<file>.vhd" Line xx: Initial value for constant declaration is not constant

コード例 :

library ieee;
use ieee.std_logic_1164.all;

entity ex_0009 is
port(clk,a : in std_logic;
res : out std_logic
);
end ex_0009;

architecture bhv of ex_0009 is
constant my_const: std_logic:='0';
signal tmp: std_logic;
begin
tmp <= my_const;

process (clk)
constant local_const: std_logic := tmp; -- Note: Error points here
begin
if clk'event and clk='1' then
res <= a or local_const;
end if;
end process;

end;


ソリューション

上記のコード例は、VHDL LRM に準拠していません。この問題を解決するには、my_const 定数を直接使用して local_const 定数を初期化します。

library ieee;
use ieee.std_logic_1164.all;

entity ex_0009 is
port(clk,a : in std_logic;
res : out std_logic
);
end ex_0009;

architecture bhv of ex_0009 is
constant my_const: std_logic:='0';
signal tmp: std_logic;
begin
tmp <= my_const;

process (clk)
constant local_const: std_logic := my_const; -- Note: Error points here
begin
if clk'event and clk='1' then
res <= a or local_const;
end if;
end process;

end;



11.2 XST では、Virtex-6 および Spartan-6 ファミリに新しい VHDL/Verilog 解析が導入されました。この変更の詳細は、(Xilinx Answer 32927) を参照してください。
AR# 32980
日付 12/15/2012
ステータス アクティブ
種類 一般