コメントを拡大するだけで、use
句から.all
を削除し、必要なものだけをインポートするだけで済みます。
ことが事業者やリテラルが含まれている場合、コンパイラが...欠けているものを教えてくれます
GHDL -a test_qualified.vhd
test_qualified.vhd:14:10:オペレータのための機能なしの宣言」ない」
test_qualified.vhd:15:10:型std_ulogicと文字リテラルを '0' と一致することができない
test_qualified.vhd:15:21:演算子のない関数宣言 "="
test_qualified.vhd:15: 30:文字リテラル '1'とタイプstd_ulogicを一致させることはできません
ghdl:コンパイルエラー
これらもインポートしてください。
library ieee;
use ieee.std_logic_1164;
use ieee.std_logic_1164."not";
use ieee.std_logic_1164."=";
use ieee.std_logic_1164.'0';
-- use ieee.std_logic_1164.'1';
entity test_qualified is
end test_qualified;
architecture test of test_qualified is
signal a,b,c : ieee.std_logic_1164.std_logic;
begin
a <= not b;
c <= '0' when a = b else ieee.std_logic_1164.'1';
end test;
明らかに、ネームスペースのこのレベルの制御が必要な人はほとんどいません。しかし、それは可能です。
このコンパイル単位を異なるコンパイル単位で繰り返すと、VHDL-2008のcontext
キーワードを知り、アプリケーションに固有のcontext
と宣言します。
これらのuse節に 'all'がありますか?それを削除し、代わりに修飾名を使用してください。 (オーバーロードされた演算子に問題があるかもしれません。私が知る限り、 'use type std_logic;'に相当するものはありません) –
@BrianDrummond - これは数学と論理をすべて破っているようです。例えば、 "not"はもはや動作しません。 –
それでも動作しますが、明示的な構文でそれらを呼び出すか、明示的にインポートする必要があります: 'ieeeee.std_logic_1164.not'おそらく。 –