VHDL包和std_logic_vector

时间:2017-09-28 18:22:04

标签: vhdl

我正在尝试声明要在端口中使用的类型,但我遇到了问题 如果我执行以下操作,则会收到错误,即未声明STD_LOGIC_VECTOR

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?

感谢

1 个答案:

答案 0 :(得分:2)

您在一个文件中有两个库单元(如果它是您引用的单个文件)。虽然我不确定会发生什么,但我猜它会重新启动每个单元的上下文。

这意味着你必须重复 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.numeric_std.all; use work.Common.all;之前。

同样2**6 to 0是一个空范围,应为0 to 2**62**6 downto 0