2017-01-15 10 views
0

ghdlで自分のパッケージを使用しようとしています。誰かが構造とコンパイルで私を助けることができますか?現時点では私のコードは次のようになります。ghdlでパッケージを使用する

[email protected] my_package$ ghdl -a --work=my_package my_package.vhd 

を、その後./uses_my_packageに次のように私はmy_packageでこれをコンパイルしてい

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/my_package.vhdで

/uses_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は現時点では静かなようです。ありがとうございました!

+1

ブライアンの答えに加えて、あなたは他のライブラリで分析リソースを作ることができますghdlの[-P ](https://ghdl.readthedocs.io/en/latest/Invoking_GHDL.html#ghdl-options)コマンドラインオプションで利用できます。これにより、あなたのパッケージは仕事から別の参照ライブラリに置かれます。 – user1155120

答えて

2

あなたのコードは有効です(ただし、uses_my_package.vhdは実際にはありません!)ので、あなたの質問はコンパイルコマンドラインについてですか?

少しspeedbumpは、あなたがパッケージを維持するために、異なるディレクトリにソースファイルを入れているので、約来て、彼らのクライアントが分離...

OK、これはあなただけへのパスを含める必要があり、良い習慣ですコマンドラインのそれらのディレクトリ。

構造をきちんとした状態に保つために、ルートディレクトリにビルドオブジェクトを重ねるだけでなく、フォルダも作成しましょう。だからここに1つのアプローチがあります...

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句が必要です。一つ微妙内部workへの参照を:あなたが別のライブラリ、mylibにあなたのパッケージを移動したい場合は

、ちょうど...あなたはそれをコンパイルコマンドラインで

ghdl -a --work=mylib ../my_package/my_package.vhd 

(注ことを指定します。 my_package.vhd今ではmylibへの参照であるmy_package.vhdはあなたもMYLIBにmy_secret_package.vhdをコンパイルする必要がありuse work.my_secret_package.all;行が含まれている場合。これは、クリーンなライブラリの抽象化を維持し、MYLIB内のすべてが唯一の明示的に指定しない限りMYLIBを指し)

テストベンチでそのライブラリからそれを使用することはかなり明白です:

library mylib; 
use mylib.my_package.all; 

で現在のライブラリ/使用句を交換し、それはそれだ...

関連する問題