(57)【特許請求の範囲】
【請求項１】
ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力工程と、
前記入力工程によって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析工程と、
前記解析工程によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換工程と、
を含んだことを特徴とする変換方法であって、
前記変換工程は、前記解析工程によって取得された変数が、前記第１のデータ型の変数を要素とする第１の配列である場合、前記第１の配列の各要素を、前記第１の配列と同数の要素を持つ配列の各要素である構造体であって、メンバーが前記第２のデータ型の変数であり、あらかじめ指定されたビット幅より大きいビット幅の数値が前記メンバーに代入された場合にはエラーを発生させる構造体に変換することを特徴とする変換方法。
【請求項２】
ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力工程と、
前記入力工程によって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析工程と、
前記解析工程によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換工程と、
を含んだことを特徴とする変換方法であって、
前記変換工程は、前記解析工程によって取得された変数を二進数表記した場合の各ビットを要素とする第１の配列の各要素を、前記第１の配列と同数の要素を持つ配列の各要素である構造体であって、メンバーが前記第２のデータ型の変数であり、１ビットより大きいビット幅の数値が前記メンバーに代入された場合にはエラーを発生させる構造体に変換することを特徴とする変換方法。
【請求項３】
コンピュータに、
ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力ステップと、
前記入力ステップによって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析ステップと、
前記解析ステップによって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換ステップと、
を実行させることを特徴とする変換プログラムであって、
前記変換ステップは、前記解析ステップによって取得された変数が、前記第１のデータ型の変数を要素とする第１の配列である場合、前記第１の配列の各要素を、前記第１の配列と同数の要素を持つ配列の各要素である構造体であって、メンバーが前記第２のデータ型の変数であり、あらかじめ指定されたビット幅より大きいビット幅の数値が前記メンバーに代入された場合にはエラーを発生させる構造体に変換することを特徴とする変換プログラム。
【請求項４】
コンピュータに、
ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力ステップと、
前記入力ステップによって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析ステップと、
前記解析ステップによって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換ステップと、
を実行させることを特徴とする変換プログラムであって、
前記変換ステップは、前記解析ステップによって取得された変数を二進数表記した場合の各ビットを要素とする第１の配列の各要素を、前記第１の配列と同数の要素を持つ配列の各要素である構造体であって、メンバーが前記第２のデータ型の変数であり、１ビットより大きいビット幅の数値が前記メンバーに代入された場合にはエラーを発生させる構造体に変換することを特徴とする変換プログラム。
【請求項５】
ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力部と、
前記入力部によって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析部と、
前記解析部によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換部と、
を有することを特徴とする変換装置であって、
前記変換部は、前記解析部によって取得された変数が、前記第１のデータ型の変数を要素とする第１の配列である場合、前記第１の配列の各要素を、前記第１の配列と同数の要素を持つ配列の各要素である構造体であって、メンバーが前記第２のデータ型の変数であり、あらかじめ指定されたビット幅より大きいビット幅の数値が前記メンバーに代入された場合にはエラーを発生させる構造体に変換することを特徴とする変換装置。
【請求項６】
ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力部と、
前記入力部によって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析部と、
前記解析部によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換部と、
を有することを特徴とする変換装置であって、
前記変換部は、前記解析部によって取得された変数を二進数表記した場合の各ビットを要素とする第１の配列の各要素を、前記第１の配列と同数の要素を持つ配列の各要素である構造体であって、メンバーが前記第２のデータ型の変数であり、１ビットより大きいビット幅の数値が前記メンバーに代入された場合にはエラーを発生させる構造体に変換することを特徴とする変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変換方法、変換プログラムおよび変換装置に関する。
【背景技術】
【０００２】
ＦＰＧＡ（Field  Programmable  Gate  Array）等の設計は、動作仕様による動作レベル設計、動作を実現するＲＴＬ（Register  Transfer  Level）設計、論理素子によるゲートレベル設計、チップ上のレイアウト設計の工程により行われる。ここで、ＲＴＬ設計においては、verilog等のハードウェア記述言語によってプログラムが記述されるが、このようなハードウェア記述言語によるプログラムの記述には、高いスキルが求められる等のデメリットがある。
【０００３】
そのため、動作すなわち記述が分かりやすく、過去の資産の流用性が高いＣ言語等のプログラム言語を用いて動作レベル設計を行い、高位合成により、Ｃ言語等のプログラム言語で記述された動作レベル設計のプログラムをverilog等のハードウェア記述言語で記述されたＲＴＬのプログラムに変換することが知られている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】岡田  尚也、山本  亮、峯岸  孝行、「高位合成におけるFIRフィルタのDSPマクロ割当て自動化」、2015年  電子情報通信学会総合大会  A-3-2
【非特許文献２】大西  洋平、谷口  一徹、冨山  宏之、「FPGA高位合成における関数インライン展開の評価」、2015年  電子情報通信学会総合大会  AS-1-2
【非特許文献３】若林  一敏、「ソフトウェアプログラムからハードウェア記述を合成する高位合成技術−プロセッサ以外の汎用プログラム実行機構−」IEICE  Fundamentals  Review  Vol.6  No.1  pp.37-50
【非特許文献４】Benjamin  CARRION  SCHAFER，Yusuke  IGUCHI，Wataru  TAKAHASHI，Shingo  NAGATANI，Kazutoshi  WAKABAYASHI，“Fixed  Point  Data  Type  Modeling  for  High  Level  Synthesis”，2010  IEICE  TRANSACTIONS  on  Electronics  Vol.E93-C  No.3  pp.361-368
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のプログラムの変換方法には、変換後のプログラムを実行するハードウェアに多くの無駄を発生させるという問題があった。
【０００６】
例えば、Ｃ言語では、変数のビット幅は３２ビット、６４ビット等のバイト単位である。これに対し、ハードウェア記述言語では、１ビット単位で様々なビット幅を扱う。このため、例えば、ハードウェア記述言語ではビット幅が１ビットで済む変数であっても、Ｃ言語で記述された場合は少なくとも１バイト、すなわち８ビットのビット幅が必要になる。
【０００７】
そして、Ｃ言語で記述されたプログラムの変数を、そのままＲＴＬのプログラムの変数に変換すると、変換後の変数のビット幅は少なくとも１バイトとなる。このため、Ｃ言語のプログラムをそのままＲＴＬのプログラムに変換し、ハードウェア上で実行すると、ハードウェアには、リソース消費量の増大や、リソース消費量の増大にともなう通信の遅延等の無駄が発生することがある。
【０００８】
また、高位合成において、変数の値からビット幅を自動的に推定し最適化を行う方法があるが、このような方法を用いても、実際に変数にどのような範囲の値が代入されるかの解析は困難であり、使用する変数領域を削減することは難しかった。そのため、変換後のプログラムを実行するハードウェアに多くの無駄を発生させることを回避することは困難であった。
【課題を解決するための手段】
【０００９】
本発明の変換方法は、ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力工程と、前記入力工程によって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析工程と、前記解析工程によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換工程と、を含んだことを特徴とする。
【００１０】
また、本発明の変換プログラムは、コンピュータに、ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力ステップと、前記入力ステップによって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析ステップと、前記解析ステップによって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換ステップと、を実行させることを特徴とする。
【００１１】
また、本発明の変換装置は、ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける入力部と、前記入力部によって受け付けられた前記プログラムから、前記第１のデータ型を用いて定義された変数を取得する解析部と、前記解析部によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する変換部と、を有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、変換後のプログラムを実行するハードウェアに多くの無駄が発生することを防止することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、高位合成およびプリプロセッサについて説明するための図である。
【図２】図２は、高位合成の一例を示す図である。
【図３】図３は、第１の実施形態に係る変換装置の構成を示すブロック図である。
【図４】図４は、第１の実施形態のプログラムの高位合成について説明するための図である。
【図５】図５は、第１の実施形態に係る第１の変換方法について説明するための図である。
【図６】図６は、第１の実施形態に係る第２の変換方法を説明するための図である。
【図７】図７は、第１の実施形態に係る第２の変換方法の課題を説明するための図である。
【図８】図８は、第１の実施形態に係る第３の変換方法を説明するための図である。
【図９】図９は、第１の実施形態に係る第４の変換方法を説明するための図である。
【図１０】図１０は、第１の実施形態に係る第５の変換方法を説明するための図である。
【図１１】図１１は、第１の実施形態に係る変換装置を用いたシミュレーションの処理の流れを示すフローチャートである。
【図１２】図１２は、プログラムが実行されることにより変換装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願に係る変換装置、変換方法および変換プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【００１５】
［第１の実施形態の概要］
まず、高位合成およびプリプロセッサについて、図１を用いて説明する。図１は、高位合成およびプリプロセッサについて説明するための図である。前述の通り、ＲＴＬ設計においては、Ｃ言語等のプログラム言語で記述された動作レベル設計のプログラムは、高位合成により、verilog等のハードウェア記述言語で記述されたＲＴＬのプログラムに変換される。そして、高位合成により生成されたＲＴＬのプログラムは、論理合成およびレイアウト設計が行われた後、ＦＰＧＡロードモジュールに出力される。
【００１６】
従来、高位合成の対象のプログラムは、Ｃ言語等によって記述されていた。しかしながら、高位合成の対象のプログラムを例えばＣ言語で記述することには、高位合成により生成されたプログラムを実行するハードウェアに多くの無駄を発生させるという問題があった。
【００１７】
例えば、verilogで記述されたプログラムにおいては、registerのビット幅を自由に定義することができる。一方、Ｃ言語はバイト境界を基本としているため、Ｃ言語で記述されたプログラムにおいては、ビット幅が８、１６、３２、６４ビット等の、１バイトすなわち８ビットの整数倍であるような変数しか定義することができない。
【００１８】
このため、例えば、verilogであればビット幅が２ビットの変数として定義可能な、範囲が０〜３である変数であっても、Ｃ言語ではビット幅が８ビットの変数として定義される。具体的には、図２に示すように、Ｃ言語のプログラムでビット幅が８ビットの変数として定義された変数Ａは、高位合成により変換された場合、verilogのプログラムにおいてもビット幅が８ビットのプログラムとして定義される。図２は、高位合成の一例を示す図である。
【００１９】
この結果、変数Ａには０〜３、すなわち２ビットまでの値しか代入されない場合は、ハードウェアにおいて変換後のverilogプログラムを実行した際に、１つの変数ごとに最低でも６ビットの領域が無駄になることになる。
【００２０】
そこで、第１の実施形態においては、図１に示すように、高位合成の対象のプログラムとして、Ｃ言語の高位合成向け仕様のプログラムが用いられる。また、高位合成の対象のプログラムは、ＦＰＧＡ等で実行する前に、バグの検出等のために、ＩＡ（Intel  Architecture）サーバ等でシミュレーションを行っておく必要がある。
【００２１】
ここで、ＩＡサーバ等の既存のサーバは、Ｃ言語等の既存のプログラム言語で記述されたプログラムのシミュレーションを行うことはできるが、実施形態のプログラムであるＣ言語の高位合成向け仕様のプログラムのシミュレーションを行うことはできない。そのため、実施形態のプログラムのシミュレーションをＩＡサーバで行うためには、プリプロセッサを用いて実施形態のプログラムをＣ言語のプログラムに変換しておく必要がある。
【００２２】
このとき、図１に示すように、高位合成の対象のプログラムは、プリプロセッサによりＣ言語のプログラムに変換され、コンパイラによりコンパイルされた後、ＩＡサーバ用ロードモジュールに出力され、ＩＡサーバによってシミュレーションが行われる。
【００２３】
第１の実施形態の変換装置は、プリプロセッサとして機能するものであり、例えばＩＡサーバにおける実施形態のプログラムのシミュレーションを可能にするものである。そして、その結果、実施形態のプログラムを高位合成の対象のプログラムとして用いることができるようになるため、高位合成により生成されたＲＴＬのプログラムを実行する際に、ハードウェアに多くの無駄が発生することを防止することができるようになる。
【００２４】
［第１の実施形態の構成］
図３を用いて、第１の実施形態の変換装置の構成について説明する。図３は、第１の実施形態に係る変換装置の構成を示すブロック図である。図３に示すように、変換装置１０は、入力部１１、解析部１２、変換部１３および出力部１４を有する。また、変換装置１０は、実施形態のプログラムの入力を受け付け、Ｃ言語のプログラムを出力する。
【００２５】
入力部１１は、実施形態のプログラムの入力を受け付ける。実施形態のプログラムは、例えばビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムである。また、解析部１２は、入力部１１によって受け付けられたプログラムから、第１のデータ型を用いて定義された変数を取得する。また、変換部１３は、解析部１２によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する。また、出力部１４は、変換によって生成されたＣ言語のプログラムを出力する。
【００２６】
図４を用いて、実施形態のプログラムの高位合成について説明する。図４は、第１の実施形態のプログラムの高位合成について説明するための図である。Ｃ言語では、ビット幅が１バイトの整数倍である変数しか定義することができないのに対し、図４に示すように、実施形態のプログラムでは、ビット幅が１バイトの整数倍でない変数を定義することができる。具体的には、実施形態のプログラムでは、ビット幅が２ビットのデータ型ｕｎｉｔ２＿ｔや、ビット幅が１８ビットのデータ型ｕｎｉｔ１８＿ｔといった、任意のビット幅のデータ型が使用可能である。
【００２７】
そして、図４に示すように、例えばビット幅が２ビットのデータ型であるｕｎｉｔ２＿ｔの変数Ａが高位合成によりverilogに変換された場合、verilogにおける変数Ａのビット幅は２ビットとなる。
【００２８】
（第１の変換方法）
ここで、変換部１３が実施形態のプログラムをＣ言語のプログラムに変換する方法を、具体例を用いて説明する。まず、図５を用いて、第１の変換方法について説明する。図５は、第１の実施形態に係る第１の変換方法について説明するための図である。
【００２９】
第１の変換方法では、変換部１３は、解析部１２によって取得された実施形態のプログラムの変数を、ビット幅が１バイトの整数倍であって、当該変数より大きいビット幅の変数に変換する。例えば、図５に示すように、変換部１３は、実施形態のプログラムのデータ型がｕｎｉｔ２＿ｔである変数Ａを、Ｃ言語のプログラムのデータ型がｕｎｉｔ８＿ｔである変数に変換する。データ型がｕｎｉｔ８＿ｔである変数のビット幅は１バイトであり、変換前の変数のビット幅である２ビットより大きい。
【００３０】
（第２の変換方法）
第１の変換方法を用いた場合、シミュレーション時に値のオーバーフロー等のバグを検出できない場合がある。例えば、変数Ａは本来ビット幅が２ビットであるため、シミュレーションにおいて変数Ａに２ビットより大きい値、例えば４以上の数値を代入する処理が実行されると、値のオーバーフローエラーが発生しなければならない。しかしながら、変数Ａは、第１の変換方法によってｕｎｉｔ８＿ｔの変数に変換されているため、シミュレーションにおいて例えば３ビットの数値である４を代入する処理が実行されてもエラーが発生しない。
【００３１】
そこで、第２の変換方法では、変換部１３は、解析部１２によって取得された実施形態のプログラムの変数を、第２のデータ型の変数であるメンバーを有する構造体であって、あらかじめ指定されたビット幅より大きいビット幅の数値がメンバーに代入された場合にはエラーを発生させる構造体に変換する。
【００３２】
Ｃ言語の構造体のメンバーに、ビットフィールドに指定したビット幅より大きいビット幅の値が代入される処理が行われた場合、エラーが発生する。このため、図６に示すように、変換部１３は、実施形態のプログラムの変数を構造体のメンバーに変換し、当該メンバーのビットフィールドには、実施形態のプログラムにおけるビット幅を指定する。図６は、第１の実施形態に係る第２の変換方法を説明するための図である。
【００３３】
例えば、図６に示すように、変換部１３は、ビット幅が２ビットの変数Ａを、Ｃ言語の構造体ｔｄａｔａのメンバーＡに変換し、メンバーＡのビットフィールドに２を指定する。このとき、メンバーＡの値は３であるため、シミュレーションにおいてｔｄａｔａ．Ａ＋＋という処理が実行され、メンバーＡの値が４になると、ビット幅が２ビットを超えてしまうため、エラーが発生する。なお、Ａ＋＋とは、Ａに１を足す処理を示している。
【００３４】
（第３の変換方法）
ただし、Ｃ言語の構造体のメンバーは配列とすることができないため、図７に示すように、例えば実施形態のプログラムで各要素のビット幅が２ビットである配列Ａ［４］が定義されていた場合、第２の変換方法を用いて変換することができず、ビット幅が８ビットの変数の配列に変換せざるをえない。図７は、第１の実施形態に係る第２の変換方法の課題を説明するための図である。
【００３５】
そこで、第３の変換方法では、変換部１３は、解析部１２によって取得された変数が、第１のデータ型の変数を要素とする配列である場合、配列の各要素を、第２のデータ型の変数であるメンバーを有する構造体であって、あらかじめ指定されたビット幅より大きいビット幅の数値がメンバーに代入された場合にはエラーを発生させる構造体に変換する。
【００３６】
図８に示すように、変換部１３は、実施形態のプログラムの配列の各要素を構造体に変換し、当該構造体のメンバーのビットフィールドには、実施形態のプログラムにおけるビット幅を指定する。図８は、第１の実施形態に係る第３の変換方法を説明するための図である。
【００３７】
例えば、図８に示すように、変換部１３は、４つの要素を持ち、各要素のビット幅が２ビットである配列Ａ［４］を、Ｃ言語の構造体の配列ｔｄａｔａ１［４］に変換する。また、変換部１３は、構造体ｔｄａｔａ１の各メンバーのビットフィールドに２を指定する。このとき、メンバーｔｄａｔａ１［０］．Ａの値は３であるため、シミュレーションにおいてｔｄａｔａ１［０］．Ａ＋＋という処理が実行され、メンバーＡの値が４になると、ビット幅が２ビットを超えてしまうため、エラーが発生する。
【００３８】
（第４の変換方法）
実施形態のプログラムでは、所定のビット幅の変数を、ビット幅が１ビットの変数を要素とする配列として定義してもよい。そして、第４の変換方法では、変換部１３は、解析部１２によって取得された変数が、ビット幅が１ビットの変数を要素とする配列である場合、配列の各要素を、第２のデータ型の変数であるメンバーを有する構造体であって、あらかじめ指定されたビット幅より大きいビット幅の数値がメンバーに代入された場合にはエラーを発生させる構造体のメンバーに変換する。
【００３９】
例えば、図９のＡ［１２］は、ビット幅が１ビットの変数を要素とする配列である。図９は、第１の実施形態に係る第４の変換方法を説明するための図である。Ａ［１２］には、１２ビットまでの値を代入することができる。例えば、２２２２は、二進数表記では１０００１０１０１１１０と表すことができるため、１２ビットである。
【００４０】
そして、変換部１３は、Ａ［１２］を、ビット幅が１ビットの変数を要素とする配列の各要素をメンバーとする構造体ｔＡに変換する。また、変換部１３は、構造体ｔＡの各メンバーのビットフィールドに１を指定する。
【００４１】
なお、Ａ［１２］はＣ言語においては配列を表す表記であるが、図９のように、ｂｉｔ＿ｔ  Ａ［１２］＝２２２２等と記述された場合は、解析部１２および変換部１３は、第４の変換方法による変換を行うための表記であると解釈するものとする。すなわち、解析部１２および変換部１３は、ｂｉｔ＿ｔ  Ａ［１２］＝２２２２が２２２２を二進数表記した１０００１０１０１１１０の各ビットを、配列Ａ［１２］の各要素として解釈する。
【００４２】
さらに、実施形態のプログラムにおいては、Ａ［６］＝０のように、配列の要素の変更を行う場合と同じ記述により、の所定のビットを変更することができる。すなわち、Ａ［６］＝０は、１０００１０１０１１１０の左から７番目の１を０に変更することを示している。また、変換部１３は、実施形態のプログラムのＡ［６］＝０を、Ｃ言語において構造体ｔＡのＡ６というメンバーを０にすることを意味するｔＡ．Ａ６＝０に変換する。
【００４３】
また、実施形態のプログラムにおいては、Ｘ＝Ａ［２：１０］のように、Ａ［１２］の指定した範囲を取得することができる。Ｘ＝Ａ［２：１０］は、Ａ［６］＝０によって変更された後のＡ［１２］＝１０００１０００１１１０（十進数表記で２１９０）の左から数えて３番目から１１番目までの範囲のビット、すなわち００１０００１１１（十進数表記で７１）である。また、変換部１３は、実施形態のプログラムのＸ＝Ａ［２：１０］を、Ｘ｜＝ｔＡ．Ａ１０＜＜８のようなＣ言語のビット演算により、構造体から取得したビットで００１０００１１１を生成するコードに変換する。
【００４４】
（第５の変換方法）
また、例えばverilogで定義可能な変数のビット幅には制限がないが、Ｃ言語で定義可能な変数のビット幅は６４ビットであるため、図１０に示すように、実施形態のプログラムにおいて要素数が６４を超える配列が定義されている場合、変換部１３は、当該配列を第４の変換方法では変換することができない。そのため、要素数が６４を超える配列が定義されている場合、図１０に示すように、変換部１３は、当該配列を複数の構造体に分割して変換する。図１０は、第１の実施形態に係る第５の変換方法を説明するための図である。
【００４５】
図１０に示すように、変換部１３は、１２０ビットの変数を表すＢ［１２０］を、Ｃ言語の構造体ｔＢ１およびｔＢ２に分割して変換する。このとき、ｔＢ１には６４個のメンバー（Ｂ０〜Ｂ６３）が指定され、ｔＢ２には５６個のメンバー（Ｂ０〜Ｂ５５）が設定される。なお、このとき、ｔＢ２の５７個目以降のメンバー（Ｂ５６〜Ｂ６３）は使用されない。
【００４６】
［第１の実施形態の処理］
図１１を用いて、実施形態のプログラムを用いてシミュレーションを行う際の処理について説明する。図１１は、第１の実施形態に係る変換装置を用いたシミュレーションの処理の流れを示すフローチャートである。図１１に示すように、まず、変換装置１０に実施形態のプログラムが入力される（ステップＳ１１）。そして、変換装置１０は、第１の変換方法から第５の変換方法のいずれか、または複数を用いて入力されたプログラムを変換する（ステップＳ１２）。そして、変換装置１０は、変換したＣ言語のプログラムを出力する（ステップＳ１３）。
【００４７】
次に、変換装置１０によって出力されたＣ言語のプログラムは、コンパイラによってコンパイルされる（ステップＳ１４）。そして、コンパイルされたＣ言語のプログラムは、ＩＡサーバ用ロードモジュールへ出力され、シミュレーションが行われる（ステップＳ１５）。
【００４８】
［第１の実施形態の効果］
入力部１１は、ビット幅が１バイトの整数倍でない第１のデータ型を用いて変数が定義されたプログラムの入力を受け付ける。そして、解析部１２は、入力部１１によって受け付けられたプログラムから、第１のデータ型を用いて定義された変数を取得する。そして、変換部１３は、解析部１２によって取得された変数を、ビット幅が１バイトの整数倍である第２のデータ型を用いて定義された変数に変換する。
【００４９】
これにより、ＩＡサーバ等を用いて、任意のビット幅の変数を定義可能なプログラムのシミュレーションを行い、バグ等をあらかじめ検知することができるようになる。その結果、任意のビット幅の変数を定義可能なプログラムの高位合成を行うことができるようになり、高位合成されたプログラムを実行するハードウェアに、リソース消費量の増大や、リソース消費量の増大にともなう通信の遅延等の無駄が発生することを防止することができるようになる。
【００５０】
変換部１３は、解析部１２によって取得された変数を、第２のデータ型の変数であるメンバーを有する構造体であって、あらかじめ指定されたビット幅より大きいビット幅の数値がメンバーに代入された場合にはエラーを発生させる構造体に変換する。これにより、シミュレーションにおいて値のオーバーフローを検知することができるようになる。
【００５１】
変換部１３は、解析部１２によって取得された変数が、第１のデータ型の変数を要素とする配列である場合、配列の各要素を、第２のデータ型の変数であるメンバーを有する構造体であって、あらかじめ指定されたビット幅より大きいビット幅の数値がメンバーに代入された場合にはエラーを発生させる構造体に変換する。これにより、シミュレーションにおいて、配列についても値のオーバーフローを検知することができるようになる。
【００５２】
変換部１３は、解析部１２によって取得された変数が、ビット幅が１ビットの変数を要素とする配列である場合、配列の各要素を、第２のデータ型の変数であるメンバーを有する構造体であって、あらかじめ指定されたビット幅より大きいビット幅の数値がメンバーに代入された場合にはエラーを発生させる構造体のメンバーに変換する。これにより、変数の任意のビットを操作できるようになる。
【００５３】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵ（Central  Processing  Unit）および当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００５４】
また、本実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００５５】
また、変換部１３は、ｐｒｉｎｔｆ（）等の出力関数はそのまま変換するようにしてもよい。これにより、変換装置１０は、ｐｒｉｎｔｆ（）等を用いたデバッグに影響を与えることなく変換を行うことができる。
【００５６】
［プログラム］
一実施形態として、変換装置は、パッケージソフトウェアやオンラインソフトウェアとして上記の変換を実行する変換プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の変換プログラムを情報処理装置に実行させることにより、情報処理装置を変換装置として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistant）等のスレート端末等がその範疇に含まれる。
【００５７】
また、変換装置は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の変換に関するサービスを提供するサーバ装置として実装することもできる。例えば、変換装置は、高位合成仕様のプログラムを入力とし、C言語のプログラムを出力とする変換サービスを提供するサーバ装置として実装される。この場合、変換装置は、Ｗｅｂサーバとして実装することとしてもよいし、アウトソーシングによって上記の変換に関するサービスを提供するクラウドとして実装することとしてもかまわない。
【００５８】
図１２は、プログラムが実行されることにより変換装置が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【００５９】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【００６０】
ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、変換装置の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、変換装置における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤ（Solid  State  Drive）により代替されてもよい。
【００６１】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【００６２】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３およびプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３およびプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００６３】
１０  変換装置
１１  入力部
１２  解析部
１３  変換部
１４  出力部
【図１】
0006495842.tif 000002
【図２】
0006495842.tif 000003
【図３】
0006495842.tif 000004
【図４】
0006495842.tif 000005
【図５】
0006495842.tif 000006
【図６】
0006495842.tif 000007
【図７】
0006495842.tif 000008
【図８】
0006495842.tif 000009
【図９】
0006495842.tif 000010
【図１０】
0006495842.tif 000011
【図１１】
0006495842.tif 000012
【図１２】
0006495842.tif 000013