(57)【要約】【課題】モデルベース開発において、ハードウェアリソースの消費量を抑える上でより好適な変数のデータ形式を容易に見つけ出すことを可能とする。【解決手段】自動コード生成処理では、演算モデルを構成する関数ブロック単位で、該演算モデルに基づく原ソースコードと（Ｓ３１５）、変換ルールに従いデータ形式が変換された変数が用いられた変換ソースコードとが生成され（Ｓ３２０，Ｓ３２５）、これらのうち、ハードウェアリソースの消費量がより小さいソースコードが選択される。このため、異なるデータ形式の変数が用いられた演算モデルを複数作成しなくても、変換ルールを適宜設定することで、ハードウェアリソースの消費量を抑える上でより好適な変数のデータ形式を見つけ出すことができる。【選択図】図４
2012185542.tif 000002
【特許請求の範囲】
【請求項１】
演算処理を表す演算モデルに基づき、該演算処理を予め定められたプログラム言語で記述した原ソースコードを生成する原ソースコード生成手段と、
予め定められた変換ルールに従い、前記演算処理にて用いられるいずれかの変数に関して、前記演算モデルにおいて設定されている数値を表現するための形式を変換する変換手段と、
前記変換手段により変換された前記形式の前記変数を用いた前記演算処理を前記プログラム言語で記述した変換ソースコードを生成する変換ソースコード生成手段と、
前記原ソースコードと前記変換ソースコードとを解析し、各ソースコードから生成されたオブジェクトコードに従いＣＰＵが動作する際に生じるハードウェアリソースの消費量がどの程度かを判別する判別手段と、
前記判別手段により判別された前記ハードウェアリソースの消費量に関する選択条件に従い、前記原ソースコードと前記変換ソースコードとのうちの一方を選択する選択手段と、
を備えることを特徴とするコード生成装置。
【請求項２】
請求項１に記載のコード生成装置であって、
前記ハードウェアリソースの消費量とは、前記ソースコードから生成された前記オブジェクトコードを記憶する際に必要となる記憶容量と、該オブジェクトコードに従いＣＰＵが動作する際に必要となるＲＡＭ容量と、該オブジェクトコードに従い動作して前記演算処理を行うＣＰＵに生じる処理負荷のうちの少なくとも一つであること、
を特徴とするコード生成装置。
【請求項３】
請求項１または請求項２に記載のコード生成装置において、
前記変換ルールとは、前記変数の前記形式を、該形式により表現される数値の精度、或いは、該形式により表現可能な数値の範囲のうちの少なくとも一方を向上させることができる前記形式に変換するというルールであること、
を特徴とするコード生成装置。
【請求項４】
請求項３に記載のコード生成装置において、
前記変換ルールとは、前記演算処理における前記形式が異なる複数の前記変数を用いた演算手順に関して、これらの変数の前記形式を、該形式により表現される数値の精度、或いは、該形式により表現可能な数値の範囲のうちの少なくとも一方を向上させることができる同一の前記形式に変換するというルールであること、
を特徴とするコード生成装置。
【請求項５】
請求項３または請求項４に記載のコード生成装置において、
予め定められた精度で小数により数値を表現する前記形式を固定小数点数形式とし、
前記変換ルールの一つは、前記演算処理における精度が異なる前記固定小数点数形式の前記変数が複数用いられた前記演算手順に関して、これらの変数の前記形式を、浮動小数点数により数値を表す前記形式に変換するというルールであること、
を特徴とするコード生成装置。
【請求項６】
請求項３から請求項５のうちのいずれか１項に記載のコード生成装置において、
予め定められた範囲の整数を表現可能な前記形式を整数形式とし、
前記変換ルールの一つは、前記演算処理における表現可能な整数の範囲が異なる前記整数形式の前記変数が複数用いられた前記演算手順に関して、これらの変数の前記形式を、該変数の前記整数形式にて表現可能な整数の範囲を全て含む、同一の整数の範囲を表現可能な前記整数形式に変換するというルールであること、
を特徴とするコード生成装置。
【請求項７】
請求項１から請求項６のうちのいずれか１項に記載のコード生成装置において、
前記演算モデルは、前記演算処理の一部を、当該演算処理における手順の集合であって、当該演算モデルに基づき生成される前記ソースコードにおいてサブルーチンとして記述される関数ブロックとして表しており、
前記演算手順とは、１または複数の前記関数ブロックにより実現される手順であること、
を特徴とするコード生成装置。
【請求項８】
請求項１から請求項７のうちのいずれか１項に記載のコード生成装置において、
ユーザからの指示に応じて前記選択条件を設定する選択条件設定手段を、さらに備えること、
を特徴とするコード生成装置。
【請求項９】
請求項８に記載のコード生成装置において、
前記ハードウェアリソースの消費量とは、前記ソースコードから生成された前記オブジェクトコードを記憶する際に必要となる記憶容量であり、
前記選択条件として、前記原ソースコードと前記変換ソースコードとから生成されるそれぞれの前記オブジェクトコードの前記記憶容量の差分と、予め定められた判定用閾値とを比較した結果に関する記憶容量条件が設けられており、
前記選択条件設定手段は、ユーザからの指示に応じて前記記憶容量条件に係る前記判定用閾値を設定すること、
を特徴とするコード生成装置。
【請求項１０】
請求項１から請求項９のうちのいずれか１項に記載のコード生成装置において、
前記演算モデルが表す前記演算処理は、１または複数の手順からなる複数のステップから構成されており、
前記判別手段は、前記原ソースコードと前記変換ソースコードについて、それぞれ、前記ステップに対応する記述の集合毎に、前記ハードウェアリソースの消費量がどの程度かを個別に判別し、
前記選択手段は、前記記述の集合毎に、該記述の集合における前記ハードウェアリソースの消費量に関する前記選択条件に従いいずれかの前記ソースコードを個別に選択すること、
を特徴とするコード生成装置。
【請求項１１】
請求項１０に記載のコード生成装置において、
前記演算モデルは、前記演算処理の一部を、当該演算処理における手順の集合であって、当該演算モデルに基づき生成される前記ソースコードにおいてサブルーチンとして記述される関数ブロックとして表しており、
前記ステップは、１または複数の前記関数ブロックから構成されていること、
を特徴とするコード生成装置。
【請求項１２】
請求項１１に記載のコード生成装置において、
ユーザからの指示に応じて、前記ステップに対応する前記関数ブロックを設定するステップ設定手段を、さらに備えること、
を特徴とするコード生成装置。
【請求項１３】
請求項１から請求項１２のうちのいずれか１項に記載のコード生成装置において、
前記変換ソースコード生成手段は、自動変数を用いて前記形式の変換に必要な処理が行われるように記述された前記変換ソースコードを生成すること、
を特徴とするコード生成装置。
【請求項１４】
演算処理を表す演算モデルに基づき、該演算処理を予め定められたプログラム言語で記述した原ソースコードを生成する原ソースコード生成手順と、
予め定められた変換ルールに従い、前記演算処理にて用いられるいずれかの変数に関して、前記演算モデルにおいて設定されている数値を表現するための形式を変換する変換手順と、
前記変換手順にて変換された前記形式の前記変数を用いた前記演算処理を前記プログラム言語で記述した変換ソースコードを生成する変換ソースコード生成手順と、
前記原ソースコードと前記変換ソースコードとを解析し、各ソースコードから生成されたオブジェクトコードに従いＣＰＵが動作する際に生じるハードウェアリソースの消費量がどの程度かを判別する判別手順と、
前記判別手順にて判別された前記ハードウェアリソースの消費量に関する選択条件に従い、前記原ソースコードと前記変換ソースコードとのうちの一方を選択する選択手順と、
をコンピュータに実行させることを特徴とするコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデルに基づきソースコードを自動生成するコード生成装置等に関する。
【背景技術】
【０００２】
従来、例えば車両のエンジンＥＣＵのプログラムの開発においては、開発者が直接ソースコードを記述せず、目的とするプログラムの機能を、より作成が簡易で視認性の良い「モデル」という形態で記述する場合がある。開発者は、このモデルに対応したプログラム開発環境がインストールされたワークステーション，パーソナルコンピュータ等を用い、そのモデルにて定義された演算処理等のシミュレーションを行うと共に、該モデルからソースコードを自動生成する。
【０００３】
このようにしてモデルに基づきソースコードを自動生成するプログラム開発は、モデルベース開発と呼ばれており、モデルベース開発を行うためのプログラム開発環境としてＭａｔｌａｂ（登録商標）が知られている。Ｍａｔｌａｂ（登録商標）においては、開発者は、当該プログラム開発環境の付加機能を提供するＳｉｍｕｌｉｎｋ（登録商標）を用いてモデルを記述する。
【０００４】
そして、Ｓｉｍｕｌｉｎｋ（登録商標）においては、モデルは、各種演算やファイルからのデータの読み出し等を行う機能単位であるブロックや、ブロック間のデータの入出力を示す結線等の組合せとして記述される。すなわち、複数のブロックが結線によってつなぎ合わされることにより、エンジン制御におけるデータの入出力や、各種演算処理等を表現する集合体がモデルである。
【０００５】
特許文献１には、このようなモデルベース開発に用いられるソースコードの生成装置について記載されている。特許文献１に記載のコード生成装置によれば、複数の種別（例えば、装置の仕向け地や機種等）の機能が記述された一つのモデルから特定の種別に対応するソースコードを生成する際、対応しない種別についての機能の記述がモデルから除去される。これにより、不要なソースコードが生成されることを防ぐことができ、ＲＯＭ容量の小さいソースコードを生成することが可能となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２２７５００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、プログラミングにおける変数の型として、整数型，浮動小数点数型，固定小数点数型等、様々な種類が設けられている。そして、演算の精度を向上させるためには、より広範囲の数値を表すことができるよう、データ長がより長い変数を用いることや、浮動小数点数型の変数を用いること等が必要となるが、このような変数を用いることで、ＲＯＭ，ＲＡＭ容量やＣＰＵの処理負荷等、ハードウェアリソースの消費量が増加してしまう。これに対し、車載装置等の組み込みシステム用のプログラム開発においては、コストに関する要求が厳しく、ハードウェアリソースの消費量に関して厳しい制約が課せられる。
【０００８】
本願発明は上記課題に鑑みてなされたものであり、モデルベース開発において、ハードウェアリソースの消費量を抑える上でより好適な変数の形式を容易に見つけ出すことが可能となるコード生成装置等を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題に鑑みてなされた請求項１に記載のコード生成装置は、演算処理を表す演算モデルに基づき、該演算処理を予め定められたプログラム言語で記述した原ソースコードを生成する原ソースコード生成手段と、予め定められた変換ルールに従い、演算処理にて用いられるいずれかの変数に関して、演算モデルにおいて設定されている数値を表現するための形式を変換する変換手段と、を備えることを特徴とする。また、該コード生成装置は、変換手段により変換された形式の変数を用いた演算処理をプログラム言語で記述した変換ソースコードを生成する変換ソースコード生成手段と、原ソースコードと変換ソースコードとを解析し、各ソースコードから生成されたオブジェクトコードに従いＣＰＵが動作する際に生じるハードウェアリソースの消費量がどの程度かを判別する判別手段と、判別手段により判別されたハードウェアリソースの消費量に関する選択条件に従い、原ソースコードと変換ソースコードとのうちの一方を選択する選択手段と、備えることを特徴とする。
【００１０】
このような構成によれば、形式が異なる変数を用いて同一の演算処理を行う複数のモデルを作成しなくても、一つの演算モデルを作成するのみで、該演算モデルで定義された形式の変数が用いられた原ソースコードと、変換ルールに従い形式が変換された変数が用いられた変換ソースコードとが生成される。そして、選択条件として、例えば、ＲＯＭ，ＲＡＭ容量が小さくなるソースコードを選択する、或いは、ＣＰＵの処理負荷を抑えることができるソースコードを選択する等といった条件を設けることで、原ソースコードと変換ソースコードのうち、ハードウェアリソースの消費量が小さくなるソースコードが選択される。
【００１１】
すなわち、開発者は、変換ルールにより演算モデルで定義されている変数の形式を一括して変えることで、ハードウェアリソースの消費量を低減可能か否か把握することができ、様々な変換ルールを設け、各変換ルールによりハードウェアリソースの消費量を低減可能か否か試すことができる。このため、演算モデルで定義されている個々の変数の形式を再設定し、異なる形式の変数を用いて同一の演算処理を行う複数の演算モデルを作成するという手間のかかる作業を行わなくても、変換ルールを設定するのみで、現状の演算モデルで定義されている変数の形式よりもハードウェアリソースの消費量を低減可能な変数の形式を見つけ出すことができるのである。
【００１２】
したがって、請求項１に記載のコード生成装置によれば、モデルベース開発において、ハードウェアリソースの消費量を抑える上でより好適な変数の形式を容易に見つけ出すことが可能となる。
【００１３】
なお、請求項２に記載されているように、ハードウェアリソースの消費量とは、ソースコードから生成されたオブジェクトコードを記憶する際に必要となる記憶容量と、該オブジェクトコードに従いＣＰＵが動作する際に必要となるＲＡＭ容量と、該オブジェクトコードに従い動作して演算処理を行うＣＰＵに生じる処理負荷のうちの少なくとも一つであっても良い。
【００１４】
こうすることにより、ＲＯＭ，ＲＡＭ容量が小さく、ＣＰＵの性能が低い低コストのハードウェア環境でプログラムを動作させるための変数の形式を見つけ出すことが可能となる。
【００１５】
また、変換ルールに従い変数の形式を変換することで演算処理の精度が悪化してしまうとなると、変換ルールの適用により何らかの障害が発生してしまうおそれがある。
そこで、請求項３に記載のコード生成装置では、変換ルールとは、変数の形式を、該形式により表現される数値の精度、或いは、該形式により表現可能な数値の範囲のうちの少なくとも一方を向上させることができる形式に変換するというルールとなっている。
【００１６】
このような変換ルールに従った変数の形式の変換によれば、演算処理の精度の悪化を防ぐことができ、変換ルールに従い変数の形式を変えた場合であっても、演算モデルで定義された形式の変数を用いた場合と同等以上の性能や品質を得ることができる。このため、演算モデルで定義された形式の変数を用いた場合に得られる性能や品質を維持しながら、ハードウェアリソースの消費量を抑える上でより好適な変数の形式を容易に見つけ出すことが可能となる。
【００１７】
しかしながら、闇雲に変数の形式を変えたとしても、ハードウェアリソースの消費量を抑えることができるとは限らず、どのような手順に用いられる変数の形式をどのように変えるかが問題となる。
【００１８】
ここで、固定小数点数型，浮動小数点数型等の数値の表現方法が異なる変数や、データ長の異なる変数等、形式が異なる変数を用いて演算を行う際には、各変数の形式を統一する調整処理が必要となるが、モデルベース開発に用いられる従来のコード生成装置として、このような調整処理の記述を自動生成するものが知られている。しかしながら、演算モデルに基づき生成されたソースコードにおいて、上記演算の各段階で不適切に形式を変える手順が記述されてしまうと、調整処理が効率良く行われず、必要以上に命令数が増え、ハードウェアリソースの消費量が過剰に増加してしまうおそれがある。
【００１９】
そこで、請求項４に記載のコード生成装置では、変換ルールとは、演算処理における形式が異なる複数の変数を用いた演算手順に関して、これらの変数の形式を、該形式により表現される数値の精度、或いは、該形式により表現可能な数値の範囲のうちの少なくとも一方を向上させることができる同一の形式に変換するというルールとなっている。
【００２０】
このようにして変数の形式を変換することで、演算手順に用いられる変数の形式を予め統一することができ、該演算手順の途中で変数の形式を変える手順を記述する必要が無くなるため、ハードウェアリソースの消費量をより一層抑えることができる。また、変数の形式が、数値の精度、或いは、表現可能な数値の範囲のうちの少なくとも一方を向上させる形式に変換されるため、演算手順の精度の悪化を防ぐことができる。
【００２１】
このため、請求項４に記載のコード生成装置によれば、演算モデルで定義された形式の変数を用いた場合の性能等を維持しつつ、より効果的にハードウェアリソースの消費量を抑えることができる変数の形式を容易に見つけ出すことが可能となる。
【００２２】
また、一般的に、固定小数点数型の変数を用いた演算は、浮動小数点数型の変数を用いた場合よりも演算の精度は低くなるが、その反面、ハードウェアリソースの消費量を抑えることができるというメリットがある。このため、モデルベース開発においても、開発者は、要求される演算精度に基づく許容範囲内で、なるべく固定小数点数型の変数を用いて演算を行うようモデルを記述する。
【００２３】
ここで、固定小数点数型の変数においては、該変数の値が１増減する際の該変数が表す数値の変動幅（例えば、２バイト長の固定小数点数型の変数ならば、０ｘ０００Ａが表す数値と０ｘ０００９が表す数値の差分の絶対値、以後、重みと記載）が固定され、開発者は、固定小数点数型の変数を用いる際には重みを設定する必要がある。そして、重みが異なる複数の固定小数点数型の変数を用いた演算を行う際には、これらの変数の重みを同一にしなければ正しい演算結果を得ることができず、各変数の重みを同一にする調整処理が必要となる。このため、モデルベース開発に用いられる従来のコード生成装置においても、このような調整処理の記述を自動生成するものが知られている。
【００２４】
しかしながら、演算モデルに基づき生成されたソースコードにおいて、上記演算の各段階で不適切に重みを変える手順が記述されてしまうと、調整処理が効率良く行われず、必要以上に命令数が増え、ハードウェアリソースの消費量が過剰に増加してしまうおそれがある。
【００２５】
そこで、請求項５に記載のコード生成装置では、予め定められた精度で小数により数値を表現する形式を固定小数点数形式とし、変換ルールの一つは、演算処理における精度が異なる固定小数点数形式の変数が複数用いられた演算手順に関して、これらの変数の形式を、浮動小数点数により数値を表す形式に変換するというルールである。
【００２６】
このようにして変数の形式を変換することで、演算手順に用いられる変数を予め浮動小数点数型に統一することでき、演算手順の途中で重みを変える手順を記述する必要が無くなる。また、一般的に、浮動小数点数型の変数を用いた演算は、固定小数点数型の変数を用いた場合よりも演算の精度が高くなるため、変換ルールの適用により演算手順の精度が悪化することを防ぐことができる。
【００２７】
このため、請求項５に記載のコード生成装置によれば、演算モデルで定義された形式の変数を用いた場合の性能等を維持しつつ、より効果的にハードウェアリソースの消費量を抑えることができる変数の形式を容易に見つけ出すことが可能となる。
【００２８】
また、データ長や符号の有無が異なる整数型の変数を複数用いた演算を行う際には、各変数の符号の有無やデータ長を統一する調整処理を行う必要がある。そして、モデルベース開発に用いられる従来のコード生成装置として、このような調整処理の記述を自動生成するものが知られている。
【００２９】
しかしながら、演算モデルに基づき生成されたソースコードにおいて、上記演算の各段階で不適切に形式を変える手順が記述されてしまうと、調整処理が効率良く行われず、必要以上に命令数が増え、ハードウェアリソースの消費量が過剰に増加してしまうおそれがある。
【００３０】
そこで、請求項６に記載のコード生成装置では、予め定められた範囲の整数を表現可能な形式を整数形式とし、変換ルールの一つは、演算処理における表現可能な整数の範囲が異なる整数形式の変数が複数用いられた演算手順に関して、これらの変数の形式を、該変数の整数形式にて表現可能な整数の範囲を全て含む、同一の整数の範囲を表現可能な整数形式に変換するというルールである。
【００３１】
このようにして変数の形式を変換することで、演算手順に用いられる整数型の変数のデータ長や符号の有無を予め統一することができ、演算手順の途中でデータ長等を変える手順を記述する必要が無くなる。また、各変数にて表現可能な整数値の上限値が低下することや、該整数値の下限値が上昇することは無いため、演算手順の精度が悪化することは無い。
【００３２】
このため、請求項６に記載のコード生成装置によれば、演算モデルで定義された形式の変数を用いた場合の性能等を維持しつつ、より効果的にハードウェアリソースの消費量を抑えることができる変数の形式を容易に見つけ出すことが可能となる。
【００３３】
また、モデルベース開発においては、モデルにおける記述の一部を、プログラミングにおける関数に相当するサブシステム（関数ブロック）という単位で表すこともでき、関数ブロックを有するモデルに基づき生成されたソースコードにおいては、関数ブロックでの処理はサブルーチンとして記述される。
【００３４】
そして、同一の関数ブロック内で行われる複数の演算手順に対し個別に変換ルールが適用され、各演算手順に用いられる変数が異なる形式に統一されてしまった場合には、各演算手順に用いられる変数同士の形式を統一するための調整処理がさらに必要となり、ハードウェアリソースの消費量が増加してしまうおそれがある。
【００３５】
そこで、請求項７に記載のコード生成装置は、演算モデルは、演算処理の一部を、当該演算処理における手順の集合であって、当該演算モデルに基づき生成されるソースコードにおいてサブルーチンとして記述される関数ブロックとして表しており、演算手順とは、１または複数の関数ブロックにより実現される手順となっている。
【００３６】
このようにして変数の形式を変換することで、サブルーチン単位で変数の形式が統一され、ハードウェアリソースの消費量をより一層抑えることができる。このため、請求項７に記載のコード生成装置によれば、より効果的にハードウェアリソースの消費量を抑えることができる変数の形式を容易に見つけ出すことが可能となる。
【００３７】
また、本願発明におけるコード生成装置を用いて開発されるプログラムが動作するハードウェア環境に応じて、原ソースコードと変換ソースコードとを選択する選択条件は異なるものとなることが考えられる。
【００３８】
そこで、請求項８に記載のコード生成装置は、ユーザからの指示に応じて選択条件を設定する選択条件設定手段を、さらに備える。
こうすることにより、作成されるプログラムが動作するハードウェア環境に応じて最適な選択条件を設けることができ、ハードウェア環境に見合った変数の形式を容易に見つけ出すことが可能となる。
【００３９】
また、請求項９に記載されているように、ハードウェアリソースの消費量とは、ソースコードから生成されたオブジェクトコードを記憶する際に必要となる記憶容量であり、選択条件として、原ソースコードと変換ソースコードとから生成されるそれぞれのオブジェクトコードの記憶容量の差分と、予め定められた判定用閾値とを比較した結果に関する記憶容量条件が設けられており、選択条件設定手段は、ユーザからの指示に応じて記憶容量条件に係る判定用閾値を設定しても良い。
【００４０】
こうすることにより、ＲＯＭ容量を十分に低下させることができる変数の形式を容易に見つけ出すことが可能となる。
ところで、既に述べたように、モデルベース開発においては、モデルにおける記述の一部を関数ブロックという単位で表すこともでき、このような関数ブロックを適宜用いることで、演算モデルにて記述されている処理の内容をよりわかり易くすることができる。
【００４１】
また、上述した変換ルールに従い変数の形式を変えたとしても、該変数を用いて行われる演算の内容等によっては、ハードウェアリソースの消費量が殆ど変化しない場合や、ハードウェアリソースの消費量が増加してしまう場合もある。
【００４２】
このため、例えば、変換ルールの適用により得られた変換ソースコード全体としては、ハードウェアリソースの消費量を十分に低減させることができないという場合であっても、特定の部分においては、ハードウェアリソースの消費量を十分に低減させることができるという場合も考えられる。
【００４３】
そこで、請求項１０に記載のコード生成装置では、演算モデルが表す演算処理は、１または複数の手順からなる複数のステップから構成されており、判別手段は、原ソースコードと変換ソースコードについて、それぞれ、ステップに対応する記述の集合毎に、ハードウェアリソースの消費量がどの程度かを個別に判別し、選択手段は、記述の集合毎に、該記述の集合におけるハードウェアリソースの消費量に関する選択条件に従いいずれかのソースコードを個別に選択する。
【００４４】
こうすることにより、開発者は、演算モデルを構成するステップ単位で変換ルールの適用により得られる効果を計ることができ、変換ルールに従い変数の形式を変えるべき箇所を容易に把握することが可能となる。
【００４５】
なお、請求項１１に記載されているように、演算モデルは、演算処理の一部を、当該演算処理における手順の集合であって、当該演算モデルに基づき生成されるソースコードにおいてサブルーチンとして記述される関数ブロックとして表しており、ステップは、１または複数の関数ブロックから構成されていても良い。
【００４６】
こうすることにより、開発者は、演算モデルの関数ブロック単位で変換ルールの適用により得られる効果を計ることができ、変換ルールに従い変数の形式を変えるべき箇所を容易に把握することが可能となる。
【００４７】
なお、請求項１１に記載されているように、コード生成装置は、ユーザからの指示に応じて、ステップに対応する関数ブロックを設定するステップ設定手段をさらに備えていても良い。
【００４８】
こうすることにより、演算モデルにおける関数ブロック単位で、変換ルールの適用により得られる効果を計る範囲を設定することができ、より柔軟に、変換ルールに従い変数の形式を変えるべき箇所を捜すことができる。
【００４９】
また、既に述べたように、組み込みシステム用のプログラム開発においては、コストに関する要求が厳しく、ハードウェアリソースの消費量に関して厳しい制約が課せられる。
そこで、請求項１２に記載のコード生成装置では、変換ソースコード生成手段は、自動変数を用いて形式の変換に必要な処理が行われるように記述された変換ソースコードを生成する。
【００５０】
こうすることにより、変数の形式を変える処理を行うための静的変数が確保されず、ＲＡＭ容量を節約することができる。
なお、請求項１３には、請求項１に記載のコード生成装置としてコンピュータを動作させるコード生成プログラムについて記載されている。このようなコード生成プログラムを用いることで、モデルベース開発において、ハードウェアリソースの消費量を抑える上でより好適な変数の形式を容易に見つけ出すことが可能となる。
【図面の簡単な説明】
【００５１】
【図１】コード生成装置として作動するＰＣの構成を示すブロック図である。
【図２】固定小数点数モデルを示すブロック図である。
【図３】コード生成ツールの構成を示すブロック図である。
【図４】自動コード生成処理についてのフローチャートである。
【図５】固定小数点数モデルに基づき生成された原ソースコードと変換ソースコードである。
【図６】整数モデルを示すブロック図と、整数モデルに基づき生成された原ソースコードと変換ソースコードである。
【発明を実施するための形態】
【００５２】
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００５３】
［構成の説明］
（１）コード生成装置の構成について
図１には、本実施形態におけるコード生成装置として作動する周知のパーソナルコンピュータ（ＰＣ）１の構成を示すブロック図が記載されている。図１に記載されているように、ＰＣ１は、ディスプレイ１０，ＨＤＤ（ハードディスクドライブ）２０，ＣＰＵ（演算装置）３０，ＲＯＭ４０，ＲＡＭ５０，入力装置６０等を備える。
【００５４】
ディスプレイ１０は、ＣＰＵ３０から受けた映像信号を、ユーザに対して映像として表示する。
入力装置６０は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ３０に出力する。
【００５５】
ＲＡＭ５０は読み出し、書き込み可能な揮発性メモリであり、ＲＯＭ４０は読み出し専用の不揮発性メモリであり、ＨＤＤ２０は読み出し、書き込み可能な不揮発性メモリである。ＲＯＭ４０、ＨＤＤ２０には、ＣＰＵ３０が読み出して実行するプログラム等が予め記憶されている。また、ＨＤＤ２０には、後述するモデルが記憶されている。
【００５６】
ＲＡＭ５０は、ＣＰＵ３０がＲＯＭ４０，ＨＤＤ２０に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域、及び作業用のデータを一時的に保存するための記憶領域として用いられる。
【００５７】
ＣＰＵ３０は、ＰＣ１に電源が投入されることによって起動すると、ＲＯＭ４０から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるオペレーティングシステム（ＯＳ）その他のプログラムをＨＤＤ２０から読み出して実行することにより、起動処理を行う。起動処理以後、電源が遮断されるまで、ＣＰＵ３０は、入力装置６０からの信号や、ＯＳによってあらかじめ定められたスケジュール等に基づいて、ＨＤＤ２０に記録されている各種プログラムをＯＳ上のプロセスとして実行する。また、上記の起動処理及びプロセスにおいて、ＣＰＵ３０は必要に応じて入力装置６０から信号の入力を受け付け、また、ディスプレイ１０に映像信号を出力し、また、ＲＡＭ５０，ＨＤＤ２０に対してデータの読み出し／書き込みの制御を行う。
【００５８】
（２）コード生成ツールについて
次に、ＰＣ１にインストールされている本実施形態のコード生成ツールについて説明する。コード生成ツールは、ＨＤＤ２０に保存され、ＯＳ上のプロセスとして実行されるアプリケーションの１つであり、ＰＣ１は、コード生成ツールを動作させることで、モデルベース開発を行うためのコード生成装置として作動する。なお、該コード生成装置は、車載装置等といった組み込みシステム向けのプログラム開発に用いられることが考えられるが、これに限定されることは無く、あらゆる用途のプログラム開発に用いることができる。
【００５９】
コード生成ツールは、ＯＳの仕様に従ったユーザの入力装置６０の操作によって起動し、その後ユーザの入力装置６０の操作に基づいてモデルからソースコードを生成する。
ソースコードとは、例えばＣ＋＋等のプログラミング言語の仕様に則ってプログラム開発者が作成するプログラムの一表現形態である。ソースコードはコンパイラ、リンカ等に入力されることで、ＣＰＵ等が直接実行できるオブジェクトコードに変換される。なお、オブジェクトコードもプログラムの一表現形態である。
【００６０】
モデルとは、ソースコードよりも記述が簡易になり、かつ人による可読性が高くなる目的で定められたモデル言語仕様に基づいて作成されるプログラムの一表現形態である。モデルとしては、例えばＳｉｍｕｌｉｎｋ（登録商標）によって作成されるＳｉｍｕｌｉｎ ｋモデルがある。Ｓｉｍｕｌｉｎｋ（登録商標）モデルが、Ｍａｔｌａｂ（登録商標）上で動作するＲｅａｌ  Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐ（登録商標：以下ＲＴＷと記す）に入力されることにより、このＲＴＷが当該Ｓｉｍｕｌｉｎｋ（登録商標）モデルに対応するソースコードを生成する。
【００６１】
Ｓｉｍｕｌｉｎｋ（登録商標）モデルは、ブロックと呼ばれる機能単位の組み合わせからなる集合体として作成される。組み合わせとは、機能単位間の入出力の繋がりをいう。ブロックの具体例としては、例えば入力される２つの数値データの加算をして出力する加算ブロック等がある。また、Ｓｉｍｕｌｉｎｋ（登録商標）では、変数における数値の表現形式（具体的には、例えば、符号の有無や変数のデータ長等により定められる表現可能な数値の範囲や、浮動小数点数，固定小数点数等といった数値を表現する方式等）であるデータ形式として、複数の種類が設けられており、モデルでは、ブロックに対して入出力される数値データが保存される変数のデータ形式が定義されている。
【００６２】
また、複数のブロックの集合体をサブシステムというブロックの一種として定義することもできる。このサブシステムは、プログラミングにおける関数に相当し、ブロックの中にブロックが含まれるような入れ子構造のブロックの作成も許されており、サブシステムを有するモデルに基づき生成されたソースコードにおいては、サブシステムでの処理はサブルーチンとして記述される。なお、以後、サブシステムのことを関数ブロックとも記載する。
【００６３】
また、Ｓｉｍｕｌｉｎｋ（登録商標）モデル中の各ブロックは、それぞれ属性情報を有することができる。属性情報としては、例えば当該ブロックの名称、入出力するデータの値域定義等がある。
【００６４】
本実施形態におけるモデルも、Ｓｉｍｕｌｉｎｋ（登録商標）モデルと同様にブロックから成り、サブシステムとしてのブロックの記述やブロックの入れ子構造が許され、各ブロックが属性情報を有することができる。また、ブロック或いはサブシステムへの入出力となる数値データが保存される変数のデータ形式を任意に定義することができる。
【００６５】
なお、図２には、モデルの一例として、数値を４バイトの固定小数点数により表すデータ形式である固定小数点数形式の変数を用いた演算処理を表す固定小数点数モデル１００が記載されている。なお、該固定小数点数モデル１００は、関数ブロックを示すものであっても良い。
【００６６】
図２に記載されているように、固定小数点数モデル１００は、ブロック１１１〜１１３からなる第一集合体１１０と、ブロック１２１〜１２３からなる第二集合体１２０と、これらの集合体のうちの一方を選択するスイッチ１３０とを有している。そして、数値データであるＵｎｉｔ８＿ｉｎ＿Ａ１０７の値に応じてスイッチ１３０により選択された集合体から出力された数値データが、固定小数点数モデル１００から出力される数値データ（ｉｎｔ３２＿ｏｕｔ＿Ｘ１４０）となることを示している。
【００６７】
また、各ブロックに接続される結線が数値データの入出力を示しており、ブロックに向かう矢印が付された結線が該ブロックに入力される数値データであり、ブロックを起点とする矢印が付された結線が、該ブロックから出力される数値データである。そして、各結線には、該結線に対応する数値データが保存される変数のデータ形式の定義１１４〜１１９，１２４〜１２９がなされている。
【００６８】
また、第一集合体１１０には、数値データであるｉｎｔ３２＿ｉｎ＿Ｘ１０１〜ｉｎｔ３２＿ｉｎ＿Ｚ１０３が入力される。また、各ブロック１１１〜１１３は、当該ブロックに入力される数値データの加算を行うことを示しており、入力される各数値データは、対応する結線に定義されたデータ形式の変数に保存された状態で各ブロックにて加算されると共に、加算結果が、対応する結線に定義されたデータ形式の変数に保存された状態で各ブロックから出力されることを示している。
【００６９】
一方、第二集合体１２０には、同様の数値データであるｉｎｔ３２＿ｉｎ＿Ｘ１０４〜ｉｎｔ３２＿ｉｎ＿Ｚ１０６が入力され、また、各ブロック１２１〜１２３は、当該ブロックに入力される数値データの減算を行うことを示している。そして、第一集合体１１０と同様にして、結線に対応するデータ形式の変数に保存された状態で、各ブロックにおいて数値データの入出力がなされる。
【００７０】
また、図３には、本実施形態のコード生成ツール２００の構成を示すブロック図が記載されている。該コード生成ツール２００は、演算処理を表わす演算モデル２１０に基づき原ソースコードを生成すると共に、該演算モデル２１０で定義されているものとは異なるデータ形式の変数を用いて同様の演算処理を記述した変換ソースコードを生成するよう構成されている。
【００７１】
具体的に説明すると、図３に記載されているように、コード生成ツール２００は、その機能面から、原ソースコード生成部２２０，変換ソースコード生成部２３０，選択部２５０，設定部２７０に分けられる。
【００７２】
そして、原ソースコード生成部２２０は、入力される演算モデル２１０に基づき、該演算モデルで定義されたデータ形式の変数を用いて演算処理が記述されている原ソースコードを生成する。
【００７３】
一方、変換ソースコード生成部２３０は、予め設定された変換ルール２４０（詳細は後述する）に従い演算モデル２１０におけるいずれかの変数についてデータ形式を変換し、変換したデータ形式の変数を用いた同様の演算処理が記述された変換ソースコードを生成する。なお、変換ソースコードでは、データ形式の変換に必要な処理が自動変数を用いて行われるよう記述される。
【００７４】
そして、選択部２５０は、演算モデル２１０に基づき生成された原ソースコード，変換ソースコードを解析し、各ソースコードにて記述された演算処理を行う際のハードウェアリソースの消費量がどの程度かを判別すると共に、ハードウェアリソースの消費量に関する選択条件２６０（詳細は後述する）に基づき、一方のソースコードを選択する。
【００７５】
なお、ハードウェアリソースの消費量とは、例えば、各ソースコードから生成されるオブジェクトコードのサイズや、該オブジェクトコードに従いＣＰＵが動作する際に必要となるＲＡＭ容量や、演算処理に必要なＣＰＵの処理負荷等を意味する。
【００７６】
さらに、設定部２７０は、入力装置６０を介して受け付けた指示に応じて選択条件２６０や変換ルール２４０を設定する。
なお、原ソースコード生成部２２０，変換ソースコード生成部２３０，選択部２５０，設定部２７０の区別は、あくまでもコード生成ツール２００の機能面から見た区別であって、必ずしもプログラムとしては分離している必要はない。実際、本実施形態においては、これらは一体のプログラムとして実現される。
【００７７】
また、生成されたソースコードは、ＨＤＤ２０に記録されているコンパイラやリンカを実行することによってオブジェクトコードに変換される。
（３）変換ルールについて
コード生成装置では、変数のデータ形式として、特定のデータ長の固定小数点数形式や、単精度或いは倍精度の浮動小数点数により数値を表すもの（浮動小数点数形式）や、特定範囲の整数を表すもの（整数形式）等が設けられている。なお、本実施形態では、同様の方式で数値を表現するデータ形式であっても、表現可能な数値範囲が異なる場合（換言すれば、符号の有無やデータ長等が異なる場合）には、データ形式が異なるものとしている。
【００７８】
また、固定小数点数形式の変数においては、該変数の値が１増減する際の、該変数が表す数値の変動幅（例えば、２バイト長の固定小数点数型の変数ならば、０ｘ０００Ａが表す数値と０ｘ０００９が表す数値の差分の絶対値、以後、重みと記載）が固定され、開発者は、固定小数点数形式の変数を用いる際には重みを設定する必要がある。なお、本実施形態では、重みの異なる固定小数点形式の変数は、データ形式が異なるものとしている。
【００７９】
そして、異なるデータ形式の変数同士の演算が行われる場合には、各変数のデータ形式を同一にする調整処理が必要となり、コード生成装置は、このような調整処理の記述を自動生成するよう構成されている。
【００８０】
しかしながら、演算の各段階で不適切に変数のデータ形式を変える手順が記述されてしまうと、調整処理が効率良く行われず、ハードウェアリソースの消費量が過剰に増加してしまうおそれがある。そこで、異なるデータ形式の変数を用いた演算が行われている関数ブロック等において、これらの変数のデータ形式を予め統一するといった変換ルールにより、ハードウェアリソースの消費量を抑えることができると考えられる。
【００８１】
また、変数のデータ形式の統一に際しては、演算モデル２１０により表される演算処理の精度を落とすことの無いようデータ形式を変換することが必要となる。このため、変数のデータ形式を、元のデータ形式により表される数値の精度、或いは、表現可能な数値の範囲のうちの少なくとも一方を向上させることが可能なデータ形式に変換する変換ルールを設けることが考えられる。
【００８２】
このような点を踏まえ、コード生成装置では、以下のような変換ルールが設けられている。
まず、第一の変換ルールとして、重みの異なる固定小数点数形式の変数が複数用いられた演算が行われている箇所（例えば、関数ブロック）において、これらの変数を、同一データ長の浮動小数点数形式に変換するというルールが設けられている。
【００８３】
また、第二の変換ルールとして、表現可能な整数の範囲が異なる整数形式の変数が複数用いられた演算が行われている箇所（例えば、関数ブロック）において、これらの変数のデータ形式を、各変数に係る整数形式で表現可能な整数の範囲を全て含む同一の範囲を表現可能な整数形式に変換するというルールが設けられている。
【００８４】
（４）選択条件について
上述したハードウェアリソースの消費量に関する選択条件としては、原ソースコードを用いた場合と変換ソースコードを用いた場合のハードウェアリソースの消費量を比較し、ハードウェアリソースの消費量がより低くなるソースコードを選択するといったものが考えられる。また、これ以外にも、選択条件として、変換ソースコードを用いることでハードウェアリソースの消費量を十分低減させることができる場合には変換ソースコードを選択し、そうでない場合には、原ソースコードを選択するといったものも考えられる。
【００８５】
具体的には、選択条件として、例えば、原ソースコードと変換ソースコードに基づき生成される各オブジェクトコードのサイズに関する条件を設定しても良い。すなわち、オブジェクトコードのサイズが小さいソースコードを選択するといった条件でも良いし、原ソースコードに基づくオブジェクトコードのサイズから変換ソースコードに基づくオブジェクトコードのサイズを減算した差分が、所定の判定用閾値を超える場合に、変換ソースコードを選択するといった条件（特許請求の範囲の記憶容量条件に相当）であっても良い。
【００８６】
なお、このような選択条件が設けられる場合には、選択部２５０は、例えば、各ソースコードに基づきオブジェクトコードを実際に生成し、各オブジェクトコードのサイズを比較することで、各ソースコードの解析を行っても良い。また、設定部２７０は、開発者からの指示に応じて、上述の判定用閾値を設定するよう構成されていても良い。
【００８７】
また、選択条件として、各ソースコードに基づき生成されたオブジェクトコードに従い演算処理を行う際のＣＰＵの処理負荷に関する条件が考えられる。このような場合には、オブジェクトコードのサイズが小さいソースコードを、ＣＰＵの処理負荷が低くなるソースコードとみなして選択しても良い。また、選択部２５０は、各オブジェクトコードに基づき演算処理に必要な命令数を計算し、命令数の少ないオブジェクトコードに対応するソースコードを、ＣＰＵの処理負荷が低くなるソースコードとみなして選択しても良い。
【００８８】
また、選択条件として、各ソースコードに基づき演算処理を行う際に必要となるＲＡＭ使用量に関する条件が考えられる。このような場合には、選択部２５０は、各ソースコードを解析して演算処理に必要な静的変数や動的変数のサイズを見積り、該サイズの小さいソースコードをＲＡＭ使用量が少ないソースコードとして選択しても良い。
【００８９】
なお、上述したオブジェクトコードのサイズに基づく条件や、ＣＰＵの処理負荷に関する条件や、ＲＡＭ使用量に基づく条件を組み合わせたものを、選択条件としても良い。
［動作の説明］
次に、本実施形態のコード生成装置（ＰＣ１）が、演算モデルに基づき原ソースコードと変換ソースコードとを生成すると共に、選択条件に従い一方のソースコードを選択する自動コード生成処理について、図４に記載のフローチャートを用いて説明する。なお、本処理は、入力装置６０を介して、開発者が選択した演算モデルからソースコードを生成する旨の指示を受け付けた際に開始される。
【００９０】
Ｓ３０５では、ＣＰＵ３０は、開発者により選択された演算モデルを読み込み、Ｓ３１０に処理を移行する。
Ｓ３１０では、ＣＰＵ３０は、演算モデルを構成する関数ブロックのうち、ソースコードの生成を行っていないいずれかの関数ブロックを選択し、該関数ブロックに対応する原ソースコードを生成する（Ｓ３１５）。そして、Ｓ３２０に処理を移行する。
【００９１】
Ｓ３２０では、ＣＰＵ３０は、上述した第一，第二の変換ルールに従いデータ形式を変換することで、関数ブロック内で用いられている変数のデータ形式を統一する。そして、Ｓ３２５に処理を移行する。
【００９２】
Ｓ３２５では、ＣＰＵ３０は、変換したデータ形式の変数を用いて関数ブロックにより表されている演算を記述した変換ソースコードを生成し、Ｓ３３０に処理を移行する。
Ｓ３３０では、ＣＰＵ３０は、原ソースコードと変換ソースコードの解析を行い、各ソースコードを用いた場合のハードウェアリソースの消費量を判別すると共に、解析結果と選択条件とに基づき一方のソースコードを選択する（Ｓ３３５）。そして、原ソースコードを選択した場合には、Ｓ３４０に処理を移行し、変換ソースコードを選択した場合には、Ｓ３４５に処理を移行する。
【００９３】
Ｓ３４０では、ＣＰＵ３０は、選択中の関数ブロックにおいて原ソースコードを選択した旨を示す選択結果情報をＲＡＭ５０に記憶し、Ｓ３５０に処理を移行する。
一方、Ｓ３４５では、ＣＰＵ３０は、選択中の関数ブロックにおいて変換ソースコードを選択した旨を示す選択結果情報をＲＡＭ５０に記憶し、Ｓ３５０に処理を移行する。
【００９４】
Ｓ３５０では、ＣＰＵ３０は、モデルを構成する全ての関数ブロックについて原ソースコード等の生成を行ったか否かを判定し、肯定判定の場合には（Ｓ３５０：Ｙｅｓ）、本処理を終了すると共に、否定判定の場合には（Ｓ３５０：Ｎｏ）、Ｓ３１０に処理を移行する。
【００９５】
なお、ＣＰＵ３０は、ＲＡＭ５０に記憶されている選択結果情報に基づき、各関数ブロックにて原ソースコードと変換ソースコードのどちらが選択条件に合致するものであったかをディスプレイ１０を介して提示しても良い。また、選択結果情報に基づき、各関数ブロックについて選択されたソースコードを特定し、特定したソースコードを繋ぎ合わせたものを演算モデルから生成されたソースコードとして生成し、ＲＡＭ５０に記憶しても良い。
【００９６】
［具体例について］
次に、自動コード生成処理により生成される原ソースコードと変換ソースコードの具体例について説明する。以下の具体例では、自動コード生成処理によりＣ言語のソースコードが生成されるものとする。
【００９７】
まず、先に述べた図２に記載の固定小数点数モデル１００からは、図５（ａ）に記載の原ソースコード４００と、図５（ｂ）に記載の変換ソースコード４１０とが生成される。
図２に記載されているように、固定小数点数モデル１００では、各結線に設けられている定義１１４〜１１９，１２４〜１２９として、“ｓｆｉｘ３２＿Ｓｐ０３３”，“ｓｆｉｘ３２＿Ｓｐ００３１”，“ｓｆｉｘ３２＿Ｓ１ｐ０２３”といった記載がなされている。これらの記載は、各結線に対応する数値データが保存される変数のデータ形式が、それぞれ、重みが“０．０３３”，“０．００３１”，“１．０２３”である４バイトの固定小数点数形式として定義されていることを示している。
【００９８】
すなわち、固定小数点数モデル１００では、重みの異なる固定小数点数形式の変数同士の演算が行われるため、これらの変数の重みを統一する調整処理が必要となる。このため、該固定小数点数モデル１００に基づき生成される原ソースコード４００では、該調整処理（原ソースコード４００の太字の下線部分）が記述される。
【００９９】
そして、固定小数点数モデル１００には、第一の変換ルールが適用される。第一の変換ルールに基づく変数の変換により、固定小数点数モデル１００で定義された固定小数点数形式の変数が単精度の浮動小数点数形式に変換され、変換結果を反映した変換ソースコード４１０が生成される。変換ソースコード４１０においても変数のデータ形式を変換する処理が行われるが（変換ソースコード４１０の太字の下線部分）、原ソースコード４００における調整処理よりも記述量が少ない。このため、変換ソースコード４１０のほうが、生成されるオブジェクトコードのサイズが小さくなり、ハードウェアリソースの消費量が少なくなると考えられ、自動コード生成処理では変換ソースコード４１０が選択されると考えられる。
【０１００】
なお、原ソースコード４００や変換ソースコード４１０では、固定小数点数モデル１００に入力される数値データであるｉｎｔ３２＿ｉｎ＿Ｘ１０１〜ｉｎｔ３２＿ｉｎ＿Ｚ１０３，ｉｎｔ３２＿ｉｎ＿Ｘ１０４〜ｉｎｔ３２＿ｉｎ＿Ｚ１０７が、変数ｉｎｔ３２＿ｉｎ＿Ｘ〜ｉｎｔ３２＿ｉｎ＿Ｚとして記述されている。そして、変換ソースコード４１０における太字の下線部分が、変数のデータ形式を単精度の浮動小数点数形式に変換する処理となる。該処理では、変数ｉｎｔ３２＿ｉｎ＿Ｘ〜ｉｎｔ３２＿ｉｎ＿Ｚが、自動変数として定義された単精度浮動小数点数型の変数であるｆｌｏａｔ３２＿ｉｎ＿Ｘ〜ｆｌｏａｔ３２＿ｉｎ＿Ｚに代入されており、自動変数を用いて変数のデータ形式を変換するよう記述されている。
【０１０１】
また、図６（ａ）には、演算モデルの一例として、整数形式の変数を用いた演算処理を行う整数モデル５００が記載されている。なお、該整数モデル５００もまた、関数ブロックを示すものであっても良い。
【０１０２】
図６（ａ）に記載されているように、整数モデル５００は、数値データであるｕｎｉｔ８＿ｉｎ＿Ａ５０１〜ｕｎｉｔ８＿ｉｎ＿Ｃ５０３を入力とすると共に、数値データであるｉｎｔ３２＿ｏｕｔ＿Ｘ５４０を出力とする。また、整数モデル５００は、加算を行う加算ブロック５１０と乗算を行う乗算ブロック５２０とを有している。
【０１０３】
そして、整数モデル５００では、各ブロックを結ぶ結線に設けられている定義５３０〜５３４として、“ｕｉｎｔ８”，“ｉｎｔ１６”，“ｉｎｔ３２”といった記載がなされており、これらは、各結線に対応する数値データが格納される変数のデータ形式の定義が、“１バイト長で符号無し整数を表す整数形式”，“２バイト長で符号付整数を表す整数形式”，“４バイト長で符号付整数を表す整数形式”であることを示している。
【０１０４】
すなわち、整数モデル５００では、表現可能な整数の範囲が異なる整数形式の変数同士の演算が行われるため、これらの変数のデータ形式を統一する調整処理が必要となる。このため、該モデルに基づき生成される原ソースコード６００では、該調整処理（原ソースコード６００の太字の下線部分）が記述される（図６（ｂ）参照）。
【０１０５】
そして、整数モデル５００には、第二の変換ルールが適用される。第二の変換ルールに基づく変数の変換により、変換ソースコード６１０においては、整数モデル５００に入力される数値データであるｕｎｉｔ８＿ｉｎ＿Ａ５０１〜ｕｎｉｔ８＿ｉｎ＿Ｃ５０３が、予め４バイト長の符号付整数型の変数（ｉｎｔ３２＿ｉｎ＿Ａ〜ｉｎｔ３２＿ｉｎ＿Ｃ）に保存される（図６（ｃ）参照）。このため、調整処理が不要となり、変換ソースコード６１０のほうがオブジェクトコードのサイズが小さくなり、ハードウェアリソースの消費量が低くなるため、自動コード生成処理では、変換ソースコード６１０が選択されると考えられる。
【０１０６】
［効果］
本実施形態のコード生成装置によれば、演算モデルにて定義されたデータ形式の変数を用いて演算処理を記述した原ソースコードと共に、変換ルールに従いデータ形式が変換された変数を用いて同一の演算処理を記述した変換ソースコードが生成される。そして、サブルーチン単位で原ソースコードと変換ソースコードの解析がなされ、ハードウェアリソースの消費量がより少なくなるソースコードが選択される。
【０１０７】
このため、演算モデルで定義されている個々の変数のデータ形式を再設定し、変換ルールで指定されたデータ形式の変数が用いられた演算モデルを作成するという手間のかかる作業を行わなくても、様々な変換ルールを設け、各変換ルールによりハードウェアリソースの消費量を低減可能か否か試すことができる。
【０１０８】
したがって、本実施形態のコード生成装置によれば、モデルベース開発において、ハードウェアリソースの消費量を低減させる上でより好適となる変数の形式を容易に見つけ出すことが可能となる。
【０１０９】
［他の実施形態］
（１）本実施形態の自動コード生成処理では、演算モデルにおける一の関数ブロック単位で変換ルールが適用されており、第一，第二の変換ルールにより、該関数ブロックで用いられる変数のデータ形式が統一される。しかしながら、これに限定されることは無く、複数の関数ブロック単位で変換ルールが適用されても良いし、関数ブロックとは異なる演算モデルにおける記述の集合単位で変換ルールが適用されても良い。このような場合であっても、同様の効果を得ることができる。
【０１１０】
さらに、設定部２７０は、開発者からの指示に応じて、変換ルールが適用される範囲となる関数ブロックの集合や、演算モデルにおける記述の集合を設定しても良い。こうすることにより、より柔軟に変換ルールを適用することができるため、ハードウェアリソースの消費量をより一層抑えることができる変数のデータ形式を見つけ出すことが可能となる。
【０１１１】
（２）また、本実施形態の自動コード生成処理では、関数ブロック単位（換言すれば、サブルーチン単位）で、ソースコードの解析結果と選択条件に基づきソースコードの選択が行われる。しかしながら、これに限定されることは無く、複数の関数ブロック単位でソースコードの選択が行われても良いし、関数ブロックとは異なる演算モデルにおける記述の集合単位でソースコードの選択が行われても良い。また、ソースコード全体におけるハードウェアリソースの消費量に基づき、ソースコード全体を対象として選択が行われても良い。このような場合であっても、同様の効果を得ることができる。なお、このような選択の対象となる範囲が、特許請求の範囲におけるステップに相当する。
【０１１２】
さらに、設定部２７０は、開発者からの指示に応じて、ソースコードの選択を行う単位となる関数ブロックの集合や、演算モデルにおける記述の集合を設定しても良い。こうすることにより、より柔軟に、変換ルールの適用により得られる効果を計ることが可能となり、より効果的に、ハードウェアリソースの消費量を抑えることができる変数のデータ形式を見つけ出すことが可能となる。
【０１１３】
（３）また、本実施形態では、第一，第二の変換ルールが設けられているが、これら以外にも、次のような変換ルールが設けられていても良い。
すなわち、整数形式の変数と固定小数点数形式の変数とが用いられた演算が行われている箇所（例えば、関数ブロック）において、これらの変数のデータ形式を重みが同一である固定小数点数形式（或いは、同一データ長の浮動小数点数形式）に変換するといったルールが設けられていても良い。
【０１１４】
また、整数形式の変数と固定小数点数形式の変数と単精度の浮動小数点数形式の変数が用いられた演算が行われている箇所（例えば、関数ブロック）において、これらの変数のデータ形式を単精度或いは倍精度の浮動小数点数形式に変換するといったルールが設けられていても良い。
【０１１５】
また、データ長の異なる固定小数点数形式の変数が複数用いられた演算が行われている箇所（例えば、関数ブロック）において、これらの変数のデータ形式をデータ長，重みが同一である固定小数点数形式（或いは、同一データ長の浮動小数点数形式）に変換するといったルールが設けられていても良い。
【０１１６】
このような変換ルールを適用することで、異なるデータ形式の変数を用いた演算が行われている関数ブロック等において、変数のデータ形式を、数値の精度、或いは、表現可能な数値の範囲のうちの少なくとも一方を向上させることが可能なデータ形式に統一することができ、同様の効果を得ることができる。
【０１１７】
［特許請求の範囲との対応］
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【０１１８】
本実施形態のコード生成ツール２００が、コード生成プログラムに相当する。
また、コード生成ツール２００の原ソースコード生成部２２０，変換ソースコード生成部２３０，選択部２５０，設定部２７０として動作するＰＣ１のＣＰＵ３０が、それぞれ、原ソースコード生成手段，変換手段及び変換ソースコード生成手段，判別手段及び選択手段，選択条件設定手段及びステップ設定手段に相当する。
【０１１９】
また、自動コード生成処理におけるＳ３１５が原ソースコード生成手順に、Ｓ３２０が変換手順に、Ｓ３２５が変換ソースコード生成手順に、Ｓ３３０が判別手順に、Ｓ３３５が選択手順に相当する。
【符号の説明】
【０１２０】
１…ＰＣ、１０…ディスプレイ、２０…ＨＤＤ、３０…ＣＰＵ、４０…ＲＯＭ、５０…ＲＡＭ、６０…入力装置、１００…固定小数点数モデル、１１０…第一集合体、１２０…第二集合体、１３０…スイッチ、２００…コード生成ツール、２１０…演算モデル、２２０…原ソースコード生成部、２３０…変換ソースコード生成部、２４０…変換ルール、２５０…選択部、２６０…選択条件、２７０…設定部、４００…原ソースコード、４１０…変換ソースコード、５００…整数モデル、５１０…加算ブロック、５２０…乗算ブロック、６００…原ソースコード、６１０…変換ソースコード。
【図１】
2012185542.tif 000003
【図２】
2012185542.tif 000004
【図３】
2012185542.tif 000005
【図４】
2012185542.tif 000006
【図５】
2012185542.tif 000007
【図６】
2012185542.tif 000008