web-dev-qa-db-ja.com

ベクトルを直接比較するVHDL

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;

これは可能ですか?

4
TheAlPaca02

答えは「はい」です。同じタイプとサブタイプの指示の2つの配列タイプを直接比較できます。

ただし、サンプルコードは無効です。

a=bの結果はブール値です。 out1out2を割り当てることにより、これを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;
5
user1155120

to_integer(unsigned(a))を使用して、整数として脅威を与えることもできます。例えば:

IF(to_integer(unsigned(a)) < to_integer(unsigned(b))) THEN
2
s7s