2
m<=(s-1) mod 2

ここで 'm' は信号で、s は入力ベクトルです コードを実装しようとすると、「mod はこのコンテキストではそのようなオペランドを持つことはできません」というエラーが表示されます エラーはベクトル値の mod を取得しようとしたことが原因である可能性があります。ベクトルを整数値と同等にするか、他の方法でエラーを修正する方法はありますか?

4

3 に答える 3

3

mod 2は基本的にベクトルの最後のビットを抽出するだけであり、-1これを否定するだけなので、次のようにしないでください:

m <= not s(0);
于 2013-02-11T07:13:10.073 に答える
0

代わりにベクトルにを使用する(つまり、信号のタイプを変更するinteger)か、integer前に変換しますmod

use ieee.numeric_std.all;

i := to_integer(unsigned(s));
m := (i-1) mod 2;
于 2013-02-11T14:01:18.907 に答える
0

「s」は「std_logic_vector」として定義されていると思います。これらの演算子には、「ieee.numeric_std」ライブラリの「unsigned」または「signed」を使用することをお勧めします。タイプキャストを使用して、「std_logic_vector」を「signed」または「unsigned」に変換できます。例: unsigned(s)。とにかく、Sonicwave のソリューションはよりクリーンです。

于 2013-02-11T09:07:36.787 に答える