【问题标题】:Why do I need to redeclare VHDL components before instantiating them in other architectures?为什么在其他架构中实例化它们之前需要重新声明 VHDL 组件?
【发布时间】:2010-09-04 07:42:31
【问题描述】:

自从我第一次上 VHDL 课以来,我一直在摸不着头脑,决定在这里发布我的问题。

鉴于我有一个已声明的实体(以及它的架构)并希望在另一个架构中实例化它,为什么在实例化它之前我似乎必须在此包含架构中重新声明“实体”(组件) ?

编译器不是足够聪明,仅凭名称就可以将实例化与其架构相匹配吗?哪里需要组件声明?

【问题讨论】:

    标签: vhdl


    【解决方案1】:

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

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

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

    【讨论】:

    • 可以指定架构为:label: entity work.MyEntity_E(RTL) generic map ...
    【解决方案2】:

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

    话虽如此,您必须声明在定义行为时要使用的实体,如果您使用它的方式与在 C 或 C++ 中定义原型、结构、类等类似的话。这里的区别是你没有在 VHDL 中为这个“重新声明”定义头文件的奢侈(至少我不认为有一个等价物)。所以对我来说必须这样做似乎是完全合理的。请注意,当 C 语言非常普遍并且编译器不像现在这样“足够聪明”时,VHDL 就出现了。

    VHDL 大师可能对此有明确的答案,但这是我的理解。

    【讨论】:

    • 我认为这可能是一个有趣的阅读,How to include header file in VHDL module(那里没有方法)。可能是相关的,但我不确定你会如何应用它。您可以通过这种方式定义您的“标题”。
    • 啊,这很有意义。感谢您的回答!
    • 一个包有点像一个头文件——你可以把组件放进去,所以你只需要声明一次。但是查尔斯建议的直接实例化是可行的方法,除非你有充分的理由不这样做(例如,黑盒组件,需要使用配置。)
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多