繁体   English   中英

从 VHDL 中的二进制文件初始化 std_logic_vector 的常量数组

[英]Initialize a constant array of std_logic_vector from binary file in VHDL

我已经打包了一个 IP 并且在它的顶部模块中我有一个常量数组 std_logic_vector 出于某种目的。 如果我只需要在设计中使用这个 IP 的一个实例,我可以根据需要编辑这个常量数组,瞧,但是如果我需要这个 IP 的多个实例(这个常量数组对于每个实例都应该不同)我必须找到另一种方法来做到这一点,因为当我更改其中一个 IP 实例的常量数组时,其他实例也会更改,因为它们显然使用相同的 VHDL 源文件。 我怎样才能克服这个问题? 我考虑的一种方法是为我的 IP 的顶部包装器引入一个输入端口,以便它从外部获取这个数组,当我在设计顶层实例化它时,我可以创建多个常量 arrays 并将它们相应地连接到 IP 实例. 您对完成此任务还有其他建议吗?

这是我的代码,X = 4,Y = 32(在实际情况下它们要大得多)。 到目前为止,我一直在使用 python 来查找我的评论-- DO NOT CHANGE BETWEEN COMMENTS ---- COMMENT END HERE -- ,并根据另一个文本文件自动更改其中的内容。

type myarray_t is array (X - 1 downto 0) of std_logic_vector(Y - 1 downto 0);

-- DO NOT CHANGE BETWEEN COMMENTS --
constant myarray : myarray_t := (x"01234567",
                                 x"89abcdef",
                                 x"01234567",
                                 x"89abcdef");
-- COMMENT END HERE --

将常量打包到 VHDL package 中并从那里使用它们。 创建几个文件,它们都包含相同的 VHDL 包。 然后您可以在这些文件中的每一个中拥有不同版本的常量。 您在设计中通过“使用 work.package_name.all”来包含常量。 在编译时,您将设计和其中一个包编译到一个库中,但会创建与 package 文件的不同版本一样多的不同编译库。 当您实例化您的设计时,您必须定义必须从哪个库中获取实例。 您可以通过顶层架构声明区域中的嵌入式配置来定义它,例如:

for instance1: use entity library1.your_design;
for instance2: use entity library2.your_design;

或者您可以在顶层设计的实例化中定义它:

instance1: entity library1.your_design port map ...
instance2: entity library2.your_design port map ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM