我试图将包和实体放在同一个文件中,但它没有编译它给我一个错误说:未知标识符std_logic,
我应该做些什么来将它们放在同一个文件中吗?
您在文件顶部提供的库声明适用于下一个设计单元(可能是您的包)。
当你开始你的实体时,它是一个新的设计单元,并以一个空的库空间开始,所以你必须重新放入库声明。如果您将多个实体放入给定文件中,也会发生同样的情况 - 您必须为每个实体放入库子句。
VHDL 编译器根本不关心文件中的任何内容,它只对其中的单元进行操作。因此,您可以entity
在一个文件中包含一些library
声明,而architecture
在另一个文件中。这些库不需要在架构文件中重做,它们与实体一起出现。如果有您只需要架构的库,则可以在架构声明之前包含它们(无论您是在一个文件还是两个文件中执行它):
library ieee;
use ieee.std_logic_1164.all;
entity foo
port (
bar: std_logic;
etc...);
end entity;
-- could start a new file here, or not.
use ieee.numeric_std.all; -- not needed for the entity as it doesn't use unsigned types
architecture a of foo is
signal counter : unsigned (10 downto 0);
begin
...
end architecture;
是的,你可以,但你必须记住,任何使用声明的库只适用于下一个实体或包,而不是整个文件!
实际上,您需要编写两个可以独立编译的文件,然后将一个的全部内容复制到另一个的末尾。