查看 QuartusII 帮助 -
VHDL Primary Unit Declaration error at <location>: primary unit "<name>" already exists in library "<name>" (ID: 10430)
原因:在 VHDL 设计文件 (.vhd) 中指定位置的主要单元声明中,您声明了指定的主要单元。但是,指定的库已经包含同名的主单元。
参见 IEEE 标准 1076-2008
13.1 设计单元,第 2 段:
primary_unit ::= 实体声明
|配置声明
|包装声明
|包实例化声明
|上下文声明
| PSL_Verification_Unit
第 5 段:
主要单元的名称由该单元的初始保留字之后的第一个标识符给出。二级单位中,仅命名建筑主体;架构主体的名称由保留字 architecture 后面的标识符给出。给定库中的每个主要单元都应具有在给定库中唯一的简单名称,并且与给定实体声明相关联的每个架构主体都应具有在与其关联的架构主体名称集中唯一的简单名称实体声明。
1.3 本标准的结构和术语,1.3.1 总则,第 4 段:
在本文件中,shall 一词用于表示强制性要求。应该使用这个词来表示推荐。这个词可以用来表示允许的行为。 can这个词用来表示可能性和能力。
1.3.3 语义描述,第 2 段:
在这些语义描述中使用了以下术语,含义如下:
错误:所描述的条件代表格式错误的描述;但是,不需要实现来检测和报告这种情况。仅当在语言处理过程中通常无法检测到条件时,才认为条件是错误的。
错误:所描述的条件表示格式错误的描述;需要实现来检测条件并向工具用户报告错误。
'shall have' 在 VHDL 中是强制性的,其中违规是一种格式错误的描述并被报告为错误。
它抱怨您的 nios 声明与库中已有的声明不匹配。 (如果他们匹配现有的声明将被替换):
13.1 设计单元,第 1 段:
某些结构被独立分析并插入到设计库中;这些结构称为设计单元。一个或多个设计单元依次组成一个设计文件。
13.5 分析顺序,第 5 段:
给定库单元可能会受到在给定库单元中引用其名称的任何库单元的更改的影响。次要单元可能会受到其相应主要单元的变化的影响。如果图书馆单元发生变化(例如,通过重新分析相应的设计单元),那么所有可能受这种变化影响的图书馆单元都将过时,并且在再次使用之前应重新分析。
因此,如果重新分析同一实体类(13.1,primary_unit)的主要单元,您将替换主要单元。尝试使用不同的主要单元实体类,你会得到一个错误。
返回 QuartusII 帮助:
操作:将两个主要单元编译到不同的库中或为它们分配唯一的名称。
您声明您的工作目录包含您分析的设计文件和一个名为 nios.vhd 的文件,该文件的名称与您的设计文件 NIOS.vhd 不同。
问题不在于文件名,而在于主要单位名称。在这种情况下,它是一个主要的单元名称,Altera 可以随意在综合过程中随意使用。值得庆幸的是,它是不同实体类的主要单元。你会留下更难理解的循环分析依赖项(从 13.5 开始)。
您应该更改您的主要单位名称,因为将主要单位名称与文件名联系起来很常见(而设计文件可以包含任意数量的设计单位),您也可以更改您的设计文件名。