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

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

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

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

entity work.MyEntity_E(ARCH) generic map(
...)
port map(
...
);

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

最佳答案
我喜欢将组件视为IC插座.您可以通过将编译(分析)比作组装PCB并将其简化为将芯片放入插座中来进一步进行类比.如果您使用IC插座,即使您尚未订购芯片,也可以组装PCB;你可以推迟将芯片放入插座中.同样,如果您使用组件:即使对应于组件的实体和体系结构尚不存在,您也可以编译设计;你可以将绑定推迟到以后,直到详细说明.

那么,为什么会这样呢?为什么他们还不存在?

i)这是一个很大的项目.并非每个人都完成了他们的阻止.但您仍然可以轻松地在设计的任何位上编译顶级和运行模拟.您可以通过注释/编辑来完成此操作,但使用组件可以更轻松.

ii)您已自动生成一些IP.这给了你一个模拟的行为模型,但是没有可合成的模型 – 这个想法是你在流程中稍后组合一些自动生成的IP物理视图.这对于模拟来说是可以的,但如果有一点缺失,你怎么能编译你的设计用于合成 – 你生成的IP?

iii)你正在进行递归实例化:你在自己内部实例化一个块.通过直接实例化,您将获得一个牢不可破的鸡与蛋情况(又称循环依赖);使用直接实例化,您无法实例化尚未编译的内容,但无法编译它,因为实例化的实体尚未编译.组件实例化可以打破这种循环依赖关系.

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

这是一个比较两者在EDA Playground – https://www.edaplayground.com/x/2QrS上的例子.

转载注明原文:VHDL中的组件实例化与实体实例化 - 代码日志