受託開発実績:自動コード生成とシミュレーション環境に関する研究
自動コード生成を行い、それを仮想CPU上で動作させるためのツールを開発させていただきました。
導入前の問題点
お客様のテーマは、今までにない面白い用途にMATLAB/Simulinkを使おうというものでした。
ただし、本当にそのテーマにMATLAB/Simulinkが活用できるのか分かりません。そこで、研究委託という形でツールのプロトタイプを実装し、それを評価してみる事になりました。
テーマ自体が機密に属する事なので詳しい事は書けません。とにかく、MATLAB/Simulinkをカスタマイズしてくれるベンダーをお探しとの事で、お手伝いさせていただきました。
ちなみに、なぜ弊社にご依頼いただいたのか伺った所、このようなサービスを提供しているベンダーが他に無かったとの事です。
ソリューション
機密に触れないレベルで、作成したツールの持つ機能の1部をご紹介します。
このツールは、Simulinkモデルに記述したアルゴリズムを仮想マルチコアCPU上で実行するためのものです。
Simulink上にてモデリングを行います
■CPU上で実行したい制御アルゴリズムを実装
■プラントモデルを実装
Simulink上にてシミュレーションを行います
■Simulink上にて動作を確認します
■ツールは自動的に、CPU、ペリフェラル、プラントモデル間のデータを収集しMATファイルに保存します
仮想CPUの環境を構築します
■ユーザーがボタンを1つクリックすると、自動的に次の作業が行われます
―各CPU、各ペリフェラル毎に、自動コード生成を行います
―自動コード生成したCコードをコンパイルして仮想CPU上で実行可能な状態にします
―ペリフェラル用のCコードは、SystemCでラッピングしてハードウェアとして実行可能な状態にします
―仮想CPU環境(協調シミュレーター)をモデルに応じて自動構築します
―プラントモデルに相当するデバイスを自動生成します
仮想CPUにて実行します
■仮想CPU環境(協調シミュレーター)を実行すると、Simulinkで記述したのと同様のシミュレーションが実行されます
■ツールが、CPU、ペリフェラル、プラントモデル間のデータを収集し、MATファイルに保存します
■Simulink上のシミュレーション結果と、仮想CPU環境上のシミュレーション結果とを、自動比較する事が出来ます
このツールを作成するに当たり一番苦労したのは、マルチコア間の調整です。
Simulinkモデルを何も考えずに自動コード生成してしまうと、シングルコアなら問題ありませんが、マルチコアの場合はとある問題が発生します。
その問題を解消するために、自動コード生成したCコードを構文解析し、仮想Cコードエミュレータ(自作)上で仮想実行させて特性を解析しました。
そして、その結果をツールにフィードバックし、Simulinkモデルを自動調整した上で再び自動コード生成してやる必要がありました。