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

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

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

設計のポイント

verilog記述のポイント:演算結果のビット幅と桁あふれに注意する

設計内容分類FPGA

実現したい仕様・課題

加算や乗算の結果を演算前と同じビット幅の信号で受けると、キャリー(桁上がり)や上位ビットが失われ、値の折り返し(ラップアラウンド)による誤動作が起こります。累算処理では誤差が蓄積し、発見が遅れがちです。演算結果を取りこぼさないビット幅設計を徹底したいというのが課題です。

設計のポイント

演算結果に必要なビット幅を見積もり、それを収容できる幅の信号で受けることを習慣化します。基本則として、Nbit同士の加算は最大N+1bit、NbitとMbitの乗算は最大N+Mbit、K個のNbit値の総和は N+ceil(log2(K))bit を要します。とくにアキュムレータ(累算器)は、加算回数の上限から必要幅を計算して確保しなければ、動作中に静かにオーバーフローして誤った結果を出し続けます。意図的にラップアラウンドを利用する場合(フリーランカウンタ等)を除き、代入先の幅が足りない箇所はコード上で明示的に処理(飽和処理、丸め、上位ビット破棄のコメント明記)しておくと、レビューで意図が判別できます。飽和(サチュレーション)処理は、オーバーフロー時に最大値・最小値へ張り付ける方式で、制御系や信号処理で値の折り返しによる急変を防ぐのに有効です。また、比較演算やif条件の中の演算も同じ規則で幅が決まるため、カウンタの終端判定などでは定数側の幅(ビット幅明示)と併せて確認します。シミュレーションでは最大値付近の境界条件を必ずテストパターンに含めることを推奨します。

【コード例】
wire [7:0] a, b;
wire [8:0] sum = a + b; // 加算はN+1bitで受ける
wire [15:0] prod = a * b; // 乗算はN+Mbitで受ける
// 飽和処理の例(9bit結果を8bitに飽和)
wire [7:0] sat = sum[8] ? 8’hFF : sum[7:0];

verilog記述のポイント:演算結果のビット幅と桁あふれに注意する | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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