UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 32971

11.x XST - "ERROR:HDLCompiler:40 - .vhd Line xx: is not a component"

Description

I have a design where the component and signal have the same name. I get the following error in XST when targeting Virtex-6/Spartan-6 devices, but do not have any issues when I target older devices. Why?

"ERROR:HDLCompiler:40 - "<file>.vhd" Line xx: <name> is not a component"

Example Code:

File: ex_0001.vhd

Compilation Library: work

library ieee;

use ieee.std_logic_1164.all;

package my_pack_0001 is

component my_name is

port(in_port : in std_logic;

out_port: out std_logic);

end component;

end package;

-----------------------------------

library ieee;

use ieee.std_logic_1164.all;

library work;

use work.my_pack_0001.all;

entity ex_0001 is

port(in_port : in std_logic;

out_port: out std_logic);

end ex_0001;

architecture beh of ex_0001 is

signal my_name : std_logic;

begin

my_name <= in_port;

my_inst : my_name port map(in_port =>my_name, -- Note: Error points here

out_port=>out_port);

end;

Solution

In 11.2 XST introduced a new VHDL/Verilog parser for Virtex-6 and Spartan-6 families. For more information on this change, please refer to (Xilinx Answer 32927)

This is not a VHDL LRM compliant code. To solve the problem, you have to rename a signal or a component.

For example, in the above code you can edit the source to:

library ieee;

use ieee.std_logic_1164.all;

package my_pack_0001 is

component my_name is

port(in_port : in std_logic;

out_port: out std_logic);

end component;

end package;

-----------------------------------

library ieee;

use ieee.std_logic_1164.all;

library work;

use work.my_pack_0001.all;

entity ex_0001 is

port(in_port : in std_logic;

out_port: out std_logic);

end ex_0001;

architecture beh of ex_0001 is

signal my_name : std_logic;

begin

my_name <= in_port;

my_inst : my_name port map(in_port =>my_name, -- Note: Error points here

out_port=>out_port);

end;

In the above code rename my_name to my_name_signal

AR# 32971
Date Created 06/23/2009
Last Updated 12/15/2012
Status Active
Type General Article