組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:signedを使った符号付き演算

設計内容分類FPGA

実現したい仕様・課題

Verilogの信号は既定で符号なしとして扱われるため、負数を含む演算(センサ値の差分、フィルタ係数との乗算など)を符号なしのまま記述すると、比較や算術シフト、ビット拡張で意図と異なる結果になります。符号付きデータを正しく安全に演算したいというのが課題です。

設計のポイント

負数を扱う信号は signed を付けて宣言し、演算全体を符号付きで統一します。wire signed [15:0] a; のように宣言すれば、比較演算(<, >)は2の補数として正しく評価され、>>> 演算子による算術右シフト(符号ビットを保った右シフト)や、代入時の符号拡張も言語仕様に沿って行われます。注意すべきは、1つの式の中に符号なしの信号や定数が混在すると、式全体が符号なしとして評価されるというVerilogの規則です。符号付き演算を行う式では、関係するすべてのオペランドをsignedで揃えるか、$signed() によるキャストで明示します。逆に、符号なしとして扱いたい場合は $unsigned() を使います。乗算では結果のビット幅(NbitxMbit→N+Mbit)を確保し、加減算では桁あふれを考慮して1bit広い型で受けるなど、符号と幅の両方を意識した設計が、DSP的な演算処理を正しく実装する鍵となります。符号の扱いはシミュレーションで境界値(最大正値・最小負値・-1・0)を確認しておくと安全です。

【コード例】
wire signed [15:0] a, b;
wire signed [16:0] sum = a + b; // 桁あふれ対策で1bit広く
wire signed [31:0] prod = a * b; // 乗算は幅の和で受ける
wire signed [15:0] half = a >>> 1; // 算術右シフト(符号保持)
// 混在時はキャストで明示
wire signed [16:0] mix = $signed({1’b0, u_val}) + a;

verilog記述のポイント:signedを使った符号付き演算 | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ