1

信号を取り込んでベクトルに追加する関数に取り組んでいます。

十分な数のシグナル (私の場合は 4) が追加されたら、ベクターをループしてプロセス内の整数変数に追加します。

個々の要素を整数に変換するのに問題があります。

to_integer(unsigned(myVector)) を使用してみましたが、これは 2 進数から 10 進数への変換でした。

次のようにベクターをループするときに、次のようにします。

for i in 0 to myVector'length loop
    Sum := Sum + to_integer(myVector(i));
end loop;

1 または 0 のビット値が 1 または 0 に変換され、それを使用して合計に追加できること。

何か案は?

ありがとう

PS - myVector はシグナルで、Sum は私のプロセスの整数変数です。簡単な方法がない場合、どうすればこれを行うことができますか?

4

1 に答える 1

3

numeric_std_unsigned 内のものを数えたいと仮定すると、問題は単に to_integer がベクター (符号なし) で動作する必要があることですが、myVector(i) はビット (std_logic) です。

以下は、to_integer が満足すべき 1 ビットの符号なしを作成します。

for i in 0 to myVector'length loop
    Sum := Sum + to_integer(myVector(i downto i ));
end loop;

あるいは、合成ツールが myVector をループで動的にスライスすることを好まない場合は、

for i in 0 to myVector'length loop
    if myVector(i) = '1' then
        Sum := Sum + 1;
    end if;
end loop;

しましょう。

また、ループの境界にはおそらく範囲エラーがあることに注意してください... 0 から長さは、おそらく要素よりも 1 反復多くなります。

for i in myVector'low to myVector'high loop

が優先されます...

于 2013-02-06T14:12:43.997 に答える