您没有提供可重现或完整的示例,也没有演示别名声明的语法位置。特别注意缺少循环参数,您的尝试暗示包含值 0 和 1。
参见 IEEE Std 1076-2008 8.7 外部名称
路径名元素 ::=
实体_simple_name
| component_instantiation_label
| 阻止_label
| generate_statement_label [ ( static_expression ) ]
| 包_simple_name
以及附带的静态表达式的语义描述:
b)其次,对于包路径名中的每个包简单名称,或绝对或相对路径名中的每个路径名元素,按顺序,先前标识的声明区域被以下之一替换为标识的声明区域:
...
5)对于generate语句标签,对应于generate语句的等效块的声明区域。如果 generate 语句是 for generate 语句,则 pathname 元素应包含静态表达式,表达式的类型应与 generate 参数的类型相同,表达式的值应属于 for 指定的离散范围生成参数。表达式的类型应通过将 12.5 的规则应用于被视为完整上下文的表达式来确定,使用类型应为离散的规则。如果表达式的类型是 universal_integer 并且 generate 参数的类型是整数类型,则假定表达式隐式转换为 generate 参数的类型。
我们看到generate语句标签后面括号中的静态表达式是循环参数的值。
可以分析、阐述和模拟的 -2008 示例:
entity for_gen_label is
end entity;
architecture fum of for_gen_label is
begin
INST:
for i in 0 to 3 generate
COUNTER:
block
signal a: boolean;
begin
PROC_LABEL:
process
begin
report a'INSTANCE_NAME;
wait;
end process;
end block;
end generate;
end architecture;
我们还看到-2008预定义属性'INSTANCE_NAME也可以演示路径名元素(GHDL):
for_gen_label.vhdl:16:17:@0ms:(report note): :for_gen_label(fum):inst(0):counter:a
for_gen_label.vhdl:16:17:@0ms:(report note): :for_gen_label(fum):inst(1):counter:a
for_gen_label.vhdl:16:17:@0ms:(report note): :for_gen_label(fum):inst(2):counter:a
for_gen_label.vhdl:16:17:@0ms:(report note): :for_gen_label(fum):inst(3):counter:a
'INSTANCE_NAME 预定义属性值的格式在 16.2.5 命名实体的预定义属性中给出。
两个下划线是名称的 C(++) 伪装,表示您可能从能够支持多种硬件描述语言的模拟器的用户界面获取信息。 GHDL,一个仅支持 VHDL 的批处理模拟器,产生的输出符合 VHDL 路径名称元素:
ghdl -r for_gen_label --disp-signals-map
.for_gen_label(fum).inst(0).counter.a: 00007FBDBD504700 net: 0
.for_gen_label(fum).inst(1).counter.a: 00007FBDBD5047A0 net: 0
.for_gen_label(fum).inst(2).counter.a: 00007FBDBD504840 net: 0
.for_gen_label(fum).inst(3).counter.a: 00007FBDBD5048E0 net: 0
...
同时顺便演示了整个路径。与其他一些 HDL 不同,VHDL 不区分标识符大小写。