使用自定义程序包的VHDL

时间:2019-11-17 12:08:47

标签: package vhdl

我制作了一个自定义程序包,并尝试在我的代码中使用它。由于某种原因,它无法识别我在包中声明的自定义类型。

library IEEE;
    use IEEE.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
library work;
    use work.lt_package.all;



--use lt_package.db_array;
--use work.lt_package.hb_ctl_state;
--use work.lt_package.lb_ctl_state;
--use work.lt_package.t_state;

-- synopsys translate_off
--library MACHXO2L;
--use MACHXO2L.components.all;
-- synopsys translate_on
entity LC_top is port
(
    reset                   : in  std_logic;
    clk                     : in  std_logic;
    sdi_bit_vector          : in  std_logic_vector(1 downto 0);
    red_leds_out            : out std_logic_vector(4 downto 0);
    green_leds_out          : out std_logic_vector(4 downto 0);
    sclk                    : out std_logic;
    db_out                  : out db_array;
    conv_out                : out std_logic_vector(4 downto 0)
);

我的包裹是:

library IEEE;
    use IEEE.std_logic_1164.all;
package lt_package is
end package;

package body lt_package is
type t_state is (clk_wait_op , lt_wait_op , conversion_op);
type hb_ctl_state is ( hba , hbb);
type lb_ctl_state is (lba , lbb , dlu);
type db_array is array (4 downto 0) of std_logic_vector(11 downto 0);
end package;

每当我编译代码时,它都会告诉我db_array没有声明,尽管它很明显在包中。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在包声明区域(即,在“ package lt_package is和“ end_package”之间以及包主体之前)声明您的类型,以使它们在包外部可见。

如果包中包含函数或过程,则它们的声明将在声明区域中进行(类似于许多编程语言中的函数原型),而实际的函数定义将位于包主体中。