MATLABとC言語ベース高位合成の適用事例

テクニカルライター/アナリスト 福田 昭

tag: 組み込み

2010年12月21日

 

モデルベース開発の支援ツール「MATLAB/Simulink」で設計したシステムを,LSI の回路に変換する事例が増えています.Simulinkで設計したモデルを,ハードウェア記述言語(HDL)に変換するツールが整備されてきたからです.しかしSimulinkを使わず,MATLABでモデルを記述する設計者は少なくありません.そこで富士通九州ネットワークテクノロジーズ(富士通QNET)は,MATLABモデルからHDL を効率良く生成するフローを構築しました.ここでは,2010年11 月26 日に開催されたMATLAB EXPO 2010における,富士通QNET の斎藤睦巳氏による講演をレポートします.

 富士通九州ネットワークテクノロジーズ(富士通QNET)は,ネットワークシステムの開発設計や信号処理機能の開発設計,ASIC やFPGA などのハードウェア開発設計を得意とする開発設計サービス企業です.
 

 富士通QNET は,1998年に音声処理の研究開発用にMATLAB を導入しました.2000年代前半には,無線通信システムのモデリング・ツールとしてMATLAB を活用し始めました.ここ数年は,MATLAB を開発プロジェクトに利用する事例が急増しており,適用分野が拡大しています.またMATLAB で開発したモデルをFPGA やDSP などに実装するという要望が増えています.
 

 モデリング・ツールには,検証シミュレーション機能を統合したSimulinkもあります.Simulinkも富士通QNETは導入しています.しかしモデリングにはSimulinkよりも,MATLAB をより多く使っているのが現状です.
 

 MATLAB を使い続ける理由は大きく二つあります.一つは,信号処理モデルを素早く生成できるからです.具体的には,細かな文法を意識せずに済む,ライブラリが充実している,可視化機能が豊富である,といったことです.もう一つは,これが大きな理由なのですが,業界標準(デファクト・スタンダード)の信号処理モデリング・ツールであることです.信号処理のモデル化に,MATLAB は「不可欠な存在」だといえます.


次世代通信向けシステムLSI の開発

 富士通QNET がMATLAB からのLSI 設計に取り組むきっかけとなったのは,次世代通信向けシステムLSI 開発プロジェクトの一部を受託したことです.システムLSIが内蔵するモデムの開発を受託しました.受託開発部分は方式設計から回路設計までを含みます.これまでの設計ノウハウを活かすため, 今回もモデリング・ツールにMATLAB を活用していたことから, 方式開発はMATLAB で実施することになりました.
 

 ここで問題となったのが回路設計です.Simulinkにはモデルからハードウェア記述言語(HDL)を生成するツールが存在しており,すでに使われています.しかしMATLAB のモデルをHDL コードに変換するツールは存在が知られておりません.そこで,3通りの方法を検討しました.
 

 最初の案は,設計仕様書を作成し,HDL コードを手作業で作成するというものです.HDL コードの品質が安定だという良さがあります.しかし作業期間が膨大になることから,この案は見送りました.
 

 次の案は,MATLAB モデルをSimulinkモデルに修正し,SimulinkモデルをツールでHDL コードに変換するというものです.Simulinkには「HDL Coder」を始めとするHDL生成ツールがありますので,最初の案よりも手間はかかりません.しかし,MATLAB モデルをSimulinkモデルに修正する手間をどのように評価するかが問題となります.
 

 最後の案は,MATLAB モデルをツールによってC言語コードに変換し,C 言語コードをツールによってHDLコードに変換するというものです.ツールを使って自動変換を繰り返すので,原理的には短期開発が可能です.
 

 検討の結果,富士通QNET では最後の案を採用することにしました.C 言語コードをツール(高位合成ツール)によってHDL コードに変換する工程については,富士通QNET は数多くの実績を有していたからです.残りの部分である,MATLAB モデルをC 言語コードに変換する工程を構築することにしました.MATLAB のツール群には,MATLAB モデルをC 言語コードに変換するツール「Embedded MATLAB」が提供されています.これを新たに採用しました.

MATLAB モデルからC 言語コードへの変換

 具体的な作業ですが,始めに,MATLAB で記述したコードを関数ごとに3種類に区分けしました.(1)ハードウェア化する(LSI化する)関数の中で「Embedded MATLAB」が適用できるもの,(2)ハードウェア化する関数の中で「Embedded MATLAB」が適用できないもの,(3)ハードウェア化しない関数,です.
 

 1番目の関数群は,「Embedded MATLAB」によってANSI-C コードに自動変換しました.2番目の関数群は,手作業でANSI-C コードに書き換えました.3番目の関数群は「Embedded MATLAB」によってC コードに自動変換しています(図1).
 

図1 MATLABコードをHDL コードに変換するフロー

 ハードウェア化対象のANSI-C コードは,そのままでは高位合成ツールには適さない部分があります.そこで高位合成ツールに合うように,C コードを一部,書き換えています.それから高位合成ツールによってHDL コードを自動生成します.高位合成ツールは,メンター・グラフィックス社の「Catapult C Synthesis」です.
 

 さらに,MATLAB でモデルを記述するときに,関数表現を長いコードではなく,短いコードに分けて書くように記述のスタイルを改めました.MATLAB での関数が長いコードだと,ハードウェア化したときに期待通りの性能が得られないことがあるからです.

C 言語コードの検証環境をSimulink で構築

 C 言語コードの設計環境とともに,検証環境を構築しなければなりません.最も単純な方法は,MATLAB モデルの出力と高位合成用C 言語コードのモデル出力を関数ごとに比較することですが,手間が膨大になるほかに,システム全体への影響が不明だという弱点があります.
 

 ここでMathWorks社のアドバイスを受けました.Simulinkで検証環境を構築するというご提案です.そこでSimulinkでC コードの検証環境を構築しました(図2).MATLAB コードとANSI-C コード,高位合成用Cコードが混在した協調検証環境です.ANSI-C コードはSimulinkのS-Functionブロックとして組み込んでいます.
 

図2 C 言語コードの検証環境をSimulink で構築

 高位合成用C コードは,高位合成ツール「Catapult C Synthesis」のMATLAB 用ラッパー生成機能を利用してS-Functionブロックに変換しています.この機能を利用しますと,HDL コードの生成と同時にC 言語の検証用ラッパーが得られますので,検証環境の構築が容易になります.

方式開発者とLSI 設計者が対話できる

 このようにして設計・検証環境を構築した結果,手作業による設計作業に比べて開発工数を6割程度にまで短縮できました.モデルの修正をHDL コードに反映させるまでの期間は,手作業では1週間~ 2週間かかるのが,今回の設計・検証環境ではわずか1日で完了します.このため,方式開発でのチューニング作業に時間をかけられるようになりました.
 

 さらに,MATLAB のモデル(コード)を通じて,方式開発者とLSI設計者の対話が可能になるという大きな成果を得ています.例えば方式開発者がモデルを書き換えることで処理の追加をLSI設計者に打診したり,LSIの性能をもう少し高めたいのでモデルの修正をLSI設計者が方式開発者に要望したりといったやり取りができています.

 


⇒企画トップへ戻る

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! 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日