我正尝试在ghdl中使用我自己的包。谁能帮助我的结构和汇编。目前,我的代码如下所示:
在./my_package/my_package.vhd中
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编译它,如下所示:
myname@myrechner my_package$ ghdl -a --work=my_package my_package.vhd然后在./uses_my_package/use_my_package.vhd中
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中:
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目前看起来很弱。谢谢!
发布于 2017-01-15 21:46:55
据我所知,您的代码是有效的(除了uses_my_package.vhd实际上不是!)所以你的问题是关于编译命令行的?
这个小小的速度提升是因为你将源文件放在不同的目录中,以保持包和它们的客户端的分离……
好的,这是一个很好的实践,您只需在命令行中包含这些目录的路径。
本着保持结构整洁的精神,让我们不只是将build对象堆在根目录中,还要为它们创建一个文件夹。所以这里有一种方法。
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中,只需要在编译它的时候在命令行上指定它就可以了。
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子句替换为
library mylib;
use mylib.my_package.all;就是这样..。
https://stackoverflow.com/questions/41661495
复制相似问题