许多VHDL结构在声明之前可以选择optional_label
,但这个标签用于什么?
以下是来自vdlande的流程声明示例,其中显示了标签的选项:
optional_label: process (optional sensitivity list)
-- declarations
begin
-- sequential statements
end process optional_label;
答案 0 :(得分:7)
标签用于识别。
例如,IEEE1076-2008
7.3.1概述
配置规范将绑定信息与表示给定组件声明实例的组件标签相关联。
考虑下一段代码:
entity e is end entity;
architecture a of e is begin
process is begin wait; end process;
foo: process is begin wait; end process;
end architecture;
即。标签foo
是固定的,而另一个过程只是分配了一些参考,在这种情况下是行号。您使用的是属性,配置,别名等,通常需要引用特定对象及其位置。你需要固定名称。
如果您查看IEEE1076-2008标准,您可以看到每个语句都可以有一个标签:if
,case
,loop
等。
答案 1 :(得分:3)
您可以使用标签来识别模拟器中的内容,如JHBonarius所说,但标签也有其他用途:
i)识别长代码块的结尾,例如
my_if : if A = B then
-- lots of lines of code
end if my_if;
ii)跟踪复杂的代码,例如
my_if_1 : if A = B then
my_if_2 : if A = B then
my_if_3 : if A = B then
my_if_4 : if A = B then
my_if_5 : if A = B then
my_if_6 : if A = B then
-- blah blah blah
end if my_if_6;
end if my_if_5;
end if my_if_4;
end if my_if_3;
end if my_if_2;
end if my_if_1;
iii)标记断言通常是一个好主意,以便可以在EDA工具中轻松识别它们,例如:
enable_check : assert enable = '1';
iv)如果你标记了某些东西,那么你可以用一个属性装饰它(即附加一些其他EDA工具的元数据),例如这样的东西可能会阻止合成器优化某些东西:< / p>
attribute KEEP : boolean;
attribute KEEP of g0:label is TRUE;
...
g0 : CLK_EN port map ( ...
(具体名称取决于合成器。)