组件声明的作用是什么?

时间:2018-10-14 20:27:45

标签: vhdl

随着VHDL '93引入直接实例化,当您的实体位于VHDL中时,您现在何时真正使用组件?以下是我能想到的唯一需要组件的时间:

  1. 组件映射到非VHDL源(Verilog,网表等)
  2. 您还没有源代码,需要进行编译(例如,同事尚未完成其代码)
  3. 您正在通过配置将不同的实体/架构对绑定到特定实体中的特定组件。 (但是实际上是谁做的?也许如果您有模拟拱门和合成拱门-但又一次-从未见过以任何有意义的方式使用它)

我对那些鼓吹说“一个组件可以让我在同一文件中查看端口映射”或“拥有一个组件库可以让我看到所有内容”的人们感到不屑。这主要是人们习惯的一种古老的方法。在我看来,在两个地方维护相同的代码是没有道理的。

我错过了其他人吗?

1 个答案:

答案 0 :(得分:1)

很抱歉对Can't compile VHDL package - Modelsim error: (vcom-1576) expecting END的回复很晚

除了OP列出的用例之外,并按照他的用例不那么有用的标准,我将再添加两个用例:

  1. 要编写独立于平台的代码,需要实现例如Altera和Xilinx专用解决方案。此代码将引用供应商特定的库,例如alter_mfunisim。两种特定于供应商的实现都可以通过 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或通用实现。

  2. Open Source VHDL Verification Methodology (OSVVM)中,组件用于两个用例:

    1. 在顶级DUT中,IP内核被实例化为组件,因此可以用虚拟实现代替。作为未绑定组件或作为加载虚拟体系结构的组件。这样可以加快仿真速度,减少测试中可能的错误源,并以更简单,更快速的实现代替复杂的慢速实现,例如MGT或内存控制器,...
    2. 在OSVVM中,测试控件是在称为TestController的单独实体中实现的。该实体具有多种架构,可实现应用于相同测试硬度的不同测试用例。这些体系结构受每个测试用例/体系结构的顶级配置的约束。因此,运行“测试台”意味着详细说明和模拟这些配置之一。