今日読んだVerilogのコードに、見たことのない演算子が出てきたので
~^
、情報を探して記録しました。assign slt_result[0] = (alu_src1[31] & ~alu_src2[31]) | ((alu_src1[31] ~^ alu_src2[31]) & adder_result[31]);
結論は
~^
、^~
二項演算子として使用される場合、それは同一であるか、単項演算子として使用される~^
場合、それは縮小同一である、または;^~
~&
&
これは、リダクション結果の反転である単項演算子としてのみ使用できます。
~|
|
これは、リダクション結果の反転である単項演算子としてのみ使用できます。
&~
平和はあるのか|~
?
たとえばa[2:0] &~ b[2:0]
、ここでは演算全体を&~
別の演算子とみなすことはできません。~
単項演算として最も優先されます。最初にb[2:0]
ビット単位の反転を実行し、次にand とのビット単位&
の ANDを実行します。a[2:0]
|~
テストプロセス
~^
、^~
二項演算子として使用する場合
reg [1:0] x;
initial
begin
x <= 2'b00 ~^ 2'b00;
#5 x <= 2'b01 ~^ 2'b00;
#5 x <= 2'b10 ~^ 2'b00;
#5 x <= 2'b11 ~^ 2'b00;
#5 $finish;
end
結果は次の図に示されています(^~
結果も次のとおりです)。これは同じか、
~^
、^~
単項演算子として
reg x;
initial
begin
x <= ~^ 2'b00;
#5 x <= ~^ 2'b01;
#5 x <= ~^ 2'b10;
#5 x <= ~^ 2'b00;
#5 $finish;
end
結果は以下の図に示されています(^~
結果も次のとおりです)。これは縮小同一ORです。
~&
単項演算子として使用する場合
reg [1:0] x;
initial
begin
x <= ~& 2'b00;
#5 x <= ~& 2'b01;
#5 x <= ~& 2'b10;
#5 x <= ~& 2'b11;
#5 $finish;
end
結果は次の図に示されています。これは、&
縮小と反転の結果です。
~|
単項演算子として使用する場合
reg [1:0] x;
initial
begin
x <= ~| 2'b00;
#5 x <= ~| 2'b01;
#5 x <= ~| 2'b10;
#5 x <= ~| 2'b11;
#5 $finish;
end
結果は次の図に示されています。これは、|
縮小と反転の結果です。
苦情を申し立てる
ルンソン杯予選は一昨年までに書き終えてPASS
投下してしまえばよかった!!!