为什么我需要在其他体系结构中实例化VHDL组件之前重新声明它们?

为什么我需要在其他体系结构中实例化VHDL组件之前重新声明它们?,vhdl,Vhdl,自从我第一次上VHDL课以来,我一直在挠头,决定把我的问题贴在这里 既然我有一个声明的实体(以及它的体系结构),并且希望在另一个体系结构中实例化它,为什么我似乎必须在实例化它之前重新声明这个包含体系结构中的“实体”(组件) 编译器是否足够聪明,可以仅仅通过名称将实例化与其体系结构相匹配?哪里需要组件声明?当我在学校完成VHDL作业时,我被要求将所有代码都放在一个文件中,因此我不记得是否可以为每个模块编写一个文件以及如何完成 当你用它来定义C++中的原型、结构、类和其他东西时,你必须声明你在定义行

自从我第一次上VHDL课以来,我一直在挠头,决定把我的问题贴在这里

既然我有一个声明的实体(以及它的体系结构),并且希望在另一个体系结构中实例化它,为什么我似乎必须在实例化它之前重新声明这个包含体系结构中的“实体”(组件)


编译器是否足够聪明,可以仅仅通过名称将实例化与其体系结构相匹配?哪里需要组件声明?

当我在学校完成VHDL作业时,我被要求将所有代码都放在一个文件中,因此我不记得是否可以为每个模块编写一个文件以及如何完成

当你用它来定义C++中的原型、结构、类和其他东西时,你必须声明你在定义行为时所用的实体。这里的不同之处在于,您没有足够的空间用VHDL为这种“重新声明”定义头文件(至少我认为没有等效的头文件)。因此,我认为这样做是完全合理的。请注意,VHDL是在C非常普遍的时候出现的,并且编译器没有像今天这样“足够聪明”


VHDL专家可能对此有一个明确的答案,但我的理解是这样的。

如果需要,您可以直接实例化组件:

  MyInstantiatedEntity : entity work.MyEntity_E
    generic map (
        config          => whatever)
    port map (
        clk             => signal1,
        clk_vid         => signal2,
        ...

创建组件声明使您能够通过配置规范或类似规范更改绑定到实例化的内容。

我认为这可能是一个有趣的阅读(没有办法)。可能是相关的,但我不确定你会如何应用它。你可以这样定义你的“标题”。啊,这很有意义。谢谢你的回答!包有点像头文件——您可以将组件放入其中,因此只需声明一次。但是Charles建议的直接实例化是一种方法,除非你有充分的理由不这样做(例如黑盒组件,需要使用配置)。你可以指定体系结构:label:entity work.MyEntity_E(RTL)generic map。。。