我有一个问题。我想用generate来指定信号。但模拟器给我一个错误。错误是:“信号分配的非法目标。”和“未知标识符A0_i。”
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 :(得分:1)
VHDL具有将备用名称与命名对象相关联的机制。
参见IEEE Std 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)。