Mar*_*lin 3 syntax fpga vhdl ebnf
我对 VHDL 中实体的语法感到困惑。以下是EBN 表格中应如何声明实体的规则:
资料来源:Peter J. Ashenden,“VHDL 设计师指南”,第 3 版,Morgan Kaufmann,2008 年。
我感到困惑的是声明的结尾。据此,我不需要在最后包含实体或标识符,一切都会一样。例如,下面的两个声明是一样的吗?
声明 1
entity identifier is
...
begin
...
end ;
Run Code Online (Sandbox Code Playgroud)
声明2
entity identifier is
...
begin
...
end entity identifier ;
Run Code Online (Sandbox Code Playgroud)
如果是,为什么有人会选择后一种声明?有没有建议我应该使用这两种变体中的哪一种?我问这个是因为我通常在示例中看到后一个声明,我无法解释为什么有人更喜欢第二个声明而不是第一个声明。
我几乎总是使用后一个声明,因为它会产生更好的文档化代码。对于前者,如果读者遇到一个简单的end;,则不太清楚正在结束的内容。
当使用比 VHDL 更少冗长的语言时,程序员(通常)通常会在关闭某些内容的构造中添加注释,以便向读者展示正在关闭的内容,例如在 C++ 中:
} // if (enable)
Run Code Online (Sandbox Code Playgroud)
或在 Verilog 中
end // if (enable)
Run Code Online (Sandbox Code Playgroud)
SystemVerilog 增加了一种用适当的语言做同样事情的工具:
if (enable)
begin : enable_block
...
end : enable_block
Run Code Online (Sandbox Code Playgroud)
你可以在 VHDL 中说出所有这些的原因
end ;
end entity ;
end identifier ;
end entity identifier ;
Run Code Online (Sandbox Code Playgroud)
是使 VHDL-93 向后兼容 VHDL-87,其中只有这些是合法的:
end ;
end identifier ;
Run Code Online (Sandbox Code Playgroud)
“差不多总是”?是的。如果我编写可执行代码,我总是会编写后者。然而,我这周制作了一些关于 VHDL 的 PowerPoint 幻灯片,我故意写了这些幻灯片,只是end;因为我认为整个过程end entity identifier ;分散了读者的注意力。你可以随心所欲。