2016-11-04 66 views
-1

我有一个问题。我想使用生成信号分配。但模拟器需要我一个错误。错误是:“信号分配的非法目标。”和“未知标识符A0_i”。生成信号assignmen在vhdl

architecure sss of fff is 
signal A0_0 : bit ; 
signal A0_1 : bit ; 
signal A0_2 : bit ; 
signal A0_3 : bit ; 

begin 

U0 : for i in 0 to 3 generate 
U1 : A0_i <= a(i) and b(i) ; 
end generate; 

end sss; 
+0

只需使A0覆盖范围0到3的位数组并写入Generate以覆盖该范围:'U0:for i in A0'left to A0'right generate U1:A0(i)<= a( i)和b(i);' –

+0

谢谢。但我不允许更改信号名称。有什么办法可以解决这个问题吗? –

+0

为信号提供备用名称 - * IEEE Std 1076-2008 6.6别名声明,6.6.1别名声明声明现有命名实体的备用名称。*'signal A0:bit_vector(0 to 3);别名A0_0:位是A0(0);别名A0_1:位是A0(1);别名A0_2:位是A0(2);别名A0_3:位是A0(3);'和'U1:A0(i)<= a(i)和b(i);'问题是A0_i是一个标识符,一个不可分割的词法元素(15.3)而您想在此处使用索引名称(8.4)。 – user1155120

回答

1

VHDL有一种机制将备用名称与命名对象关联起来。

见IEEE标准1076至2008年6.6别名声明,通用6.6.1条第1款:

别名声明声明一个别名为现有的命名实体。

对象别名的规则可以在6.6.2对象别名中找到。这里的想法是为生成语句赋值语句目标提供一个可索引的名称(8.4索引名称)。

问题是A0_i是一个标识符(15.4)和不可分割的词法元素(15.3)。

entity fff is 
    port (
     a: in bit_vector(0 to 3); 
     b: in bit_vector(0 to 3) 
    ); 
end entity; 

architecture sss of fff is 
    -- signal A0_0 : bit ; -- REPLACED 
    -- signal A0_1 : bit ; 
    -- signal A0_2 : bit ; 
    -- signal A0_3 : bit ; 
    signal A0: bit_vector (0 to 3); -- ADDED 
-- IEEE Std 1076-2008 6.6 Alias declarations 
-- 6.6.1 General 
-- An alias declaration declares an alternate name for an existing named entity. 
    alias A0_0: bit is A0(0); 
    alias A0_1: bit is A0(1); 
    alias A0_2: bit is A0(2); 
    alias A0_3: bit is A0(3); 
begin 

U0: 
    for i in 0 to 3 generate 
U1:  A0(i) <= a(i) and b(i); 
    end generate; 

end architecture sss; 

由于对象别名不能对由命名的信号上面显示声明一个信号阵列和别名为阵列的元素的原始名称的未命名聚合来创建。

这个修改后的实例添加了一个实体,分析和阐述并允许同时使用索引名和别名(例如A0(0)和A0_0)。