VHDL中的组件实例化与实体实例化

igo*_*gon 5 vhdl

我有Verilog/SystemVerilog的经验,但我是VHDL的新手,我想弄清楚何时应该使用组件实例化或实体实例化.通过组件实例化,我指的是在实例化实体之前声明实体组件的传统方式.另一方面,VHDL-93引入的实体实例化允许您直接声明实体而无需指定组件. 相关文章

在我看来,实体实例化始终是可取的,除非你还没有实现架构,你只想定义一个黑盒子.

这是我发现的一个相关问题,但它完全解决了我的疑虑.由于可以为任何实体定义通用映射和体系结构:

entity work.MyEntity_E(ARCH) generic map(
...)
port map(
...
);
Run Code Online (Sandbox Code Playgroud)

进行组件实例化的额外灵活性是什么?什么是最简单的示例,显示无法通过实体实例化完成但可以使用组件实例化完成的事情

Mat*_*lor 6

我喜欢把一个组件想象成一个 IC 插座。您可以通过将编译(分析)比作组装 PCB 并将细化比作将芯片放入插槽中来进一步进行类比。如果您使用IC插座,即使您还没有订购芯片,您也可以组装PCB;您可以推迟将芯片放入插座中。同样,如果您使用组件:即使与组件对应的实体和架构尚不存在,您也可以编译设计;您可以将绑定推迟到以后,直到详细说明。

那么,为什么会这样呢?为什么它们可能还不存在?

i) 这是一个大项目。并不是每个人都已经完成了他们的街区。但是您仍然可以轻松地编译顶层并在设计的任一部分上运行仿真。您可以通过注释掉/编辑来做到这一点,但使用组件会更容易。

ii) 您已经自动生成了一些 IP。这为您提供了一个用于仿真的行为模型,但没有可综合的模型 - 这个想法是您在流程后期结合一些自动生成的 IP 物理视图。这对于仿真来说是可以的,但是如果有一点缺失——你生成的 IP,你如何编译你的设计以进行综合?

iii) 你在做递归实例化:你在它自身内部实例化一个块。使用直接实例化,你有一个牢不可破的鸡和蛋的情况(又名循环依赖);使用直接实例化,您无法实例化尚未编译的内容,但也无法编译它,因为实例化的实体尚未编译。组件实例化可以打破这种循环依赖。

iv) 组件实例化还使您能够在设计的同一位置(在配置的控制下)实例化不同的实体。@user1155120 给出了上述示例:使用组件实例化(和配置)使您能够创建具有不同子块的相同块。

这是在EDA Playground上比较两者的示例- https://www.edaplayground.com/x/2QrS