JP2011022863A - 動作合成装置及び動作合成方法 - Google Patents

動作合成装置及び動作合成方法 Download PDF

Info

Publication number
JP2011022863A
JP2011022863A JP2009168151A JP2009168151A JP2011022863A JP 2011022863 A JP2011022863 A JP 2011022863A JP 2009168151 A JP2009168151 A JP 2009168151A JP 2009168151 A JP2009168151 A JP 2009168151A JP 2011022863 A JP2011022863 A JP 2011022863A
Authority
JP
Japan
Prior art keywords
variable
access
data
read
read access
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2009168151A
Other languages
English (en)
Inventor
Hiroshi Shibuya
洋志 澁谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2009168151A priority Critical patent/JP2011022863A/ja
Publication of JP2011022863A publication Critical patent/JP2011022863A/ja
Withdrawn legal-status Critical Current

Links

Images

Abstract

【課題】動作レベル記述で表される半導体集積回路における消費電力低減と性能向上を可能とする動作合成方法を提供する。
【解決手段】動作合成方法は、動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのリードアクセスを解析するステップS21と、解析結果に基づいて、対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出するステップS22と、高頻度変数のリードデータを格納するための内部記憶領域を生成するステップS31と、最初又は事前のリードアクセスのみ外部メモリへアクセスして高頻度変数のデータを読み出して内部記憶領域に格納し、以降のリードアクセスにおいて内部記憶領域にアクセスして高頻度変数のデータを読み出すアクセス回路を生成するステップS32とを具備する。
【選択図】図10

Description

本発明は、動作合成装置及び動作合成方法に関する。
回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する動作合成が知られている。図1は、動作合成を行う動作合成装置101の構成を示すブロック図である。動作合成装置101は、動作合成をコンパイル部111、スケジューリング部114、アロケーション部115、バインディング部116、モジュール部117、及びRTレベル記述生成部118の一連のプログラムで実施する。すなわち、動作レベル記述121に基づいて、入力に与える機能記述を忠実にかつ段階的に回路へ落とし込んで行き、RTレベル記述122を生成する。この動作合成は、例えば、Ahmed Amine Jerraya et al.,「Behavioral Synthesis and Component Reuse with VHDL」,Springer,(1996)、において開示されている。
コンパイル部111は、動作レベル記述121を動作合成装置101の内部表現(中間形式)へコンパイルする。このステップは、定数伝播、デッドコード削除、演算共通項の抽出、関数のインライン展開、及び、ループ展開の各ステップを含んでいる。内部表現としては、動作レベル記述言語に近いグラフモデル(例示:CDFG(Control Data Flow Graph))に例示される。スケジューリング部114は、動作レベル記述をグラフモデルで表した記述を複数のサブグラフに分割する。各サブグラフは、1つの制御ステップ(例示:1クロック)において実行される。一つの制御ステップは、並行に実行すべき複数の演算操作を含んでいてもよい。その場合、並列処理を実行するために十分なリソースが割り当てられることを仮定している。いくつかのスケジューリングアルゴリズムは、リソースの制約やタイミングの制約の下で実行される。アロケーション部115は、動作レベル記述のアルゴリズムの実行に必要なリソースの量及び型を決定する。すなわち、このステップは、計算ユニット(例示:ALU(Arithmetic Logic Unit)、コプロセッサ、ADD(ADDer)、SUB(SUBtracter)、MULT(MULTiplier))、記憶ユニット(レジスタ、レジスタファイル)、接続ユニット(MUX(MUltipleX)、バス、配線)などの数と型を固定する。リソースの量は、データパス中に許される同時並行性を制限し、スケジューリングを制限する。バインディング部116は、どのリソースが動作レベル記述アルゴリズムの各演算によって用いられるかを決定する。すなわち、演算操作や変数に計算ユニットや記憶ユニットを割り当てる。システムによっては、このバインディングステップはアロケーション部115の中に含まれている場合がある。モジュール生成部117は、データパスのユニット(レジスタ及び演算器)間の通信のために必要なリソースを決定する。すなわち、接続ユニットを割り当てる。そして、RTレベル記述生成部118は、合成設計のRTレベル記述を生成する。すなわち、計算ユニットや記憶ユニットを接続ユニットで結線してデータバスを作成してRTレベル記述を生成する。コントローラ及びデータパスは前の結果からスタートして構築される。
関連する技術として特開2007−323206号公報に動作合成装置、同方法、シミュレーション装置、同方法及び設計装置が開示されている。この動作合成装置は、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う装置である。この動作合成装置は、メモリアクセス解析部と、関数変換部と、動作合成部とを有することを特徴とする。メモリアクセス解析部は、前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の1又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出する。関数変換部は、該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記1の関数を予め決められた2以上の関数に分割、あるいは前記複数の関数を予め決められた1つの関数に併合するように、前記逐次動作記述プログラム中の前記1又は複数の関数を他の関数に変換する。動作合成部は、該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う。
特開2005−173648号公報に高位合成方法及び高位合成装置が開示されている。この高位合成方法は、動作レベル回路に記述された変数をメモリに割り当てて論理回路を生成する。この高位合成方法は、(a)〜(d)ステップを具備する。(a)ステップは、前記変数が前記動作レベル回路において参照される参照回数を算出するステップである。(b)ステップは、前記変数のビット幅を抽出し、抽出したビット幅のデータ転送が可能な複数のメモリを選定するステップである。(c)ステップは、前記(b)のステップにおいて選定された複数のメモリについて、前記参照回数と前記変数のビット幅とに基づいて、前記変数が割り当てられた場合におけるメモリアクセスのサイクル数の合計を算出するステップである。(d)ステップは、前記(c)のステップにおいて算出された前記メモリアクセスのサイクル数の合計が最小となるメモリを、前記変数の割り当て対象として選択するステップである。
特開2007−323206号公報 特開2005−173648号公報
Ahmed Amine Jerraya et al.,「Behavioral Synthesis and Component Reuse with VHDL」,Springer,(1996),p13−p15.
動作レベル記述から動作合成装置を用いて設計される半導体集積回路において、ロジックから大規模低速メモリへのアクセスによるオーバーヘッドを削減するため、ロジックと大規模低速メモリとの間に小規模高速メモリを配置する、という方法が存在する。その方法では、ロジックと大規模低速メモリとの間でコストの高いシグナル転送を繰り返し行うのではなく、小規模高速メモリと大規模低速メモリとの間では効率の高い一括転送を行い、ロジックと小規模高速メモリとの間ではコストの低いシングル転送を行うことにより、性能の向上、消費電力の低減を図っている。
このような半導体集積回路では、小規模高速メモリの配置が必要となるため面積コストが高くなる。この小規模高速メモリは、単に大規模低速メモリから取得したデータのみならず、アドレス情報やコヒーレンシーをチェックするためのフラグを格納するための領域が必要である。加えて、有効なデータが小規模高速メモリに格納されているかを判定するための複雑な回路が必要となる。すなわち、単に記憶する領域のみの面積が増加するのではないため、必要以上に面積が必要となる。
また、このような半導体集積回路では、小規模高速メモリはロジックに実装されるアルゴリズムに最適化されていない。実際に発生する大規模低速メモリへのメモリアクセスのみに着目しており、アルゴリズム全体を見渡して最適化されているわけではない。そのため、小規模高速メモリの容量が不必要に大きくなり、面積が増加してしまう。
以下に、発明を実施するための形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
本発明の動作合成方法は、回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する動作合成方法である。動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのリードアクセスを解析するステップ(S21)と、解析結果に基づいて、対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出するステップ(S22)と、高頻度変数のリードデータを格納するための内部記憶領域を生成するステップ(S31)と、最初又は事前のリードアクセスのみ外部メモリへアクセスして高頻度変数のデータを読み出して内部記憶領域に格納し、以降のリードアクセスにおいて内部記憶領域にアクセスして高頻度変数のデータを読み出すアクセス回路を生成するステップ(S32)とを具備する。
本発明では、動作レベル記述からRTレベル記述を生成する際、アルゴリズムにおいてメモリアクセスが頻繁に発生するデータを予め特定し、当該データを格納する内部記憶領域を生成する。そして、最初のリードアクセスのみ外部メモリへアクセスし、その後は内部記憶領域にリードアクセスするようにする。この処理により、データを格納する内部記憶領域のサイズは必要最小限に抑えることができ、アルゴリズムに最適な効率の高いデータバッファリングを実現できる。また、外部メモリへのアクセスを内部記憶領域へのアクセスに置き換えることにより、消費電力を低減でき、メモリアクセスレイテンシに起因するスループット低下を抑制することができ、性能を向上させることができる。
また、本発明のプログラムは、回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する動作合成方法を実行する。このプログラムは、動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのリードアクセスを解析するステップ(S21)と、解析結果に基づいて、対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出するステップ(S22)と、高頻度変数のリードデータを格納するための内部記憶領域を生成するステップ(S31)と、最初又は事前のリードアクセスのみ外部メモリへアクセスして高頻度変数のデータを読み出して内部記憶領域に格納し、以降のリードアクセスにおいて内部記憶領域にアクセスして高頻度変数のデータを読み出すアクセス回路を生成するステップ(S32)とを具備する動作合成方法をコンピュータに実行させる。
本発明のプログラムは、上記動作合成方法をコンピュータで実行可能とすることができ、上記動作合成方法と同様の効果を得ることができる。
また、本発明の動作合成装置は、回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する。この動作合成装置は、メモリアクセス解析部(12)と回路追加部(13)とを具備する。メモリアクセス解析部(12)は、動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのアクセスを解析し、解析結果に基づいて、対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出する。回路追加部(13)は、高頻度変数のリードデータを格納するための内部記憶領域と、最初又は事前のリードアクセスのみ外部メモリへアクセスして高頻度変数のデータを読み出して内部記憶領域に格納し、以降のリードアクセスにおいて内部記憶領域にアクセスして高頻度変数のデータを読み出すアクセス回路とを生成する。
本発明の動作合成装置は、上記動作合成方法を実行であり、上記動作合成方法と同様の効果を得ることができる。
本発明により、動作レベル記述のアルゴリズムで表される半導体集積回路における消費電力低減と性能向上が可能となる。
図1は、動作合成装置101の構成を示すブロック図である。 図2は、本発明の実施の形態に係る動作合成装置1の構成を示すブロック図である。 図3は、本発明の実施の形態に係るメモリアクセス解析部12の構成を示すブロック図である。 図4は、リードアクセス頻度のランキングの一例を示すランキング表である。 図5は、本発明の実施の形態に係る回路追加部13の構成を示すブロック図である。 図6は、生成される内部記憶領域及びデータアクセス回路の構成及び動作を示す概念図である。 図7は、動作合成装置1に入力するときの当初の動作レベル記述の一例を示す図である。 図8は、メモリアクセス解析部12及び回路追加部13による処理を行った場合の動作レベル記述の一例を示す図である。 図9は、メモリアクセスと時間との関係を示すグラフである。 図10は、本発明の実施の形態に係る動作合成装置1の動作(動作合成方法)を示すフロー図である。 図11は、本実施の形態に係る動作合成装置の効果の一例を示す模式図である。
以下、本発明の動作合成装置及び動作合成方法の実施の形態に関して、添付図面を参照して説明する。
まず、本発明の実施の形態に係る動作合成装置の構成について説明する。図2は、本発明の実施の形態に係る動作合成装置1の構成を示すブロック図である。動作合成装置1は、回路の動作を記述した動作レベル記述51からRTレベル記述52を生成する動作合成を実行する。その際、動作レベル記述に特別な変更を行うことなく、ロジックの回路面積の増大を抑えつつ、動作レベル記述におけるメモリアクセス解析結果を基に、動作レベル記述で定義されるアルゴリズムに対して、メモリに格納されているデータのバッファリングを最適に行う回路を生成する。これにより、消費電力低減と性能向上を図ることを可能とする。以下詳細に説明する。
動作合成装置1は、コンピュータに例示される情報処理装置であり、図示されていないCPU(Central Processing Unit)と、記憶装置と、入力装置と、出力装置と、インターフェースとを備えている。CPU、記憶装置、入力装置、出力装置、及びインターフェースは、バスやケーブルにより互いに情報の送受信が可能に接続されている。記憶装置は、RAM(Random Access Memory)、ROM(Read Only Memory)、及びHDD(Hard Disk Drive)に例示される。入力装置は、キーボード、及びマウスに例示される。出力装置は、ディスプレイやプリンタに例示される。インターフェースは、外部のコンピュータや記憶装置や記憶媒体読取装置などと双方向通信可能に接続されている。
CPUは、例えば外部の記憶媒体やサーバからインターフェースを介してHDDにインストールされたコンピュータプログラムをRAMに展開する。そして、展開されたコンピュータプログラムを実行して、必要に応じて記憶装置や入力装置や出力装置のようなハードウエアを制御しながら、当該コンピュータプログラムの情報処理を実現する。記憶装置は、コンピュータプログラムを記録し、CPUが利用する情報や生成する情報を記録する。入力装置は、ユーザに操作されることにより生成される情報をCPUや記憶装置に出力する。出力装置は、CPUにより生成された情報や記憶装置の情報をユーザに認識可能に出力する。
動作合成装置1は、コンピュータプログラムであるコンパイル部11と、メモリアクセス解析部12と、回路追加部13と、スケジューリング部14と、アロケーション部15と、バインディング部16と、モジュール生成部17と、RTレベル記述生成部18とを備えている。すなわち、コンピュータに例示される情報処理装置の記憶装置(図示されず)に、これらのコンピュータプログラムがインストールされて、動作合成装置1として機能する。
コンパイル部11は、動作レベル記述51を動作合成装置1の内部表現へコンパイルする。コンパイル部11は、定数伝播、デッドコード削除、演算共通項の抽出、関数のインライン展開、及び、ループ展開の各ステップを実行する機能を含んでいる。内部表現としては、動作レベル記述言語に近いグラフモデル(例示:CDFG)に例示される。
メモリアクセス解析部12は、動作レベル記述をコンパイル部11の処理により内部表現で表した記述に関して、変数アクセスの解析を行う。ただし、変数アクセスのうち、動作合成によってメモリにマッピングされる変数へのアクセスを解析する。更に、その中でも、動作中に動作に影響を与えるような変更が加えられない変数へのアクセスを対象とする。すなわち、動作中に他の回路などによってメモリ内の値が書き換えられてしまうようなことのない変数である。そのような変数としては、例えば、ROMに格納されているデータのように、動作中に値が変化しない変数である。メモリアクセス解析部12の機能は、動作レベル記述で表現されるアルゴリズムにおいて、メモリに格納された当該変数が、何回(リードアクセス頻度)読み出されるかを解析することに相当する。メモリアクセス解析部12の詳細は後述される。
回路追加部13は、内部表現で表した記述に関して、内部記憶領域とデータアクセス回路とをロジック内部に生成する。実体的には、最終的に生成されるRTレベル記述に内部記憶領域及びデータアクセス回路が追加されるように、内部表現に所定の記述(処理又は演算)を追加する。従って、内部表現への所定の記述の追加は、ロジック内部に内部記憶領域とデータアクセス回路とを生成することと実質的に等価と考えることができる。ただし、内部記憶領域は、メモリアクセス解析部12の確定した各変数BufVarを記憶する領域である。データアクセス回路は、最初のリードアクセスについてはポートを介して外部メモリへアクセスして読み出したデータを内部記憶領域に格納し、以降のリードアクセスについては、内部記憶領域にアクセスしてデータを読み出す回路である。回路追加部13の詳細は後述される。
スケジューリング部14は、内部表現で表した記述を複数のサブグラフに分割する。各サブグラフは、1つの制御ステップ(例示:1クロック)において実行される。一つの制御ステップは、並行に実行すべき複数の演算操作を含んでいてもよい。その場合、並列処理を実行するために十分なリソースが割り当てられることを仮定している。いくつかのスケジューリングアルゴリズムは、リソースの制約やタイミングの制約の下で実行される。
アロケーション部15は、動作レベル記述のアルゴリズムの実行に必要なリソースの量及び型を決定する。すなわち、このステップは、計算ユニット(例示:ALU、コプロセッサ、ADD、SUB、MULT)、記憶ユニット(レジスタ、レジスタファイル)、接続ユニット(MUX、バス、配線)などの数と型を固定する。リソースの量は、データパス中に許される同時並行性を制限し、スケジューリングを制限する場合がある。
バインディング部16は、どのリソースが動作レベル記述のアルゴリズムの各演算によって用いられるかを決定する。すなわち、演算操作や変数に計算ユニットや記憶ユニットを割り当てる。このとき、内部記憶領域やデータアクセス回路に対応する演算に対しても記憶ユニットや計算ユニットが割り当てられる。このバインディング部16はアロケーション部15の中に含まれていても良い。
モジュール生成部17は、データパスのユニット(レジスタ及び演算器)間の通信のために必要なリソースを決定する。すなわち、接続ユニットを割り当てる。そして、RTレベル記述生成部18は、合成設計のRTレベル記述を生成する。すなわち、計算ユニットや記憶ユニットを接続ユニットで結線してデータバスを作成してRTレベル記述を生成する。これにより、データアクセス回路及び内部記憶領域も併せて生成される。
次に、メモリアクセス解析部12について詳細に説明する。図3は、本発明の実施の形態に係るメモリアクセス解析部12の構成を示すブロック図である。メモリアクセス解析部12は、動作レベル記述をコンパイル部11の処理により内部表現で表した記述に関して、変数アクセスの解析を行う。メモリアクセス解析部12は、アクセス頻度解析部21と、対象変数決定部23とを備える。
アクセス頻度解析部21は、変数アクセスの解析のうち、リードアクセス頻度を解析する。すなわち、メモリにマッピングされる変数のうち、動作中に動作に影響を与えるような変更が加えられない変数を、動作中に読み出す回数(リードアクセス頻度)を数えて集計する。そして、その解析結果として、リードアクセス頻度による変数のランキングを生成する。
図4は、リードアクセス頻度のランキングの一例を示すランキング表である。このランキング表では、メモリにマッピングされる変数のうち、動作中に動作に影響を与えるような変更が加えられない変数である「対象変数」と、リードアクセス頻度を示す「リードアクセス回数」と、リードアクセス頻度の多い順番をしめす「ランキング」とが関連付けられている。この図の例では、最もリードアクセス回数が多いのがa[0]であり、以下、c、a[20]、b、…の順にランキングされている。
ここで、データバッファリングを行う変数の数(以下、「Num_BufVar」ともいう)を予め定めておく。この図の例では、Num_BufVar=3の場合を示し、上位3個の変数、すなわちa[0]、c、及びa[20]がデータバッファリングを行う変数(以下、「BufVar」ともいう)となる。Num_BufVarの値が大きいほど、低消費電力化や性能向上の効果は高いが、回路面積が増大する。従って、低消費電力化や性能向上の効果(Num_BufVarの数の多さ)と回路面積とはトレードオフとなる。この変数の数Num_BufVarは設定により変更が可能である。例えば、内部記憶領域を相対的に広く取れる場合、Num_BufVarを増やすことが出来る。
次に、図3を参照して、対象変数決定部23は、アクセス頻度解析部21による解析結果(集計結果)により、リードアクセス頻度の最上位から順にNum_BufVarで表される個数分の変数を、データバッファリングを行う変数であるBufVarとして確定する。上述のように、図4の場合では、Num_BufVar=3なので、上位3個分のa[0]、c、及びa[20]がBufVarとなる。
上記メモリアクセス解析は、動作レベル記述(内部表現)を基にした静的な解析によって行う。ただし、シミュレーションのプロファイル結果を基にした動的な解析によって行っても良いし、両者を用いても良い。
メモリアクセス解析において、動作レベル記述における変数のうち、メモリにマッピングされる変数が明らかとなっている場合、メモリにマッピングする変数へのメモリアクセス情報(上記図4の内容)をシミュレーション結果から得た上で、動作レベル記述と共に、動作合成装置に与えたものを利用しても良い。あるいは、メモリアクセスがループ記述の内部にある場合などでは、ループのインデックス解析により静的に行って、メモリアクセス情報(上記図4の内容)を得ても良い。本発明は、上記図4に相当するような情報が得られれば、これらの方法に限定されるものではない。
次に、回路追加部13について詳細に説明する。図5は、本発明の実施の形態に係る回路追加部13の構成を示すブロック図である。回路追加部13は、内部記憶領域とデータアクセス回路とをロジック内部に生成する。実体的には、最終的に生成されるRTレベル記述に内部記憶領域及びデータアクセス回路が追加されるように、内部表現に所定の記述(処理又は演算)を追加する。従って、実質的に、ロジック内部に内部記憶領域とデータアクセス回路とを生成すると考えることができる。回路追加部13は、記憶領域生成部31と、アクセス回路生成部32とを備えている。
回路追加部13の記憶領域生成部31は、内部記憶領域をロジック内部に生成する。具体的には、内部表現で表された記述に関して、各BufVarをレジスタのような記憶素子に割り当てる記述(処理又は演算)を追加する。それにより、最終的なRTレベル記述において内部記憶領域(例示:レジスタ)が追加されることになる。
回路追加部13のアクセス回路生成部32は、データアクセス回路をロジック内部に生成する。具体的には、内部表現で表された記述に関して、各BufVarを読み出す際、最初のリードアクセスについては外部メモリにアクセスし、読み出したデータを内部記憶領域に格納し、以降のリードアクセスについては内部記憶領域にアクセスしてデータを読み出すように、データアクセスの判定の記述(処理又は演算)を追加する。それにより、最終的なRTレベル記述においてデータアクセス回路が追加されることになる。
図6は、生成される内部記憶領域及びデータアクセス回路の構成及び動作を示す概念図である。この図は、上記回路追加部13により追加されるデータアクセス回路61及び内部記憶領域62が実際の回路上でどのように動作するかを模式的に示している。ロジック60が、動作レベル記述51a(実際の回路にはないが、分かり易さのために図上に動作レベル記述形式で一例を記載)で示されたアルゴリズム処理を行うときに、外部のメモリ70へBufVarの一つであるa[0]を読み出しに行く場合を考える(リードアクセス)。このとき、アルゴリズム処理からa[0]の事前リードアクセス(処理81)を受けたデータアクセス回路61は、ポート65を介してメモリ70にアクセスし、事前にa[0]に対応するデータ71を読み出す(処理82)。そして、データアクセス回路61は、読み出したデータ71を、a[0]として内部記憶領域62に格納する(処理83)。この段階では、事前リードアクセスなのでアルゴリズム処理へはa[0]を出力しない。その後、アルゴリズム処理によりa[0]のリードアクセス(処理81)を受けた場合、データアクセス回路61は、内部記憶領域62にアクセスしてa[0]を読み出し(処理84)、アルゴリズム処理へ与える(処理81)。一方、アルゴリズム処理によりa[0]のリードアクセス(処理81)を受けたデータアクセス回路61は、BufVar以外の変数については、上記処理は行わず、データアクセス回路61は、毎回メモリ70にアクセスする。
ただし、上記のような事前のリードアクセスを行わなくても良い。すなわち、まず、最初のリードアクセス(処理81)において、ポート65を介してメモリ70にアクセスし、a[0]に対応するデータ71を読み出す(処理82)。そして、データアクセス回路61は、読み出したデータ71を、a[0]としてアルゴリズム処理へ与える(処理81)。それと共に、a[0]として内部記憶領域62に格納する(処理83)。その後、2回目以降のリードアクセスにおいては、アルゴリズム処理によりa[0]のリードアクセス(処理81)を受けたデータアクセス回路61は、内部記憶領域62にアクセスしてa[0]を読み出し(処理84)、アルゴリズム処理へ与える(処理81)。
次に、回路追加部13により追加される記述(処理又は演算)の具体例について説明する。
図7は、動作合成装置1に入力するときの当初の動作レベル記述の一例を示す図である。このような動作レベル記述(記述例A)が動作合成装置1に入力されたとする。この記述例Aは、コンパイル部11により内部表現へコンパイルされた後、メモリアクセス解析部12及び回路追加部13で上記の処理が行われる。
図8はメモリアクセス解析部及び回路追加部による処理を行った場合の動作レベル記述の一例を示す図である。ただし、メモリアクセス解析部及び回路追加部による処理後の記述は、上述のように実際には内部表現で表されるが、ここでは分かり易さのために動作レベル記述形式で示している。この動作レベル記述(記述例B)は、図7と比較すると、対象変数(BufVar)の指定(関数prefetch_mem_data)を行う記述56、アルゴリズムによるメモリアクセス(関数get_mem_data)を行う記述57、及び、各関数を定義する記述58が追加されている。
ここで、BUF_ADDRは、バッファ(内部記憶領域)に格納する変数のメモリでのアドレスを示す。格納する変数が複数ある場合には、変数ごとにアドレスが設定される。このアドレスは、メモリアクセス解析部12がメモリアクセス解析により対象変数(BufVar)を決定した後、回路追加部13が内部表現の記述(アルゴリズム)から当該対象変数(BufVar)の格納されているメモリのアドレスを取得することで得られる。このBUF_ADDRは、そのアドレスを示す定数値である。図4(Num_BufVar=3)の場合、例えば、BUF_ADDR1、BUF_ADDR2、BUF_ADDR3の3個のアドレスが設定される。
関数prefetch_mem_data(addr)は、メモリにおけるアドレス(addr)に示される領域に格納されている値(mem_a[addr])をバッファのデータ(buf_data)とする、すなわちバッファに格納するという関数である(図8:記述58の上部)。
この関数prefetch_mem_data(addr)は、例えば、アルゴリズムの中の当該mem_a[addr]を最初に読み出す前の、関数と関数との間に設けられる(図8:記述56)。
例えば、Num_BufVar=3の場合、BUF_ADDR及びprefetch_mem_data(addr)は、以下のように所定の箇所に記述される。
「BUF_ADDR1=メモリのアドレス1;
BUF_ADDR2=メモリのアドレス2;
BUF_ADDR3=メモリのアドレス3;
prefetch_mem_data(BUF_ADDR1);
prefetch_mem_data(BUF_ADDR2);
prefetch_mem_data(BUF_ADDR3);」
上記の定義から、関数prefetch_mem_data(BUF_ADDR)(図8:記述56)は、メモリにおけるアドレス(BUF_ADDR)に示された領域に格納されている値(mem_a[BUF_ADDR])をバッファのデータ(buf_data)とする、すなわちバッファに格納する。これにより、バッファにメモリのアドレスBUF_ADDRでの値が格納される。
記憶領域生成部31は、この例では、関数prefetch_mem_data(BUF_ADDR)の処理の記述(図8:記述56)、及び関数prefetch_mem_data(addr)の定義の記述(図8:記述58の上部)を生成する。
アルゴリズムからのメモリアクセスは関数get_mem_data(addr)を介して行う。
関数get_mem_data(addr)は、アクセスを行うメモリのアドレス(addr)がBUF_ADDRと一致するかを確認し、一致する場合にはバッファの値(buf_data)を読み出し、一致しない場合にはメモリのアドレス(addr)での値(mem_a[addr])を読み出す関数である(図8:記述58の中/下部)。
この関数get_mem_data(addr)は、アルゴリズムの中の当該mem_a[addr]を実際に読み出す命令に置き換えられる(図8:記述57)。
上記の定義から、関数get_mem_data(addr)(図8:記述57)は、アクセスを行うメモリアドレス(addr)がBUF_ADDRと一致するかを確認し、一致する場合にはメモリアクセスを行わずに、バッファから値(buf_data)を読み出し、一致しない場合にはメモリから値(mem_a[addr])を読み出す。
アクセス回路生成部32は、この例では、関数get_mem_data(addr)の処理の記述(図8:記述57)、及び関数get_mem_data(addr)の定義の記述(図8:記述58の中/下部)を生成する。
なお、関数prefetch_mem_data(addr)や、関数get_mem_data(addr)の定義は、他の関数等の定義の記述と同様の位置に追加・挿入することができる(図8:記述58)。
このように、本実施の形態では、動作レベル記述に対して、メモリアクセス解析部12及び回路追加部13を用いた場合、メモリアクセス解析と外部メモリアクセスの一部を内部記憶領域にアクセスするように記述変更するための処理が加わる。この処理が加わることにより、動作レベル記述に予め特別な記述等をしなくても、例えば、図7の記述例Aを入力とした場合、図8の記述例Bに示すような処理を行う回路を生成することができる。
図9は、メモリアクセスと時間との関係を示すグラフである。横軸は時間の進行を示し、縦軸は記述例A及び記述例Bを示している。ここでは、記述例Bにおける内部記憶領域に格納する変数のメモリでのアドレスBUF_ADDR=Bとする。
記述例Aのアルゴリズムでは、アドレスA、B、C、Dのすべてについて、いずれも4クロックを使用してデータアクセスを行っている。そのため、最初のmem_a[A]の読み出しからから最後のmem_a[B]の読み出しまでで、インターバルを含めて44クロックかっている。また、メモリへのアクセス回数も9回になっている。
しかし、記述例Bのアルゴリズムでは、最初に予め4クロックを用いてmem_a[B]を読み出して内部記憶領域に格納することで、他のmem_a[B]の読み出しを1クロックで行うことができる。それにより、記述例Aと同様のデータアクセスについて、全体として、インターバルを含めて35クロックに削減できる。また、メモリへのアクセス回数も5回に削減できる。
以上のことから、記述例Bでは記述例Aに比べて、メモリアクセス回数が減るため、電力消費を抑制するとともに、メモリアクセスレイテンシに起因するスループット低下を抑制することができる。
次に、本発明の実施の形態に係る動作合成装置の動作(動作合成方法)について説明する。図10は、本発明の実施の形態に係る動作合成装置1の動作(動作合成方法)を示すフロー図である。
動作レベル記述51が、通信回線や記憶媒体を介して動作合成装置1に供給される。
コンパイル部11は、動作レベル記述51を動作合成装置1の内部表現へコンパイルする(ステップS01)。コンパイルには、定数伝播、デッドコード削除、演算共通項の抽出、関数のインライン展開、及び、ループ展開の各ステップを含んでいる。
メモリアクセス解析部12は、動作レベル記述をコンパイル部11の処理により内部表現で表現した記述に関して、変数アクセスの解析を行う(ステップS02)。ただし、変数アクセスのうち、動作合成によってメモリにマッピングされる変数であって、動作中に動作に影響を与えるような変更が加えられない変数へのアクセスを対象とする。
具体的には、アクセス頻度解析部21が、変数アクセスの解析のうち、リードアクセス頻度を解析する(ステップS21)。すなわち、メモリにマッピングされる変数のうち、動作中に動作に影響を与えるような変更が加えられない変数を、動作中に読み出す回数(リードアクセス頻度)を数えて集計する。そして、その解析結果として、リードアクセス頻度による変数のランキングを得る(例示:図4)。
次に、対象変数決定部23が、アクセス頻度解析部21による解析結果により、リードアクセス頻度の最上位から順にNum_BufVar個分の変数を、データバッファリングを行うBufVarとして確定する(ステップS22)。例えば、Num_BufVar=3の場合、最上位から3個の変数をBufVarとして確定する(例示:図4)。
次に、回路追加部13は、内部表現で表した記述に関して、内部記憶領域とデータアクセス回路とをロジック内部に生成する(ステップS03)。ただし、内部記憶領域は各BufVarを記憶する領域であり、データアクセス回路は最初のリードアクセスについては外部メモリへアクセスして、読み出したデータを内部記憶領域に格納し、以降のリードアクセスについては、内部記憶領域にアクセスしてデータを読み出す回路である(例示:図6)。
具体的には、記憶領域生成部31が、内部記憶領域をロジック内部に生成する(ステップS31)。すなわち、内部表現で表現した記述に関して、各BufVarをレジスタのような記憶素子に割り当てる記述(処理又は演算)を追加する(例示:図8の記述56、記述58の上部)。それにより、最終的なRTレベル記述において内部記憶領域(例示:レジスタ)が追加されることになる。
次に、アクセス回路生成部32が、データアクセス回路をロジック内部に生成する(ステップS32)。すなわち、内部表現で表した記述に関して、各BufVarを読み出す際、最初又は事前のリードアクセスについては外部メモリにアクセスし、読み出したデータを内部記憶領域に格納し、以降のリードアクセスについては内部記憶領域にアクセスしてデータを読み出すように、データアクセスの判定を行う記述(処理又は演算)を追加する(例示:図8の記述57、記述58の中下部)。それにより、最終的なRTレベル記述においてデータアクセス回路が追加されることになる。
その後、スケジューリング部14は、内部表現で表した記述を複数のサブグラフに分割する(ステップS04)。各サブグラフは、1つの制御ステップ(例示:1クロック)において実行される。一つの制御ステップは、並行に実行すべき複数の演算操作を含んでいてもよい。
続いて、アロケーション部15は、動作レベル記述のアルゴリズムの実行に必要なリソースの量及び型を決定する(ステップS05)。すなわち、このステップは、計算ユニット(例示:ALU、コプロセッサ、ADD、SUB、MULT)、記憶ユニット(レジスタ、レジスタファイル)、接続ユニット(MUX、バス、配線)の数と型を固定する。
次に、バインディング部16は、どのリソースが動作レベル記述のアルゴリズムの各演算によって用いられるかを決定する(ステップS06)。すなわち、演算操作や変数に計算ユニットや記憶ユニットを割り当てる。このとき、内部記憶領域やデータアクセス回路に対応する演算に対しても記憶ユニットや計算ユニットが割り当てられる。
そして、モジュール生成部17は、データパスのユニット(レジスタ及び演算器)間の通信のために必要なリソースを決定する(ステップS07)。すなわち、接続ユニットを割り当てる。そして、RTレベル記述生成部18は、合成設計のRTレベル記述を生成する(ステップS08)。すなわち、計算ユニットや記憶ユニットを接続ユニットで結線してデータバスを作成してRTレベル記述を生成する。これにより、データアクセス回路及び内部記憶領域も併せて生成される。
以上のプロセスにより、本発明の実施の形態に係る動作合成方法が実行される。
図11は、本実施の形態に係る動作合成装置の効果の一例を示す模式図である。本実施の形態では、設計される半導体集積回路における消費電力の低減及び性能の向上を図ることができる。左側の破線で囲まれた方が図1の動作合成装置を用いた場合であり、右側の破線で囲まれた方が図2の本実施の形態に係る動作合成装置を用いた場合である。例えば、動作レベル記述で定義されるアルゴリズムでは配列の要素a[0]へのリードアクセス頻度が高いとする(左側下段のグラフ)。本実施の形態(右側)では、この要素a[0]についてロジック60に内部記憶領域62を設け、一度外部メモリ70にアクセスを行って読み出したデータを内部記憶領域62に格納し、それ以降の要素a[0]へのアクセスは内部記憶領域62にアクセスすることにする。それにより、外部メモリ70へのアクセス数が大幅に減少する。また、内部記憶領域62へのアクセスはポートを介さない。このように、本実施の形態では、アルゴリズムの中でメモリアクセス頻度が高い変数について、一度外部メモリ70から読み出したデータを内部記憶領域62に格納し、以降の同変数へのリードアクセスは、メモリに対してではなく内部記憶領域62に対して行うため、外部メモリ70へのアクセス数を大幅に減少させることが可能となる。
本実施の形態では、動作レベル記述のアルゴリズムに、メモリへアクセスするのか内部記憶領域へアクセスするのかを切り換える論理を追加している。この追加そのものにより、ロジックの電力は増加する。しかし、ロジックから外部メモリに格納されたデータへアクセスするのに消費する電力に比べると、ロジックの内部記憶領域へアクセスするのに消費する電力は非常に小さく、その差はロジックの電力増加分と比較しても十分に大きい。そのため、全体として、外部メモリへのアクセスを内部記憶領域へのアクセスに置き換えることにより、消費電力を低減することができる。
また、ロジックから外部メモリにアクセスするにはポートを介する必要があり、一つのポートに対するアクセスは逐次的となる。しかし、ロジックの内部記憶領域へのアクセスにはポートを介する必要は無く、ロジック内部で並列にアクセスできる。したがって、ロジックの処理の並列性を高めることが可能となり、性能を向上させることができる。これはメモリアクセスを静的に解析する場合に得られる効果である。
また、ロジックの外部メモリへのアクセスに要するレイテンシに比べると、ロジックの内部記憶領域へのアクセスに要するレイテンシは非常に小さい。そのため、外部メモリへのアクセスを内部記憶領域へのアクセスに置き換えることにより、メモリアクセスレイテンシに起因するスループット低下を抑制することができ、性能を向上させることができる。
本実施の形態では、動作レベル記述のアルゴリズムにとってメモリアクセスが最頻度発生するデータを予め判定した上で、当該データを内部記憶領域に格納するための回路を作り込む。そのため、データを格納するための領域サイズは必要最小限に抑えられ、かつ、複雑なアドレス判定やフラグチェックの必要がない分、回路サイズをより小さく抑えられる。すなわち、本実施の形態における回路面積と低消費電力化や性能向上の効果と回路面積とのトレードオフの影響を抑制し、その効果を相対的に高めることが可能となる。
また、本実施の形態では、動作レベル記述におけるアルゴリズムにおいて、メモリのそれぞれのアドレスに対するアクセス頻度を明らかにしたうえで、アクセスが最頻度発生するデータのみを内部記憶領域に格納する回路を生成するため、アルゴリズムに最適な効率の高いデータバッファリングを実現することができる。
本発明のプログラム、データ構造は、コンピュータ読取可能な記憶媒体に記録され、その記憶媒体から情報処理装置に読み込まれても良い。
本発明は上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変形又は変更され得ることは明らかである。
1、101 動作合成装置
11、111 コンパイル部
12 メモリアクセス解析部
13 回路追加部
14、114 スケジューリング部
15、115 アロケーション部
16、116 バインディング部
17、117 モジュール生成部
18、118 RTレベル記述生成部
21 アクセス頻度解析部
23 対象変数決定部
31 記憶領域生成部
32 アクセス回路生成部
51、51a、121 動作レベル記述
52、122 RTレベル記述
56、57、58 記述
60 ロジック
61 データアクセス回路
62 内部記憶領域
65 ポート
70 メモリ
71 データ
81、82、83、84 処理

Claims (6)

  1. 回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する動作合成方法であって、
    前記動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのリードアクセスを解析するステップと、
    前記解析結果に基づいて、前記対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出するステップと、
    前記高頻度変数のリードデータを格納するための内部記憶領域を生成するステップと、
    最初又は事前のリードアクセスのみ外部メモリへアクセスして前記高頻度変数のデータを読み出して前記内部記憶領域に格納し、以降のリードアクセスにおいて前記内部記憶領域にアクセスして前記高頻度変数のデータを読み出すアクセス回路を生成するステップと
    を具備する
    動作合成方法。
  2. 請求項1に記載の動作合成方法であって、
    前記リードアクセスを解析するステップは、
    前記対象変数へのリードアクセス頻度を集計するステップと、
    前記集計結果に基づいて、前記対象変数のうち、前記リードアクセス頻度が相対的に高い前記高頻度変数を所定数だけ抽出するステップと
    を備える
    動作合成方法。
  3. 回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する動作合成方法を実行するプログラムであって、
    前記動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのリードアクセスを解析するステップと、
    前記解析結果に基づいて、前記対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出するステップと、
    前記高頻度変数のリードデータを格納するための内部記憶領域を生成するステップと、
    最初又は事前のリードアクセスのみ外部メモリへアクセスして前記高頻度変数のデータを読み出して前記内部記憶領域に格納し、以降のリードアクセスにおいて前記内部記憶領域にアクセスして前記高頻度変数のデータを読み出すアクセス回路を生成するステップと
    を具備する動作合成方法をコンピュータに実行させるプログラム。
  4. 請求項3に記載のプログラムであって、
    前記リードアクセスを解析するステップは、
    前記対象変数へのリードアクセス頻度を集計するステップと、
    前記集計結果に基づいて、前記対象変数のうち、前記リードアクセス頻度が相対的に高い前記高頻度変数を所定数だけ抽出するステップと
    を備える
    プログラム。
  5. 回路の動作を記述した動作レベル記述からRT(Register−Transfer)レベル記述を生成する動作合成装置であって、
    前記動作レベル記述において、メモリにマッピングされる変数のうち動作中に動作に影響を与えるような変更が加えられない対象変数へのリードアクセスを解析し、前記解析結果に基づいて、前記対象変数のうち、アルゴリズムからのリードアクセス頻度が相対的に高い変数としての高頻度変数を抽出するメモリアクセス解析部と、
    前記高頻度変数のリードデータを格納するための内部記憶領域と、最初又は事前のリードアクセスのみ外部メモリへアクセスして前記高頻度変数のデータを読み出して前記内部記憶領域に格納し、以降のリードアクセスにおいて前記内部記憶領域にアクセスして前記高頻度変数のデータを読み出すアクセス回路とを生成する回路追加部と
    を具備する
    動作合成装置。
  6. 請求項5に記載の動作合成装置であって、
    前記メモリアクセス解析部は、
    前記対象変数へのリードアクセス頻度を集計するアクセス頻度解析部と、
    前記集計結果に基づいて、前記対象変数のうち、前記リードアクセス頻度が相対的に高い前記高頻度変数を所定数だけ抽出する対象変数決定部と
    を備える
    動作合成装置。
JP2009168151A 2009-07-16 2009-07-16 動作合成装置及び動作合成方法 Withdrawn JP2011022863A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009168151A JP2011022863A (ja) 2009-07-16 2009-07-16 動作合成装置及び動作合成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009168151A JP2011022863A (ja) 2009-07-16 2009-07-16 動作合成装置及び動作合成方法

Publications (1)

Publication Number Publication Date
JP2011022863A true JP2011022863A (ja) 2011-02-03

Family

ID=43632875

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009168151A Withdrawn JP2011022863A (ja) 2009-07-16 2009-07-16 動作合成装置及び動作合成方法

Country Status (1)

Country Link
JP (1) JP2011022863A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10311188B2 (en) 2015-04-08 2019-06-04 Mitsubishi Electric Corporation Circuit design support apparatus, circuit design support method, and computer readable medium

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10311188B2 (en) 2015-04-08 2019-06-04 Mitsubishi Electric Corporation Circuit design support apparatus, circuit design support method, and computer readable medium

Similar Documents

Publication Publication Date Title
Da Silva et al. Performance Modeling for FPGAs: Extending the Roofline Model with High‐Level Synthesis Tools
JP5312151B2 (ja) 半導体設計支援装置、高位合成方法及び半導体設計支援プログラム
US11636122B2 (en) Method and apparatus for data mining from core traces
Wang et al. CGPredict: Embedded GPU performance estimation from single-threaded applications
JP2014523569A (ja) 拡張可能な並列プロセッサのためのシステム、方法、および、装置
Makni et al. HAPE: A high-level area-power estimation framework for FPGA-based accelerators
JP6763411B2 (ja) 設計支援装置、設計支援方法、および設計支援プログラム
JP5979965B2 (ja) 回路設計支援装置及び回路設計支援方法及びプログラム
JP2011022863A (ja) 動作合成装置及び動作合成方法
Panyala et al. Exploring performance and energy tradeoffs for irregular applications: A case study on the Tilera many-core architecture
JP2016018469A (ja) シミュレーション方法、シミュレーションプログラム
Giorgi et al. Translating timing into an architecture: the synergy of COTSon and HLS (domain expertise—designing a computer architecture via HLS)
Corre et al. A framework for high-level synthesis of heterogeneous mp-soc
JP6342065B2 (ja) 回路設計支援装置及び回路設計支援方法及び回路設計支援プログラム
WO2018168264A1 (ja) 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム
US20120226890A1 (en) Accelerator and data processing method
Malazgirt et al. Customizing VLIW processors from dynamically profiled execution traces
JP5467512B2 (ja) 動作合成装置、動作合成方法、及び、動作合成プログラム
JP6545406B2 (ja) 高位合成装置、高位合成方法および高位合成プログラム
JP2010277436A (ja) メモリ構造決定支援装置、メモリ構造決定プログラム及び記録媒体
Al-Zoubi et al. Resource-Aware Optimization of FPGA OpenCL Kernels
Hadjis Techniques for Mapping Deep Neural Network Frameworks to Programmable Accelerators
Segura Salvador High-performance and energy-efficient irregular graph processing on GPU architectures
JP5903814B2 (ja) 半導体回路性能見積装置、その方法及びそのプログラム
Zhong et al. Accelerating Data Analytics Kernels with Heterogeneous Computing

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20121002