AR# 32984

11.x XST - 「ERROR:HDLCompiler:16 - "<file>.vhd" Line xx : <width> cannot be used within its own interface list. Please verify that you don't use this object for the definition of other interface components.」というエラー メッセージが表示される

説明

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

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

ERROR:HDLCompiler:16 - "<file>.vhd" Line xx: <width> cannot be used within its own interface list. Please verify that you don't use this object for the definition of other interface components.

コード例 :

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity ex_0018 is
port(in_port : in std_logic_vector(7 downto 0);
out_port: out std_logic_vector(7 downto 0));
end ex_0018;

architecture beh of ex_0018 is

procedure add_0018 (
constant width: integer:=8; -- Note: Error point here
signal inp: in std_logic_vector(width-1 downto 0);
signal outp: out std_logic_vector(width-1 downto 0)) is
begin
outp <= inp + 5;
end add_0018;

begin
add_0018(inp=>in_port, outp=>out_port);
end;

ソリューション

上記のコードで定数幅が宣言されており、add_0018 プロシージャ インターフェイス リストで使用されています。このコードは、VHDL LRM に準拠していません。この問題を解決するには、次に示すように定数幅をプロシージャ外で宣言します。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity ex_0018 is
port(in_port : in std_logic_vector(7 downto 0);
out_port: out std_logic_vector(7 downto 0));
end ex_0018;

architecture beh of ex_0018 is
constant width: integer:=8;

procedure add_0018 (
signal inp: in std_logic_vector(width-1 downto 0);
signal outp: out std_logic_vector(width-1 downto 0)) is
begin
outp <= inp + 5;
end add_0018;

begin
add_0018(inp=>in_port, outp=>out_port);
end;


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