VHDL 包和 std_logic_vector
VHDL package and std_logic_vector
我正在尝试声明要在端口中使用的类型,但我遇到了问题
如果我执行以下操作,我会收到 STD_LOGIC_VECTOR isn't declared
的错误
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-- Custom types --
package Common is
type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0);
type DinDout is range 11 downto 0;
end package Common ;
-- Use Custom Type
use work.Common.all;
entity MUX is
Port (
D : in Mem_in;
Q : out DinDout;
SEL : in STD_LOGIC_VECTOR (11 downto 0)
);
end MUX;
为什么我不能使用 STD_LOGIC_VECTOR?如果我将它更改为 DinDout,我会在体系结构中遇到另一个问题:to_integer 未声明;索引名称不是 dindout。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-- Custom types --
package Common is
type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0);
type DinDout is range 11 downto 0;
end package Common ;
以及使用包 Common 的实体:
-- Use Custom Type
use work.Common.all;
entity MUX is
Port (
D : in Mem_in;
Q : out DinDout;
SEL : in DinDout
);
end MUX;
architecture Arc of MUX is
begin
Q <= D(to_integer(unsigned(SEL)));
end Arc;
如何将 STD_logic_vector 添加到我的包中或解决这两个错误:to_integer 未声明;索引名称不是 dindout?
谢谢
您在一个文件中有两个图书馆单元(如果您引用的是一个文件)。虽然我不确定会发生什么,但我想它会重新启动每个单元的上下文。
这意味着你必须重复
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
在 use work.Common.all;
.
之前
此外 2**6 to 0
是一个空范围,应该是 0 to 2**6
或 2**6 downto 0
。
我正在尝试声明要在端口中使用的类型,但我遇到了问题 如果我执行以下操作,我会收到 STD_LOGIC_VECTOR isn't declared
的错误library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-- Custom types --
package Common is
type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0);
type DinDout is range 11 downto 0;
end package Common ;
-- Use Custom Type
use work.Common.all;
entity MUX is
Port (
D : in Mem_in;
Q : out DinDout;
SEL : in STD_LOGIC_VECTOR (11 downto 0)
);
end MUX;
为什么我不能使用 STD_LOGIC_VECTOR?如果我将它更改为 DinDout,我会在体系结构中遇到另一个问题:to_integer 未声明;索引名称不是 dindout。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
-- Custom types --
package Common is
type Mem_in is array (2**6 to 0) of STD_LOGIC_VECTOR (11 downto 0);
type DinDout is range 11 downto 0;
end package Common ;
以及使用包 Common 的实体:
-- Use Custom Type
use work.Common.all;
entity MUX is
Port (
D : in Mem_in;
Q : out DinDout;
SEL : in DinDout
);
end MUX;
architecture Arc of MUX is
begin
Q <= D(to_integer(unsigned(SEL)));
end Arc;
如何将 STD_logic_vector 添加到我的包中或解决这两个错误:to_integer 未声明;索引名称不是 dindout?
谢谢
您在一个文件中有两个图书馆单元(如果您引用的是一个文件)。虽然我不确定会发生什么,但我想它会重新启动每个单元的上下文。
这意味着你必须重复
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
在 use work.Common.all;
.
此外 2**6 to 0
是一个空范围,应该是 0 to 2**6
或 2**6 downto 0
。