VHDL 中的实体语法

Entity syntax in VHDL

我对 VHDL 中实体的语法感到困惑。以下是 EBN form 实体应如何声明的规则:

来源:Peter J. Ashenden, "The Designers Guide to VHDL", 3rd ed., Morgan Kaufmann, 2008.

令我困惑的是声明的结尾。据此,我不需要在最后包含 entityidentifier,一切都会一样。例如,下面的两个声明是一样的吗?

声明 1

entity identifier is
    ...
begin
    ...
end ;

声明 2

entity identifier is
    ...
begin
    ...
end entity identifier ;

如果是,为什么会有人选择后一种声明?是否有建议我应该使用这两种变体中的哪一种?我问这个是因为我通常会在示例中看到后一个声明,我无法解释为什么有人会更喜欢第二个声明而不是第一个声明。

我几乎总是使用后一种声明,因为它会产生更好的文档记录代码。对于前者,如果 reader 遇到一个简单的 end;,则 crystal 不清楚结束的是什么。

当使用比 VHDL 更简洁的语言时,程序员(通常)通常会在关闭某些内容的结构中添加注释,以显示 reader 正在关闭的内容,例如在 C++ 中:

} // if (enable) 

或 Verilog

end // if (enable) 

SystemVerilog 添加了一种功能,可以用适当的语言做同样的事情:

if (enable)
    begin : enable_block
    ...
    end : enable_block

之所以能在VHDL中说出这些

end ;
end entity ;
end identifier ;
end entity identifier ;

是为了让VHDL-93向后兼容VHDL-87,其中只有这些是合法的:

end ;
end identifier ;

"Nearly always"?是的。如果我写可执行代码,我总是会写后者。然而,本周我创建了一些关于 VHDL 的 PowerPoint 幻灯片,我故意只写了 end;,因为我认为整个 end entity identifier ; 分散了 reader 的注意力。你可以随心所欲。