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

标签 vhdl

我有使用 Verilog/SystemVerilog 的经验,但我是 VHDL 新手,我试图弄清楚何时应该使用组件实例化或实体实例化。 我所说的组件实例化是指在实例化实体组件之前声明实体组件的传统方式。另一方面,实体实例化,已在 VHDL-93 中介绍过。 ,允许您直接声明实体而不指定组件。 Related Article

在我看来,实体实例化总是更可取的,除非您还没有实现架构并且您只想定义一个黑盒子。

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

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

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

最佳答案

我喜欢将组件视为 IC socket 。您可以进一步进行类比,将编译(分析)比作组装 PCB,将精加工比作将芯片放入插槽中。如果使用IC socket ,即使还没有订购芯片,也可以组装PCB;您可以推迟将芯片放入 socket 中。同样,如果您使用组件:即使组件对应的实体和架构尚不存在,您也可以编译设计;您可以将绑定(bind)推迟到稍后,直到详细说明。

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

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

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

iii) 您正在进行递归实例化:您正在实例化其自身内部的一个 block 。通过直接实例化,您将面临牢不可破的先有鸡还是先有蛋的情况(又名循环依赖);使用直接实例化,您无法实例化尚未编译的东西,但您也无法编译它,因为实例化的实体尚未编译。 组件实例化可以打破这种循环依赖。

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

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

关于vhdl - VHDL 中的组件实例化与实体实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229368/

相关文章:

尽管进行了彻底检查,但在 Modelsim 上的仿真中类型不匹配的 VHDL 代码

vhdl - 在VHDL中定义Matrix2D的初始值

来自不同进程的VHDL驱动信号

vhdl - RAM模拟代码在VHDL中不能很好地模拟

random - FPGA 随机 LED 闪烁(4 个 LED)

syntax - VHDL 将十进制值分配给 std_logic_vector

arrays - 数组索引为宽数组

vhdl - 无法让简单的位序列识别器电路工作(FSM)

tcl - 如何从TCL控制台在ModelSim/QuestaSim中执行 'Zoom Fit'?

generics - VHDL从实体中提取常量