1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

signedなしで符号付き演算

Last updated at Posted at 2019-10-13

昔signedとかないVerilog 95での開発していた時、符号付き演算をどうしていたかを残しておこうと思う。
さすがに現代においてVerilog 95縛りで開発とかはないと思うのであまり需要はないかもしれないけど何かの参考になればと思う。

verilog95で符号付き演算
module mult (a, b, out);
  input  a, b;
  output out;
  wire[ 7:0] a, b;
  wire[15:0] out;
  integer int_a, int_b;

  always(a)  int_a = {24{a[7]}, a}; 
  always(b)  int_b = {24{b[7]}, b}; 

  assign out = int_a*int_b;

endmodule

と、こんな感じで32ビットに拡張してintegerで符号付き演算ができる。integerがsigned(最上位ビットが符合ビット)だからである。ビット拡張で32ビットの巨大乗算器になってしまわないか心配になるかと思うけどそこは大丈夫。コンパイラがきちんと入出力のビット幅を見て適切なビットサイズの乗算器にしてくれます。わざわざ最上位ビットでif文で分けて…みたいな事をするよりよっぽど効率の良い回路になる。

さすがに最近の開発ではsigned使うだろうと思っていたら、つい最近signed使わずに正に最上位ビットを見て絶対値算出して、演算して、符号を戻して…とやっている人がいた。signed使わないのならせめてこの記事のようにintergerで符号計算してね。こんな記事書いても参考にならないだろうなと思っていたがまだまだ参考になる事もあるのね。。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?