2017-01-22 101 views
-1

私は16ビット幅で2の補数で表される数字 "A"を持っています。どうすればVerilogで "-A"を得ることができますか?2の補数を使用するVerilogの数値の否定

+0

まあ、 '-A'です。符号なしと2の補数の否定は同等の操作です。 – doynax

+0

Aは負または正の整数です。 – Naveen

+0

問題ではありません。単項マイナス演算子は、2の補数結果として表現可能であれば、正しい否定結果を生成します。 – doynax

答えて

0
wire [15:0] A; 
wire [15:0] M_A; // Minus A 

// The thing about 2's complement, is that the complement can be computed as NEG(x) + 1. 
// In the following way: 
assign M_A[15:0] = ~A[15:0] + 1'b1; 
+0

よろしくお願いします。私は "〜"を使ってビット賢明な逆転について知っていました。 – Naveen

0

あなたは-Aを取得するために保存された2の補数の2の補数を行うことができます。

ここに例があるとします。私は過去にそれをやった

- A = 10 
    So in 2's complement A = 0000_0000_0000_0010 
    Now for -A, 
    2's complement of A = 1111_1111_1111_1110 (-10 in 2's complement form) 

- A = -20 
    So in 2's complement A = 1111_1111_1110_1100 
    Now for -A, 
    2's complement of A = 0000_0000_0001_0100 (20 in 2's complement form) 
0

最も簡単な方法:

wire [7:0] A; 
wire [7:0] neg_A; 

assign A = 8'd4;  // 4 
assign neg_A = 0 - A; // -4 

コンパイラ/シンセサイザは、このケースでは2の補数動作を実現するために十分にスマートで、コードが読みやすいです。