VHDL引用的上下文元素

时间:2014-03-09 09:46:37

标签: vhdl

我正在用VHDL实现一些东西,而且我不理解我得到的错误:

library IEEE;
use IEEE.std_logic_1164.all;
use work.primitive.all;

entity LogicF is
    port(A,B,C:in std_logic; Y:out std_logic);
end LogicF;
architecture STRUCTURAL of LogicF is
signal notA, notB, andSign:std_logic;
begin  
    inv1:inverter port map (i=>A,o=>notA);
    inv2:inverter port map (i=>B,o=>notB);
    si1:and2 port map (i1=>notA, i2=>notB, o=>andSign);
    sau1:or2 port map (i1=>andSign, i2=>C, o=>Y);
end STRUCTURAL;

错误:(3,10):找不到引用的上下文元素。 错误:(8,1):找不到引用的实体声明“LogicF”

1 个答案:

答案 0 :(得分:0)

当Brian指出第3行时,第10个字符(3,10)是primitive中单词use.work.primitive.all;的第一个字符。看来这个软件包还没有出现在工作库中。

  

%% ghdl -a LogicF.vhdl
  LogicF.vhdl:3:10:在图书馆“工作”中找不到主要单位“原始”
  ghdl:编译错误
  %%

关于哪个工具来自(8,1)的第二个错误的问题,实体LogicF没有成功分析并且没有放在工作库中。

IEEE Std 1076(LRM),设计单位及其分析分析顺序

  

如果在尝试分析设计单元时检测到任何错误,   然后,尝试的分析被拒绝,并且没有任何效果   在当前的工作库上。

第二个错误来自实体LogicF未出现在引用的库中。

(LRM)同一部分(11.4 -1993,13.5-2008):

  

定义可以分析设计单位的顺序的规则是   可见性规则的直接后果。特别是:

a.  A primary unit whose name is referenced within a given design unit must be analyzed prior to the analysis of the given design unit.

b.  A primary unit must be analyzed prior to the analysis of any corresponding secondary unit.  

实体是主要单元(LogicF)架构(STRUCTURAL)是辅助单元。

当我使用ghdl分析你的设计'文件'时,它会在第一次错误后退出。在这种情况下,因为第二个设计单元是次要单元,第一个失败就足以阻止分析成功。如果还有其他不相关的设计单元,如果它们被证明没有错误(并且不依赖于包原语),那么它们的分析可以继续进行。

错误消息中缺少的是对任何假设的解释,这些假设通常可以在工具实现的文档中找到。

要在评论中回答Brian的问题,错误信息的格式来自Aldec,显然是Aldec-HDL工具(Google 很有用)。

他是一个专业的好奇心问题,Brian是ghdl的开发者之一。 VHDL没有要求错误要求您不要分析在同一设计文件中找到的其他设计单元。这是一个实现细节,现在我们知道Aldec做了什么。

Aldec不会与客户共享文档,否则很难寻求第三方帮助。您看到很多大学都发布了使用Aldec工具的教程。

我在另一个确定供应商的第三方论坛中发现了错误消息。