2つのベクトルを少しずつ見るのではなく、直接比較できるのではないかと思っていました。
例えば:
entity Comparator is
port(a,b in: std_logic_vector (2 downto 0);
out1, out2 out: std_logic);
end Comparator;
architecture behavioural of Comparator1 is
begin
if a = b then
out1 <= '1'
else if /= then
out2 <= '1'
end if;
end behaviour;
これは可能ですか?
答えは「はい」です。同じタイプとサブタイプの指示の2つの配列タイプを直接比較できます。
ただし、サンプルコードは無効です。
式a=b
の結果はブール値です。 out1
とout2
を割り当てることにより、これをstd_logicに変換します。このコンテキストでのifステートメントは、processステートメント内にある必要があります。また、2つの出力は必要ありません。
architecture foo of Comparator1 is
begin
UNLABELED:
process (a,b)
begin
if a = b then
out1 <= '1';
else
out1 <= '0';
end if;
end process;
end architecture;
代替の同時信号割り当てステートメント、上記と同等のプロセスを持つ条件付き信号割り当て:
architecture fum of Comparator1 is
begin
UNLABELED:
out1 <= '1' when a = b else '0';
end architecture;
to_integer(unsigned(a))
を使用して、整数として脅威を与えることもできます。例えば:
IF(to_integer(unsigned(a)) < to_integer(unsigned(b))) THEN