2

std_logic_vectorがあり、変更がいつ発生するかを知る必要があります。これまで私はこれを書いた:

process (cp, l1)
begin
    if rising_edge(cp) then
        rL1 <= l1;
    end if;
end process;
tickL1 <= rL1 xor l1;

rL1はl1の遅延バージョンであり、l1は変更をチェックしているstd_logic_vectorです。問題は、xorがstd_logic_vectorを返すことですが、必要なのは0または1だけです。どうすればそれを取得できますか?

4

3 に答える 3

9

なぜ誰もがXORに執着しているのですか?

changed <= '0' when rL1 = l1 else '1';
于 2012-04-28T18:00:07.513 に答える
3

使用できます

change <= or_reduce(tickL1)

また

change <= or_reduce(rL1 xor l1);

結果のすべてのシグナルをまとめたORであるため、これらのいずれかが1シグナルである場合は、changeもになります1

編集:これらのreduce関数はすべて含まれていますieee.std_logic_misc.all

于 2012-04-28T15:06:33.427 に答える
0

あなたが試すことができます:

process (cp, l1)
begin
    if rising_edge(cp) then
        rL1 <= l1;
    end if;
end process;
changed <= '0' when (rL1 xor l1) = (others => '0') else '1';

この場合changedはシングルビットです。

条件内で演算子を使用できるかどうかはよく覚えていませんothers...それが「試してみることができます」と言った理由です...それで、うまくいくかどうか教えてください...。

于 2012-04-28T15:04:41.503 に答える