首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ghdl中使用包

在ghdl中使用包
EN

Stack Overflow用户
提问于 2017-01-15 21:16:31
回答 1查看 1.4K关注 0票数 0

我正尝试在ghdl中使用我自己的包。谁能帮助我的结构和汇编。目前,我的代码如下所示:

在./my_package/my_package.vhd中

代码语言:javascript
复制
library IEEE;
use IEEE.std_logic_1164.all;

package my_package is
  constant my_constant : std_logic_vector(3 downto 0) := "1111";
end my_package;

我用my_package编译它,如下所示:

代码语言:javascript
复制
myname@myrechner my_package$ ghdl -a --work=my_package my_package.vhd

然后在./uses_my_package/use_my_package.vhd中

代码语言:javascript
复制
library IEEE;
use IEEE.std_logic_1164.all;

entity uses_my_package is
  port(
    vector_in : in std_logic_vector(3 downto 0);
    vector_out : out std_logic_vector(3 downto 0));
end uses_my_package;

architecture impl of uses_my_package is
begin
  vector_out <= vector_in;
end impl;

和./uses_my_package/testBench.vhd中:

代码语言:javascript
复制
library IEEE;
use IEEE.std_logic_1164.all;
library work;
use work.my_package.all;

entity testbench is
end testbench;

architecture tb of testbench is
  component uses_my_package is
    port (
      vector_in : in std_logic_vector(3 downto 0);
      vector_out : out std_logic_vector(3 downto 0));
  end component;

  signal vector_in_signal : std_logic_vector(3 downto 0);
  signal vector_out_signal : std_logic_vector(3 downto 0);
  constant clk_period : time := 1 ms;

begin
  dut : uses_my_package
    port map (vector_in_signal, vector_out_signal);

  process
  begin
    vector_in_signal <= "0000";
    wait for clk_period;
    assert vector_out_signal = my_constant report "fail 0000" severity error;
    vector_in_signal <= "1111";
    wait for clk_period;
    assert vector_out_signal = my_constant report "fail 1111" severity error;
    wait;
  end process;

end tb;

谁能告诉我应该如何编译这个程序,或者给我介绍一个关于ghdl中的包和库的教程?我的google-foo目前看起来很弱。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-15 21:46:55

据我所知,您的代码是有效的(除了uses_my_package.vhd实际上不是!)所以你的问题是关于编译命令行的?

这个小小的速度提升是因为你将源文件放在不同的目录中,以保持包和它们的客户端的分离……

好的,这是一个很好的实践,您只需在命令行中包含这些目录的路径。

本着保持结构整洁的精神,让我们不只是将build对象堆在根目录中,还要为它们创建一个文件夹。所以这里有一种方法。

代码语言:javascript
复制
mkdir build
cd build
ghdl -a ../my_package/my_package.vhd
ghdl -a ../uses_my_package/uses_my_package.vhd
ghdl -a ../uses_my_package/testbench.vhd
ghdl -e testbench
ghdl -r testbench

它仍然使用默认库"work“来处理所有事情。您不需要在测试台中使用library work;声明,它是隐式可见的。您只需要现有的use子句。

如果你想把你的包移动到一个不同的库mylib中,只需要在编译它的时候在命令行上指定它就可以了。

代码语言:javascript
复制
ghdl -a --work=mylib ../my_package/my_package.vhd

(注:一个微妙之处。在my_package.vhd中对work的任何引用现在都是对mylib的引用,所以如果my_package.vhd包含use work.my_secret_package.all;行,您还必须将my_secret_package.vhd编译到mylib中。这保持了库抽象的整洁,除非另外明确指定,否则mylib中的所有内容都只引用mylib )

在testbench中从该库使用它非常明显:将当前的library/use子句替换为

代码语言:javascript
复制
library mylib;
use mylib.my_package.all;

就是这样..。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41661495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档