General Description: An attribute value on an instance should override the value of the same attribute placed on the component declaration. However, in the 6.xi software, XST is passing the attribute value on the component instead of the instance.
What is the attribute passing order precedence in VHDL?
When passing attributes to components and instances, the compiler adds any attribute passed to the component first. Then, the compiler adds any attribute that is passed to instances. If the same attribute is passed to an instance and to a component, the attribute value passed to the instance overrides the attribute passed to the component, as in the following example:
: : component CLKDLL port ( CLKFB : in std_logic; CLKIN : in std_logic; RST : in std_logic; CLK0 : out std_logic; CLK180 : out std_logic; CLK270 : out std_logic; CLK2X : out std_logic; CLK90 : out std_logic; CLKDV : out std_logic; LOCKED : out std_logic); end component;
attribute CLKDV_DIVIDE : STRING ; attribute CLKDV_DIVIDE of CLKDLL : COMPONENT is "2.000000"; -- attribute on component attribute CLKDV_DIVIDE of CLKDLL_INSTANCE : LABEL is "8.000000"; -- attribute on instance : :
The attribute on CLKDLL_INSTANCE should override the attribute on CLKDLL. However, XST does not adhere to the precedence rules and passes the attribute on the component regardless. You can work around this issue by removing the attribute on the component.
If you use ECS, you must either modify the ".vhf" file produced by ECS or pass the constraint through a UCF.