「ドントケア」入力を持ち、「ドントケア」を直接表現する VHDL 関数を実装するにはどうすればよいですか?
Free Range VHDLの演習 4.8-2a では、次のことを求められます。
...選択した信号の割り当てを使用して、これらの関数を実装する VHDL モデルを記述します。
a) F (A、B、C、D) = A'CD' + B'C + BCD'
このコードは機能します:
library ieee;
use ieee.std_logic_1164.all;
entity funca_selected is
port (
a: in std_ulogic;
b: in std_ulogic;
c: in std_ulogic;
d: in std_ulogic;
x: out std_ulogic);
end entity;
architecture rtl of funca_selected is
signal s: std_ulogic_vector(3 downto 0);
begin
s <= a & b & c & d;
with s select x <=
'1' when "0010" | "0110" | "0011" | "1010" | "1011" | "1110",
'0' when others;
end architecture;
ただし、関数定義の表現としては不十分です。コードが定義により厳密に一致するように、「ドントケア」入力を使用してコーディングしたいと考えています。これにより、作業が少なくなり、正しくするのが簡単になります。私はこれを試しました:
with s select x <=
'1' when "0-10" | "-01-" | "-110",
'0' when others;
これは機能しません: テスト ベッドでこの機能を実行すると、結果は常に「0」になります。
GHDL バージョン 0.29+gcc4.3.i386 を使用しています。
VHDL関数はどのように「ドントケア」入力を表現できますか?