(57)【要約】      （修正有）【課題】オブジェクトコードの容量が増加するのを極力抑制するように、コード変換の前処理を行うプログラムモデル変換装置を提供する。【解決手段】モデル変換部は、モデルベースプログラムにおいて、複数のビットに対して論理演算を行うモデル部分を、演算結果が等価になるビット演算を行うモデルに変換する（Ｓ６）。これにより、変換後のモデルをソースコードに変換し、更にそれをオブジェクトコードに変換すると、複数のビットが格納されているフィールドに対するアドレスの参照回数と、それらのビットを参照するためのコードサイズが大きく削減する。【選択図】図１
2014215746.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの一部の機能をシンボル化した単位であるモデル（７３）を組み合わせて作成されたモデルベースプログラムをソースコード（７４）に変換するための前処理を行うもので、
前記モデルベースプログラムにおいて、複数のビットに対して論理演算を行うモデル部分を、演算結果が等価になるビット演算を行うモデルに変換するモデル変換手段（７１）を備えることを特徴とするプログラムモデル変換装置。
【請求項２】
前記モデル変換手段は、前記論理演算の対象となる複数のビットが、異なるビットフィールドに配置されていると、それらを同一のビットフィールドに配置するようにモデルを変換することを特徴とする請求項１記載のプログラムモデル変換装置。
【請求項３】
前記モデル変換手段は、複数のビットについて論理和演算を行うモデル部分は、前記複数のビットが配置されているビットフィールドについて、前記複数の各ビット位置に対応するマスクデータを生成し、前記マスクデータを用いたビット論理積演算を行うモデルに変換することを特徴とする請求項１又は２記載のプログラムモデル変換装置。
【請求項４】
前記モデル変換手段は、複数のビットについて論理積演算を行うモデル部分は、前記複数のビットが配置されているビットフィールドについて、前記複数の各ビット位置に対応するマスクデータを生成し、前記マスクデータを用いたビット論理積演算を行うモデルに変換することを特徴とする請求項１から３の何れか一項に記載のプログラムモデル変換装置。
【請求項５】
プログラムの一部の機能をシンボル化した単位であるモデルを組み合わせて作成されたモデルベースプログラムをソースコードに変換するための前処理を行うもので、
前記モデルベースプログラムにおいて、複数のビットに対して論理演算を行うモデル部分を、演算結果が等価になるビット演算を行うモデルに変換することを特徴とするプログラムモデル変換方法。
【請求項６】
前記ビット演算を行うモデルに変換する前に、
前記論理演算の対象となる複数のビットが、異なるビットフィールドに配置されていると、それらを同一のビットフィールドに配置するようにモデルを変換することを特徴とする請求項５記載のプログラムモデル変換方法。
【請求項７】
複数のビットについて論理和演算を行うモデル部分は、前記複数のビットが配置されているビットフィールドについて、前記複数の各ビット位置に対応するマスクデータを予め生成し、前記マスクデータを用いたビット論理積演算を行うモデルに変換することを特徴とする請求項５又は６記載のプログラムモデル変換方法。
【請求項８】
複数のビットについて論理積演算を行うモデル部分は、前記複数のビットが配置されているビットフィールドについて、前記複数の各ビット位置に対応するマスクデータを予め生成し、前記マスクデータを用いたビット論理積演算を行うモデルに変換することを特徴とする請求項５から７の何れか一項に記載のプログラムモデル変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの一部の機能をシンボル化した単位であるモデルを組み合わせて作成されたモデルベースプログラムをソースコードに変換するための前処理を行うプログラムモデル変換装置及び変換方法に関する。
【背景技術】
【０００２】
例えば車両のエンジンＥＣＵのプログラムの開発においては、開発者が直接ソースコードを記述せず、目的とするプログラムの機能を、より作成が簡易で視認性の良い「モデル」という形態で記述する場合がある。開発者は、このモデルに対応したプログラム開発環境がインストールされたワークステーション，パーソナルコンピュータ等を用い、そのモデルにて定義された演算処理等のシミュレーションを行うと共に、該モデルからソースコードを自動生成する。
【０００３】
このように、モデルに基づきソースコードを自動生成するプログラム開発はモデルベース開発と呼ばれており、モデルベース開発を行うためのプログラム開発環境としてMatlab（登録商標）が知られている。Matlabにおいては、開発者は、当該プログラム開発環境の付加機能を提供するSimulink（登録商標）を用いてモデルを記述する（例えば、特許文献１，２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２２７５００号公報
【特許文献２】特開２０１２−１８５５４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
モデルベース開発のツールによってソースコードを自動生成する際には、論理演算の対象となる複数ビットのブール代数データがあると、それらのデータを同一のビットフィールドに格納するようにコードを生成するものがある。これは、プログラムに基づきＣＰＵが処理を実行する際にワークエリアとして使用するＲＡＭの容量を節約するためである。
【０００６】
生成されたソースコードは、最終的にオブジェクトコードに変換されてＲＯＭに格納されるが、上記のようにしてソースコードを生成した結果、逆にオブジェクトコードのサイズが増大し、必要なＲＯＭ容量が増加してしまうという問題がある。これは、ブール代数データが格納されているＲＡＭ上の１バイトデータにアクセスする際に、アドレスを参照するのに４バイトのコードが必要であり、１バイト中の特定のビットを参照（マスク）するのに更に４バイトのコードが必要であるから、計８バイトのコードが生成されるからである。しかしながら、従来、上記のように必要なＲＯＭ容量が増加することを問題として、対処する技術は存在しなかった。
【０００７】
本発明は上記事情に鑑みてなされたものであり、その目的は、オブジェクトコードの容量が増加するのを極力抑制するように、コード変換の前処理を行うプログラムモデル変換装置及びプログラムモデル変換方法を提供することにある。
【課題を解決するための手段】
【０００８】
請求項１記載のプログラムモデル変換装置によれば、モデル変換手段は、モデルベースプログラムにおいて、複数のビットに対して論理演算を行うモデル部分を、演算結果が等価になるビット演算を行うモデルに変換する。このように変換すれば、変換後のモデルをソースコードに変換し、更にそれをオブジェクトコードに変換すると、複数のビットが格納されているフィールドに対するアドレスの参照回数と、それらのビットを参照するためのコードサイズを大きく削減することができる。したがって、オブジェクトコードを記憶させるＲＯＭの容量を従来よりも削減できる。
【０００９】
請求項２記載のプログラムモデル変換装置によれば、モデル変換手段は、論理演算の対象となる複数のビットが異なるビットフィールドに配置されていると、それらを同一のビットフィールドに配置するようにモデルを変換する。したがって、ＲＯＭの容量を更に削減できると共に、プログラムが実行された際に使用されるワークエリアの容量も削減できる。
【００１０】
請求項３記載のプログラムモデル変換装置によれば、モデル変換手段は、複数のビットについて論理和演算を行うモデル部分は、複数のビットが配置されているビットフィールドについて各ビット位置に対応するマスクデータを生成し、そのマスクデータを用いたビット論理積演算を行うモデルに変換する。このように変換すれば、一括したビット論理積演算により、複数のビットについての論理和演算と同じ結果を得ることができるので、ＲＯＭの容量を削減できる。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態であり、自動コード生成ツールの処理内容を示すフローチャート
【図２】図１のステップＳ６の詳細処理を示すフローチャート
【図３】図２の処理内容を説明する図
【図４】（ａ）は置換前、（ｂ）は置換後のモデルを示す図
【図５】（ａ）は置換前，置換後のソースコード及びオブジェクトコードを示す図、（ｂ）はビット詰め変数の定義に対応するソースコードを示す図
【図６】論理演算の入力ビット数に応じた、置換前，置換後のソースコードの容量を示す図
【図７】具体的な適用例を説明する図
【図８】自動コード生成ツールの機能ブロック図
【図９】自動コード生成ツールを実現するパーソナルコンピュータの機能ブロック図
【図１０】第２実施形態であり、異なるビットフィールドに配置されているデータビットを、同一のビットフィールドに配置する処理を説明する図
【発明を実施するための形態】
【００１２】
（第１実施形態）
図９に示すように、ＰＣ（パーソナルコンピュータ）１（プログラムモデル変換装置）は、ディスプレイ１０，ＨＤＤ（ハードディスクドライブ）２０，ＣＰＵ（演算装置）３０，ＲＯＭ４０，ＲＡＭ５０，入力装置６０等を備えている。ディスプレイ１０は、ＣＰＵ３０から受けた映像信号を、ユーザに対して映像として表示する。入力装置６０は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ３０に出力する。
【００１３】
ＲＡＭ５０は読み出し、書き込み可能な揮発性メモリであり、ＲＯＭ４０は読み出し専用の不揮発性メモリであり、ＨＤＤ２０は読み出し、書き込み可能な不揮発性メモリである。ＲＯＭ４０、ＨＤＤ２０には、ＣＰＵ３０が読み出して実行するプログラム等が予め記憶されている。また、ＨＤＤ２０には、後述するモデルが記憶されている。
【００１４】
ＲＡＭ５０は、ＣＰＵ３０がＲＯＭ４０，ＨＤＤ２０に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域、及び作業用のデータを一時的に保存するための記憶領域として用いられる。ＣＰＵ３０は、ＰＣ１に電源が投入されて起動すると、ＲＯＭ４０から所定のブートプログラムを読み出して実行する。そして、このブートプログラムに規定されるオペレーティングシステム（ＯＳ）や、その他のプログラムをＨＤＤ２０から読み出して実行することで起動処理を行う。
【００１５】
起動処理以降、ＣＰＵ３０は、入力装置６０からの信号やＯＳによって予め定められたスケジュール等に基づき、ＨＤＤ２０に記録されている各種プログラムをＯＳ上のプロセスとして実行する。また、上記の起動処理及びプロセスにおいて、ＣＰＵ３０は必要に応じて入力装置６０から信号の入力を受け付け、ディスプレイ１０に映像信号を出力し、ＲＡＭ５０，ＨＤＤ２０に対してデータの読み出し／書き込みの制御を行う。
【００１６】
次に、ＰＣ１にインストールされている本実施形態の自動コード生成ツール７０（図８参照）について説明する。自動コード生成ツール７０は、ＨＤＤ２０に保存され、ＯＳ上のプロセスとして実行されるアプリケーションの１つである。ＰＣ１は、自動コード生成ツール７０を動作させることで、モデルベースのプログラム開発を行うためのコード生成装置として作動する。尚、コード生成装置は、例えば車載装置等といった組み込みシステム向けのプログラム開発や、その他あらゆる用途のプログラム開発に用いることができる。
【００１７】
自動コード生成ツール７０は、ＯＳの仕様に従ったユーザによる入力装置６０の操作により起動され、その後のユーザによる入力装置６０の操作に基づいて生成されたモデルから、例えばＣ＋＋等のプログラミング言語の仕様に応じたソースコードを生成する。ソースコードはコンパイラ、リンカ等に入力されることで、ＣＰＵ等が直接実行できるオブジェクトコードに変換される。
【００１８】
モデルとは、ソースコードよりも記述を簡易にし、且つ人による可読性を高める目的で定められたモデル言語仕様に基づいて作成されるプログラムの一表現形態であり、例えばSimulinkにより作成されるSimulinkモデルがある。Simulinkモデルが、Matlab上で動作するReal Time Workshop（登録商標：以下ＲＴＷと記す）に入力されることで、このＲＴＷが当該Simulinkモデルに対応するソースコードを生成する。
【００１９】
図８に示すように、自動コード生成ツール７０は、モデル変換部７１（モデル変換手段）及びソースコード生成部７２を備えている。モデル変換部７１は、ユーザにより生成されたモデルベースプログラム中のモデル（制御モデル）７３を、後述するように異なるモデルに変換して（前処理）ソースコード生成部７２に出力する。ソースコード生成部７２は、入力された変換後のモデルをソースコード７４に変換する。
【００２０】
次に、本実施形態の作用について説明する。図１に示すように、変換対象とするモデルが指定されると（Ｓ１）、モデル変換部７１は、前記モデルから生成したコードを特定し（Ｓ２）、そのコードにビット操作命令が含まれているか否かを判断する（Ｓ３）。ビット操作命令が含まれていなければ（ＮＯ）モデル変換部７１が変換すべきモデルがないので、その旨をディスプレイ１０にメッセージとして出力し（Ｓ７）、処理を終了する。
【００２１】
一方、ステップＳ３においてビット操作命令が含まれていれば（ＹＥＳ）、そのビット操作命令に、同一のビットフィールド（フラグ構造体）にある複数のビット（ブール代数）ついて一括して行える論理演算ＯＲがあるか探す（Ｓ４）。そして、前記論理演算ＯＲがなければ（ＮＯ）、やはり変換すべきモデルがないのでステップＳ７に移行する。前記論理演算ＯＲがあれば（ＹＥＳ）、その論理演算ＯＲをビット演算ＡＮＤに置き換えたモデルを作成する（Ｓ６）。
【００２２】
ステップＳ６では、図２に示すように、上記演算論理ＯＲの入力側にある演算対象の各データが、ビットフィールドに格納されている位置（ビット詰めの順番）を取得する（Ｓ１１）。例えば、図３に示す例では、演算対象データＡ，Ｂ，Ｃが、１バイトデータＶのＭＳＢ側からそれぞれ第１ビット，第２ビット，第４ビットに格納されている。そして、取得したビット詰めの順番に応じたマスク定数を求める（Ｓ１２）。図３に示す例では、マスク定数は０ｘＤ０となる。
【００２３】
それから、ビット詰め変数（１バイトデータＶ）と、マスク定数（０ｘＤ０）とのビット演算ＡＮＤを生成すると（Ｓ１３）、論理演算ＯＲを前記ビット演算ＡＮＤに置換する（Ｓ１４）。すなわち、論理演算ＯＲ＿Ｒ
Ｒ＝Ａ||Ｂ||Ｃ
は、データＡ，Ｂ，Ｃのうち何れか１つが「１」であれば「Ｒ＝１」となる。一方、ビット演算ＡＮＤ＿Ｖ１
Ｖ１＝Ｖ＆０ｘＤ０
も、１バイトデータＶ中の、第１，第２，第４ビットにあるデータＡ，Ｂ，Ｃのうち何れか１つが「１」であれば「Ｖ１＝１」となる。したがって、論理演算ＯＲ＿Ｒとビット演算ＡＮＤ＿Ｖ１とは等価であるから、ステップＳ１４のように置換可能である（図３参照）。
【００２４】
図４（ａ）は、図３に示すモデルの置換例であり、（ａ）に示す論理演算ＯＲのモデルが、（ｂ）に示すようにビット演算ＡＮＤのモデルに置換される。そして、それぞれのモデルをソースコード及びオブジェクトコードに変換すると図５に示すようになる。置換前のオブジェクトコード容量は１８バイトであるのに対し、置換後の容量は１０バイトに低減されている。これは、３ビットの入力データについて論理演算ＯＲを行う場合に、１ビット分につき、ＲＡＭのアドレスを参照するために４バイト，前記ビットを参照するために４バイトのオブジェクトコードが必要となるからである。尚、図５（ｂ）は、置換の有無にかかわらず共通となるビット詰め変数の定義部分のソースコードである。
【００２５】
図６は、演算の対象となる複数のデータビット数が２，３，４，１０，３２である場合に、それらのデータを３２ビット詰めして置換前の論理演算ＯＲを行う場合と、置換後のビット演算ＡＮＤを行う場合とで生成されるオブジェクトコード容量を示している。入力ビット数が３以上であれば、ビット数が多くなるにつれてモデルを置換することによる容量の削減効果が大きくなっている。
【００２６】
例えば図７（ａ）に示すように、８ビットの非数チェック用ステータスレジスタＥＦＧを参照して、上位４ビットに格納される各フラグが示す異常の有無を判断する場合に、置換前では４ビットの論理演算ＯＲを行うモデルを、マスク定数０ｘＦ０とのビット演算ＡＮＤを行うモデルに置換することができる。
【００２７】
また、図７（ｂ）に示す例は、論理演算ＡＮＤを行うモデルをビット演算ＡＮＤを行うモデルに置換する場合であり、ステップＳ４〜Ｓ６，Ｓ１１，Ｓ１４の「論理演算ＯＲ」を「論理演算ＡＮＤ」に置き換えて処理を行う。同図に示すように、８ビットのダイアグフラグＦＬＡＧについて、例えばフラグＦ１とＦ３とが共に「１」であることを条件に特定の処理を実行する仕様であるとする。この場合、置換前では２ビットの論理演算ＡＮＤを行うモデルを、マスク定数０ｘＡ０とのビット演算ＡＮＤを行うモデルに置換することで、オブジェクトコード容量を４バイト削減できる。
【００２８】
以上のように本実施形態によれば、モデル変換部７１は、モデルベースプログラムにおいて、複数のビットに対して論理演算を行うモデル部分を、演算結果が等価になるビット演算を行うモデルに変換する。これにより、変換後のモデルをソースコードに変換し、更にそれをオブジェクトコードに変換すると、複数のビットが格納されているフィールドに対するアドレスの参照回数と、それらのビットを参照するためのコードサイズを大きく削減することができる。したがって、オブジェクトコードを記憶させるＲＯＭの容量を従来よりも削減できる。
【００２９】
そして、モデル変換部７１は、複数のビットについて論理演算ＯＲを行うモデル部分は、複数のビットが配置されているビットフィールドについて各ビット位置に対応するマスクデータを生成し、そのマスクデータを用いたビット演算ＡＮＤを行うモデルに変換する。したがって、ビット演算ＡＮＤを一括して行うことで、複数のビットについての論理演算ＯＲと同じ結果を得ることができ、ＲＯＭ４０の容量を削減できる。
【００３０】
加えて、モデル変換部７１は、複数のビットについて論理演算ＡＮＤを行うモデル部分も同様に、各ビット位置に対応するマスクデータを生成し、そのマスクデータを用いたビット演算ＡＮＤを行うモデルに変換する。したがって、この場合もビット演算ＡＮＤを一括して行うことでＲＯＭ４０の容量を削減できる。
【００３１】
（第２実施形態）
以下、第１実施形態と同一部分には同一符号を付して説明を省略し、異なる部分について説明する。図１０（ａ）に示すように、置換前のモデルが第１実施形態と同じ３ビットデータの論理演算ＯＲを行うものであり、それらの３ビットデータが、図１０（ｂ）に示すように異なるビットフィールド（ビット変数（１，２））に配置されていたとする。この時、モデル変換部７１は、それらを同じビットフィールド（ビット変数（１））に配置するようにモデルを変換する。
【００３２】
図１０（ｂ），（ｃ）に示す例では、ビット変数（１）の第１，第２ビットに演算対象データvar1,var2が格納されており、ビット変数（２）の第１ビットに演算対象データvar3が格納されている。この場合、ビット変数（１）の第３ビットに演算対象データvar3を格納し、前記第３ビットに格納されていた他のデータotherを、ビット変数（２）の第１ビットに格納するようにスワップする。
【００３３】
以上のように第２実施形態によれば、モデル変換部７１は、論理演算の対象となる複数のビットが異なるビットフィールドに配置されていると、それらを同一のビットフィールドに配置するようにモデルを変換する。したがって、ＲＯＭ４０の容量を更に削減できると共に、プログラムが実行された際に使用されるＲＡＭ５０におけるワークエリアの容量も削減できる。
【００３４】
本発明は上記した、又は図面に記載した実施形態にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
ビットフィールドのサイズは、８ビットや３２ビットに限らず、１６ビットや６４ビットでも良い。
ソースコードはＣ＋＋に限ることなく、その他のプログラム言語に準拠するものでも良い。
【符号の説明】
【００３５】
図面中、１はパーソナルコンピュータ（プログラムモデル変換装置）、７０は自動コード生成ツール、７１はモデル変換部（モデル変換手段）、７３は制御モデル、７４はソースコードを示す。
【図１】
2014215746.tif 000003
【図２】
2014215746.tif 000004
【図３】
2014215746.tif 000005
【図４】
2014215746.tif 000006
【図５】
2014215746.tif 000007
【図６】
2014215746.tif 000008
【図７】
2014215746.tif 000009
【図８】
2014215746.tif 000010
【図９】
2014215746.tif 000011
【図１０】
2014215746.tif 000012