在VHDL设计中何时使用块语句,何时不使用?

在VHDL设计中何时使用块语句,何时不使用?,vhdl,Vhdl,我来自软件世界,最近我开始用VHDL创建FPGA设计。我读过关于blockconcurrent语句及其主要用途,如组织架构、分组并发代码和保护信号,这是不推荐的 但这是实现相同功能的多种可能性之一。例如,我已经用VHDL函数实现了一个CRC帧检测器。它有一个位值输入,并返回一个寄存器,其中包含所有位输入的累积CRC值 我认为同样的功能可以通过块实现。资源利用的最佳选择是什么?何时使用块,何时不使用?实现块的最佳情况是什么 谢谢,资源利用的最佳选择是什么? 在资源利用率方面,有或没有块之间应该没有

我来自软件世界,最近我开始用VHDL创建FPGA设计。我读过关于
block
concurrent语句及其主要用途,如组织架构、分组并发代码和保护信号,这是不推荐的

但这是实现相同功能的多种可能性之一。例如,我已经用VHDL函数实现了一个CRC帧检测器。它有一个位值输入,并返回一个寄存器,其中包含所有位输入的累积CRC值

我认为同样的功能可以通过
实现。资源利用的最佳选择是什么?何时使用
,何时不使用?实现
块的最佳情况是什么

谢谢,

资源利用的最佳选择是什么? 在资源利用率方面,有或没有
之间应该没有区别。这假设您正在创建相同的逻辑

何时使用
,何时不使用? 与软件类似,使用
block
语句的唯一原因是要限制代码部分中使用的变量的范围。这可以显著提高大型设计中的代码可读性,在该设计中,信号可以在同一区域声明和使用

我不建议任何人在小型设计中使用
block
语句,或者在组件实例化更合适的地方使用

哪种情况是实现块的最佳情况?
当它提高代码可读性时。

一个简单的答案是:不要使用
block
语句。另一个简单的答案是:当您需要在诸如GENERATE语句之类的语句中声明信号时,它没有自己的声明区域。或者,当您想将信号声明和一些语句(如使用它们的进程)组合在一起时。@BrianDrummond使用
generate
语句,有一个可选的
begin
,它为您提供了一个可选的声明区域来声明“本地”信号。不过,我对你的其他建议很感兴趣。你能举个例子吗?在“generate”语句中是的-那里的声明被称为
{block\u declarative\u item}
(至少在Ashenden中是这样),因此块实际上是隐式的。另一方面,一个例子是描述管道的过程,在该过程中,可以使用信号或变量作为管道寄存器,但使用变量时,必须向后描述管道。使用信号,您可以向前描述它(第一阶段优先),但如果您想使这些本地信号声明保持本地,一种方法是块。(我在另一个问答中有一个例子,但找不到它)@BrianDrummond-hmmm。。。有趣。然而,您知道有哪种合成器能够理解它吗?从VHDL 2008开始,使用
的一个合法(非美学)理由是使用VHDL外部名称。在详细说明外部名称之前,不得引用外部名称。换句话说,它们只能在.vhd文件中相应的
实体的实例化下方引用。
块是实现这一点的一种方法。外部名称仅在模拟中使用,因此资源利用率不适用于此处。