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