今までは、厳密な言語仕様の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文法ガイド ―― 記述スタイル編)
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の引き算の値を代入するには下の式を使うようだ。
次は、実際に自分でXilinxのツールを使って演算をしてみたいと思う。
例えば、”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のツールを使って演算をしてみたいと思う。
コメント