検索
連載

モデルベースデザイン手法を使ったProgrammable SoCの協調設計【実践編I】レファレンスモデルからFPGA用サブシステムの作成まで(7/7 ページ)

「モデルベースデザイン手法を使ったProgrammable SoCの協調設計」とはどのようなものか、実践を交えて解説していく本連載。前回の準備編に続き、今回からは実際にMATLAB/Simulinkを用いたモデルベースデザイン手法により実装を行います。

Share
Tweet
LINE
Hatena
前のページへ |       

コラム3:固定小数点シミュレーション用オプションFixed-Point Designer

 FPGAでは多くの場合、固定小数点演算が行われます。それは回路面積低減、消費電力低減、演算速度向上のメリットがあるからです。MATLABとSimulinkでは、それぞれFixed-Point Designerを使うと固定小数点演算を行うことができます。例を見てみましょう。

 データ型を定義せずに計算を行うと、結果はdouble型(64ビット浮動小数点)となります。

>> A = 1/3
A =
    0.3333>> 
>> class(A)
ans =
double

 固定小数点データ型を使う場合はコマンドfiを使って、fi(値、符号の有無、ビット幅、小数部のビット幅)の順に引数を与えます。

>> B = fi(1/3, 1, 8, 7)
B = 
    0.3359
          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7
>> class(B)
ans =
embedded.fi

 固定小数点データ型同士の演算では、結果も固定小数点データ型となります。

>> B*B
ans = 
    0.1129
          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14

 バイナリや16進表示も可能です。

>> B.bin
ans =
00101011
>> B.hex
ans =
2b

 Simulinkでも同様に、図D-1のように各ブロックパラメーターの信号属性タブで固定小数点データ型(符号の有無、ビット幅、小数部のビット幅、丸めモード、オーバーフロー時の飽和処理の有無)を設定することができます。


図D-1:プロックパラメーターの信号属性タブ

 Simulinkにおける固定小数点設定は、手前や後ろに接続されるブロックでのデータ型を継承する設定がデフォルト値になっています。そのため、全てのブロックで行う必要がなく、設定は非常に楽に行えます。また、継承する方法も、手前に接続されているブロックから継承したり、後に接続されているブロックから継承したり、手前のブロックのデータ型と同じにしたり、図D-2に示すようにいくつかあります。


図D-2:データ型のドロップダウンリスト

 固定小数点化したモデルでシミュレーションを行うと、実機に実装する前に、オーバーフロー解析、打ち切り誤差などの解析が可能です。図D-3に示したフィルターモデルのシミュレーション結果波形では、入力されるデータレンジに対して、ビット幅が足りないためオーバーフローが生じています。


図D-3:固定小数点シミュレーション (クリックで拡大)

 この修正は、オーバーフロー箇所発生を探し出し、必要なビット幅を計算、修正し、他に悪影響を与えないか再度シミュレーションを行って確認するという労力の掛かる作業です。しかし、Fixed-Point Designerの機能「固定小数点ツール」は、ビット幅を自動的に最適化することができます。これを実行することで、自動的にビット幅が最適化され、図D-4のようにオーバーフローが解消しました。


図D-4:固定小数点シミュレーション結果

(次回に続く)

著者

松本 充史:MathWorks Japan アプリケーションエンジニアリング部 プリンシパルアプリケーションエンジニア


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る