包中枚举类型的声明

Posted

技术标签:

【中文标题】包中枚举类型的声明【英文标题】:Declaration of an enumeration type in a package 【发布时间】:2022-01-23 20:21:11 【问题描述】:

我更喜欢在包中声明枚举类型,以便可以在多个实体中使用它。这是我的简化代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_SIGNED.ALL;
use work.polar_package;

entity Decoder is
    port (
        clk : in std_logic;
        reset : in std_logic
    );
end entity Decoder;

architecture behavioral of Decoder is
    signal state : polar_package.state_type;
begin
    top_modul : process (clk)
    begin
        if clk = '1' and clk'event then
            if reset = '1' then
                state <= p0;
            else

            end if;
        end if;
    end process top_modul;
end architecture behavioral;

并且我已经在包“polar_package”中声明并定义了“state_type”,如下所示:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

package polar_package is
    type state_type is (p0 , p1 , p2);
end package polar_package;

package body polar_package is

end package body polar_package;

但是,我看到以下编译错误: 未知标识符“p0”

有什么解决办法吗?

【问题讨论】:

您有一个不需要的使用子句,使 Synos​​psys 包 STD_LOGIC_UNSIGNED、STD_LOGIC_SIGNED 以及 IEEE 包 NUMERIC_STD 声明可见。您使用 polar_package 子句仅使该名称可见,如 Travis Bassano 所示。该 use 子句的保留字 all 前缀也使带有匿名参数的子程序用于预定义的运算符(例如“=”)和在类型声明之后立即隐式声明的操作直接可见。 【参考方案1】:

尝试包含整个包,

use work.polar_package.all;

或者,如果你想更明确,只包括你需要的类型:

use work.polar_package.state_type;

【讨论】:

【参考方案2】:

请尝试:

状态

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 该守护进程抱怨您的回复过于简洁。您可以通过使用问题中给出的最小、完整和可验证示例以及对可见性问题的解释来证明它的正确性。教授问题和解决方案对未来的读者很有用。 这个提议以某种方式解决了这个问题。但是我仍然很困惑为什么 state_type 值的使用必须以包名为前缀! 想象一下这个问题和它的答案对未来的读者来说可能是多么缺乏启发性。

以上是关于包中枚举类型的声明的主要内容,如果未能解决你的问题,请参考以下文章

c#中怎样定义枚举?

C语言枚举类型是啥意思?

java枚举类型书上也没有在枚举类里声明有static的枚举变量,为啥我这就不行了

java怎么声明枚举类型

c语言中的布尔类型、枚举类型是个啥概念?

C# 枚举类型的声明和使用