自从我的第一个 VHDL 课程以来,我一直在摸不着头脑,并决定在这里发布我的问题。
鉴于我有一个已声明的实体(以及它的架构)并想在另一个架构中实例化它,为什么我似乎必须在实例化它之前在这个包含架构中重新声明“实体”(组件)?
难道编译器不够聪明,仅凭名称就可以将实例化与其架构相匹配吗?哪里需要组件声明?
自从我的第一个 VHDL 课程以来,我一直在摸不着头脑,并决定在这里发布我的问题。
鉴于我有一个已声明的实体(以及它的架构)并想在另一个架构中实例化它,为什么我似乎必须在实例化它之前在这个包含架构中重新声明“实体”(组件)?
难道编译器不够聪明,仅凭名称就可以将实例化与其架构相匹配吗?哪里需要组件声明?
如果需要,您可以直接实例化组件:
MyInstantiatedEntity : entity work.MyEntity_E
generic map (
config => whatever)
port map (
clk => signal1,
clk_vid => signal2,
...
创建组件声明使您能够通过配置规范或类似的方式更改绑定到实例化的内容。
当我在学校做 VHDL 作业时,我被要求将所有代码都放在一个文件中,所以我不记得你是否可以为每个模块编写一个文件以及它是如何完成的。
话虽如此,您必须声明在定义行为时将使用的实体,如果您以与在 C 或 C++ 中定义原型、结构、类等类似的方式使用它。这里的区别是你没有在 VHDL 中为这个“重新声明”定义头文件的奢侈(至少我不认为有一个等价物)。所以对我来说必须这样做似乎是完全合理的。请注意,当 C 非常普遍并且编译器不像今天那样“足够聪明”时,VHDL 就出现了。
VHDL大师可能对此有明确的答案,但这就是我的理解。