ソリューション
Vivado 合成でサポートされている SystemVerilog 演算子
コード例は、このアンサーの最後にある表 1-1 を参照してください。
SystemVerilog 演算子は Verilog と C の演算子を組み合わせたものです。両言語で、オペランドの型およびサイズは決まっているので、演算子の型とサイズも固定です。SystemVerilog でも演算子の型とサイズは固定されています。
1. 代入演算子
単純な代入演算子「=」に追加
例 :
a[i]+=2; // same as a[i] = a[i] +2;
SystemVerilog には、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、<<<=、および >>>= など、C の代入演算子および特別なビット指定の代入演算子が含まれています。 左辺の添字式は 1 度だけ解かれるという点を除き、代入演算子はブロッキング代入と意味的には等価です。
2. バイナリ演算子
バイナリ演算子に bit 型のオペランドと logic 型のオペランドがある場合、結果値は logic 型になります。あるオペランドが int 型で、もう 1 つのオペランドが integer 型の場合、結果値は integer 型になります。Verilog-2001 にあるように、いずれかのオペランドに X または Z が含まれている場合、!= および == の演算子は X を返します。結果値が bit 型に変換されると (たとえば if 文の場合など)、これは 0 に変換されます。単項換算演算子 (& ~& | ~| ^ ~^) は任意式 (パックされた配列を含む) に適用することができます。パックされた型が 4 つの値のものである場合は logic 型の値 1 つが演算子によって返され、また、パックされた型が 2 つの値のものである場合は bit 型の値 1 つが演算子によって返されます。
int i;
bit b = &i;
integer j;
logic c = &j;
3. 条件演算子
条件文に使用される演算子
conditional_expression ::= cond_predicate ? { attribute_instance } expression : expression
4. 連結演算子
括弧 ( { } ) は Verilog の場合と同じように連結を示すために使われます。連結はパックされたベクターのビットとして処理されます。これは代入の左辺または式で使用できます。
logic log1, log2, log3;
{log1, log2, log3} = 3b111;
{log1, log2, log3} = {1b1, 1b1, 1b1}; // same effect as 3b111
演算子のコード例
表 1-1
コード例の名前 |
使用されている演算子 |
operators_example1.zip |
- 代入演算子 (+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、<<<=、>>>=)
|
operators_example2.zip |
- バイナリ演算子 (+、-、*、/、%、==、~=、===、~==、&&、||、**、< 、<=、>、>=、&、|、^、^~、~^、>>、<<、>>>、<<<)
|
operators_example3.zip |
|
operators_example4.zip |
|
---|