Verilog の ^~、~^、~&、~| 演算子

今日読んだ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

結果は次の図に示されています(^~結果も次のとおりです)。これは同じか、
バイナリ ~^ テスト結果チャート、結果検証は排他的 OR 演算です

~^^~単項演算子として

reg x;

initial
    begin
        x <= ~^ 2'b00;
        #5 x <= ~^ 2'b01;
        #5 x <= ~^ 2'b10;
        #5 x <= ~^ 2'b00;
        #5 $finish;
    end

結果は以下の図に示されています(^~結果も次のとおりです)。これは縮小同一ORです。
1元~^テスト結果表、結果検証は排他的論理和演算を簡素化

~&単項演算子として使用する場合

reg [1:0] x;

initial
    begin
        x <= ~& 2'b00;
        #5 x <= ~& 2'b01;
        #5 x <= ~& 2'b10;
        #5 x <= ~& 2'b11;
        #5 $finish;
    end

結果は次の図に示されています。これは、&縮小と反転の結果です。
1元~&テスト結果表、結果検証は縮小&反転の結果です

~|単項演算子として使用する場合

reg [1:0] x;


initial
    begin
        x <= ~| 2'b00;
        #5 x <= ~| 2'b01;
        #5 x <= ~| 2'b10;
        #5 x <= ~| 2'b11;
        #5 $finish;
    end

結果は次の図に示されています。これは、|縮小と反転の結果です。
1元〜 | テスト結果表、結果検証は削減の結果です | 否定

苦情を申し立てる

ルンソン杯予選は一昨年までに書き終えてPASS投下してしまえばよかった!

おすすめ

転載: blog.csdn.net/weixin_52027058/article/details/128670460