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

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

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

設計のポイント

verilog記述のポイント:除算・剰余演算を避ける

設計内容分類FPGA

実現したい仕様・課題

「/」や「%」による除算・剰余は、Verilogで記述はできるものの、合成すると規模が大きく遅延も長い回路になり、動作周波数を大きく制限します。変数同士の除算はそもそも合成できないツールもあります。除算を含むアルゴリズムを、FPGAに適した形で実装したいというのが課題です。

設計のポイント

除算・剰余はできる限り回避し、FPGAに適した等価な演算へ置き換えます。最も基本的なのは、除数を2のべき乗に選ぶことです。2^Nによる除算は右シフト(>> N)に、剰余は下位Nビットの切り出しに置き換えられ、回路はほぼ配線だけで済みます。カウンタの周期やバッファサイズを2のべき乗に設計しておくと、この置き換えが自然に適用できます。任意の定数による除算は、「逆数を掛けてシフトする」固定小数点手法(例:x/10 ≒ (x*205)>>11)で乗算器1個に置き換えられ、FPGA内蔵のDSPブロックで高速に実行できます。近似の誤差は必要精度に応じてビット数を選定して管理します。変数同士の除算がどうしても必要な場合は、1クロックの組み合わせ回路で実現しようとせず、複数クロックかけて計算する逐次除算回路やベンダ提供の除算IPを使用し、レイテンシを許容する設計とします。除算の必要性自体を見直す(比較のしきい値を事前計算しておく、比率でなく積の比較に変形する等)ことも有効な設計判断です。

【コード例】
// 2のべき乗の除算・剰余はシフトとビット切り出しに
wire [7:0] q = x >> 4; // x / 16
wire [3:0] r = x[3:0]; // x % 16
// 定数除算は逆数乗算+シフトで近似
wire [15:0] div10 = (x * 16’d205) >> 11; // x / 10 の近似

verilog記述のポイント:除算・剰余演算を避ける | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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