随着VHDL '93引入直接实例化,当您的实体位于VHDL中时,您现在何时真正使用组件?以下是我能想到的唯一需要组件的时间:
我对那些鼓吹说“一个组件可以让我在同一文件中查看端口映射”或“拥有一个组件库可以让我看到所有内容”的人们感到不屑。这主要是人们习惯的一种古老的方法。在我看来,在两个地方维护相同的代码是没有道理的。
我错过了其他人吗?
答案 0 :(得分:1)
很抱歉对Can't compile VHDL package - Modelsim error: (vcom-1576) expecting END的回复很晚
除了OP列出的用例之外,并按照他的用例不那么有用的标准,我将再添加两个用例:
要编写独立于平台的代码,需要实现例如Altera和Xilinx专用解决方案。此代码将引用供应商特定的库,例如alter_mf
或unisim
。两种特定于供应商的实现都可以通过 if ... generate 语句选择,也可以从VHDL-2008中通过 case ... generate 语句选择。
但是即使使用 generate 语句,此解决方案也需要实例化组件,因为直接实体实例化的实例是绑定的,而不管某些实例永远不会出现在详细模型中的事实。 (我认为这是该语言的错误-但没有时间针对VHDL-2018进行调查和修复。)由于实体被立即绑定,因此该工具尝试加载引用的供应商库及其包。
假设您使用Quartus在Altera上进行编译,它将抱怨未知的unisim
库和未知的vcomponents
包。在Xilinx上也是如此,Vivado抱怨未知的altera_mf
库。
因此,要切断(直接)实例化树,就需要组件实例化。
PoC-Library使用此技术。例如,参见标准Double-FF同步器的PoC.misc.sync.Bits
实现,该协议将不同的属性应用于Altera,Xilinx或通用实现。
在Open Source VHDL Verification Methodology (OSVVM)中,组件用于两个用例:
TestController
的单独实体中实现的。该实体具有多种架构,可实现应用于相同测试硬度的不同测试用例。这些体系结构受每个测试用例/体系结构的顶级配置的约束。因此,运行“测试台”意味着详细说明和模拟这些配置之一。