FC2カウンター FPGAの部屋 Verilog HDL で unsigned, signed の演算をする1

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Verilog HDL で unsigned, signed の演算をする1

今までは、厳密な言語仕様のVHDLで演算をしてきた。math_realパッケージをuse すれば、log2 も sin() も cos() も使用することができる。

例えば、”LOG2の値の求め方2”でスタティックなlog2の値 をreal で求めた。

VHDLのmath_realパッケージを使用した sin() と cos() の計算”では、スタティックな sin()もcos()の値を math_realパッケージを使用して求めた。

VHDLでは、”ポートを配列で宣言して下位階層に配線を接続する”事もできる。

それで、演算を本格的に使う場合は、VHDLを使って来たが、Verilog HDL も簡単な演算は使ってみようということでやってみることにした。

まずは、Verilog HDL は普通に宣言すると unsigned で、signed にする場合は、特別に signed を付けるとのことだ。(初めてでも使えるVerilog HDL文法ガイド ―― 記述スタイル編

wire        [31:0] data;
wire signed [31:0] data;


Verilog HDLでsinged と unsigned の演算の取り扱いの違いをツイッターで聞いてみた。(ツイッターのログです。@KSuzukii さん、@tkuro11 さんありがとうございました。問題がありましたら、お知らせ下さい)
比較演算子の取り扱いが気になって聞いてみました。signed になると最上位ビットが負の符号になって、大小関係が変わるはずだ。(2の補数)
通常に宣言した unsigned を signed にキャストする時は、最上位ビットに 1'b0 を付け加えて1ビット増やしてから signed にキャストするのが一般的だと思う。

signed, unsigned 演算については、元大学院生の日記さんの
[メモ]verilogのsigned演算をいろいろ試してみた”と
[メモ]verilogでsignedとunsignedの乗算
に詳しく載っていた。
signed キャストは、$signed()を使うそうだ。signed で宣言された data3 に unsigned で宣言された data1, data2の引き算の値を代入するには下の式を使うようだ。

assign data3 = $signed({1'b0, data1}) - $signed({1'b0, data2});


次は、実際に自分でXilinxのツールを使って演算をしてみたいと思う。
  1. 2013年12月03日 05:16 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/2662-d2521eb3
この記事にトラックバックする(FC2ブログユーザー)