FPGAを使った数値演算回路実現の勘所(2) ―― 乗算器の構成を考える

鈴木 昌治

tag: 半導体

技術解説 2010年7月22日

本連載では,数値演算回路をFPGA上に展開する際の考え方や注意点について紹介しています.連載2回目となる今回は,FPGAに実装する乗算器の回路構成について解説します.最近のFPGAはハード・マクロ乗算器を搭載しています.また,FPGAベンダはさまざまな仕様の乗算器を自動生成するIPコア生成ツールを提供しています.しかし,FPGA内のハードウェア・リソースが不足している場合や,ハードウェア・リソースの無駄を抑えたい場合には,自身で回路構成を検討することも必要です.(編集部)

技術解説・連載「FPGAを使った数値演算回路実現の勘所」 バック・ナンバ
第1回  加算器の構成を考える


 今回は乗算器をFPGAで実現することを考えてみます.今どきのFPGAでは,乗算器をハード・マクロ(レイアウト・レベルで最適化した大規模回路ブロック)として搭載していることが当たり前のようになっています.乗算器の構成法について考えなくても,以下のように記述することで,コンパイラ(論理合成ツール)が自動的に処理してくれます.

  out = a * b                                        (1)

 また,IPコア(大規模回路ブロック)の生成ツールも豊富です.乗算器のような定番の回路ブロックであれば,いろいろと細かい指示を出しながらIPコアとして生成することも可能となっています.

 ただし,必ずしもかゆい所に手が届くものになっていないのも事実で,思い通りの回路ブロックが手に入るとは限りません.となれば,自分で何とかするのがエンジニアというものでしょう.初心者の方でも少し勉強すれば,簡単に希望の乗算器を手に入れることができます.なにしろ,掛け算の仕組みはそれほど面倒なものではないのですから.

 

1.乗算器の構成法をおさらい

 ディジタル数値演算における乗算の方法をおさらいしておきます.乗算器の回路化にあたっては,演算の理屈を正しく理解しておく必要があります.おさらいは少々念入りにやりますが,必要があれば,拙書「ディジタル数値演算回路の実用設計」を参照してみてください.基本は,小学生の時に習った筆算を土台としています.

●10進法の乗算を考える

 図1に筆算による乗算の例を示します.



(a) 九九の応用による乗算



 
(b) 暗算が得意な人の場合
図1 10進法による乗算


 まず図1(a)ですが,35×57という乗算に対して,35(こちらを「かけられる数」,すなわち被乗数,multiplicandという)と57(こちらを「かける数」,すなわち乗数,multiplierという)のそれぞれを1けた単位に分解し,1けた単位の乗算(九九)を独立に4回に分けて行っています.

 図1(b)の方は,35を1けた単位に分解せず,2けたのままとし,57はやはり1けた単位に分解して,2回の乗算に分けて行っています.こちらの場合,図1(a)で2回に分けていた乗算を1回で済ましているので,暗黙の加算が行われていることになり,計算能力が少し余分に要ります.小学校で習ったのはこちらの方でしょう.

 どちらの場合も行っている演算の内容そのものは全く同一で,暗黙の加算を明示すれば,手順は図1(a)に集約されます.そしてここで行っている操作と言えば,1けた単位に分解された被乗数と乗数を九九した結果(これを部分積,partial productという)を,各けたの重みに合わせて位取りし,加算を行っているだけです.この「けたを合わせる」という操作を,筆算では書く位置をずらすことで表現しているわけですが,数式で表すと,図中の筆算の右側に表示したように10のべきを乗ずる必要があります.

 以上から,筆算による乗算の手順は,以下の2ステップとなります.

  • Step 1――被乗数と乗数を1けた単位の数に分解し,分解された被乗数と乗数の間で1けたの乗算を行い,部分積を求める.
  • Step 2――各部分積について,重みに合わせてけたを合わせ,全てを加算する.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日