JP5910108B2 - 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法 - Google Patents

高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法 Download PDF

Info

Publication number
JP5910108B2
JP5910108B2 JP2012013177A JP2012013177A JP5910108B2 JP 5910108 B2 JP5910108 B2 JP 5910108B2 JP 2012013177 A JP2012013177 A JP 2012013177A JP 2012013177 A JP2012013177 A JP 2012013177A JP 5910108 B2 JP5910108 B2 JP 5910108B2
Authority
JP
Japan
Prior art keywords
latency
description file
function
circuit
level synthesis
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.)
Expired - Fee Related
Application number
JP2012013177A
Other languages
English (en)
Other versions
JP2013152620A (ja
Inventor
篤 安中
篤 安中
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.)
Socionext Inc
Original Assignee
Socionext Inc
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 Socionext Inc filed Critical Socionext Inc
Priority to JP2012013177A priority Critical patent/JP5910108B2/ja
Priority to US13/742,638 priority patent/US8601413B2/en
Publication of JP2013152620A publication Critical patent/JP2013152620A/ja
Application granted granted Critical
Publication of JP5910108B2 publication Critical patent/JP5910108B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Description

本発明は,高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法に関する。
近年における集積回路の設計は,ムーアの法則に従って集積度が年々向上し,集積回路設計の複雑度は日々増加している。現在,集積回路設計の主流であるハードウエア記述言語(HDL(Hardware Description Language))を用いたRTL(Register Transfer Level)設計は,論理ゲートにより回路を設計するゲートレベル設計に比べて設計抽象度が高いので,集積回路設計の工数を大幅に削減できる。HDL記述ファイルは,論理合成されてゲートレベルの回路を記述するネットリストに変換され,さらに,ネットリストのゲートにライブラリに登録されているセルが割り当てられ,セル間を接続する配線とクロック供給回路がレイアウトされて,LSIチップの設計データが生成される。
しかし,RTL設計は,回路に対する抽象度が低いHDL記述を開発しなければならず,年々増加している回路規模に対応できなくなりつつあり,RTL設計よりもさらに抽象度の高い高位設計が利用され始めている。高位設計で用いられる入力言語(高位言語)としては,ソフトウェア言語の利用が多く,最も利用されているものはC/C++言語や,ハードウエア記述向けクラスライブラリを実装したSystemC等である。高位設計では,このような高位言語で回路のアルゴリズムまたは機能を記述したビヘイビア記述ファイルを生成する。
そして,高位言語で記述されたビヘイビア記述は,高位合成という一種のコンパイラによりHDLファイルに変換される。高位合成については,特許文献1〜4等に記載されている。
特開2010-165334号公報 特開2000-57180号公報 特開2004-265224号公報 特開平6-325124号公報
しかしながら,高位設計は未だ発展途上の技術であり,抽象度の低い設計には向かないこともある。
例えば,C/C++言語で記述すると,タイミングなどの時間の概念を記述することができない。したがって,高位設計を行う場合は,集積回路の機能すべてを高位言語で記述するのではなく,適材適所で既存のRTL設計と組み合わせて行うのが一般的である。
しかし,高位設計とRTL設計は別々の言語で集積回路の機能を記述するので,かつ抽象度も違うため,お互いを組み合わせた場合,それぞれのインタフェース部分の検証が必須となる。
そこで,本発明の目的は,タイミング制御を含めて集積回路の設計を高位言語で行うことができる高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法を提供することにある。
高位合成装置の第1の側面は,タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成装置であって,
プロセッサと,
前記プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成部と,
前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出部と,
前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成部と,
前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出部と,
前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,前記レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成部と,
前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入部とを有する。
第1の側面によれば,タイミング制御を含めて集積回路の設計を高位言語で行うことができる。
高位合成装置または高位合成プログラムを説明する図である。 レイテンシを説明する図である。 動的レイテンシを説明する図である。 静的レイテンシを説明する図である。 高位言語による高位設計を行った場合のHDLで記述された回路構成例を示す図である。 本実施の形態におけるビヘイビア記述の構成例を示す図である。 本実施の形態における高位合成装置の構成図である。 動的レイテンシ計算回路挿入機能付き高位合成装置を示す図である。 本実施の形態における動的レイテンシ計算回路挿入装置の処理のフローチャート図である。 ビヘイビア記述ファイルの例を示す図である。 図10のビヘイビア記述ファイルの機能部分の機能を説明する図である。 図10のビヘイビア記述ファイルの構成を示すブロック図である。 拡張変数抽出処理121のフローチャート図である。 拡張変数DB122の内容とそれを生成する段階で生成される関数ツリーを示す図である。 ループ情報抽出123の処理フローチャート図である。 抽出されたループ情報データベースの一例を示す図である。 スケジューリング処理116の一例を示す図である。 静的レイテンシ抽出処理126のフローチャート図である。 図10のビヘイビア記述ファイル内の関数calc_ave,pixel_aveの静的レイテンシを示す図である。 静的レイテンシDB 126の一例を示す図である。 静的レイテンシ抽出処理125におけるレイテンシ情報の更新処理のフローチャート図である。 レイテンシ計算回路生成処理のフローチャート図である。 レイテンシ計算回路生成処理を説明するための図である。 レイテンシ計算回路生成処理を説明するための図である。 レイテンシ計算回路付き回路のHDLファイル105のブロック図である。 制御回路24Hの動作を示すタイミングチャート図である。 図8のHDLファイル104の例を示す図である。 図8のHDLファイル104の例を示す図である。 図8のHDLファイル104の例を示す図である。 レイテンシ計算回路付き関数pixel_aveの回路のHDL記述例を示す図である。
図1は,高位合成装置または高位合成プログラムを説明する図である。高位合成装置または高位合成プログラム100は,抽象度の高い言語(例:C/C++/SystemC/C#/Java(登録商標)/BASIC/アセンブリ言語などの高位言語)で記述されたビヘイビア記述ファイル1と,集積回路であるハードウエアを実現するための制約102と,テクノロジライブラリ103とに基づいて,回路設計情報であるHDL,例えばVerilog-HDL,VHDLなど,で記述されたHDL記述ファイル2を生成する装置またはプログラム(コンパイラ)である。
ビヘイビア記述ファイル1には,集積回路で実現する機能が記述される。ただし,抽象度の高い言語で記述されるので,タイミングなどの時間についての記述は含まれない。制約102は,集積回路の最大周波数や目標面積などであり,速度優先で集積回路を設計したいか,消費電力またはチップサイズ優先で集積回路を設計したいかについての制約条件である。一般に,速度優先にするとその速度を実現するためにチップサイズが大きくなり消費電力が増加するのに対して,消費電力やチップサイズを優先するとクロック周波数が低くなり低速の集積回路になる傾向がある。テクノロジライブラリ103は,例えば90ナノテクノロジ,60ナノテクノロジや,使用可能なファンダリ会社のテクノロジなどを有し,集積回路設計者が希望するテクノロジが選択される。
ハードウエア記述ファイル2は,RTLレベルの回路をHDLで記述したファイルである。このHDL記述ファイルは,論理合成ツールにより,ゲートレベルの回路を記述するネットリストに変換される。そして,ネットリストに基づいて,チップ上のレイアウト設計が行われ,レイアウト設計データに基づいて集積回路チップが製造される。
図2は,レイテンシを説明する図である。レイテンシとは,高位合成で生成した回路などに入力データを与えてからその処理結果が出力されるまでのクロックサイクル数である。図2に示されるとおり,回路Lでは,時間t1で入力イネーブル信号がHレベルになり,入力データI0,I1,I2,I3-Inがクロックに同期して入力される。そして,時間t1から3クロックサイクル後の時間t2から,出力イネーブル信号がHレベルになると共に,入力データに対応する出力データD0,D1,D2,D3-Dnが出力される。このような回路Lのレイテンシは,3クロックサイクルとなる。回路Lの応答時間は,クロック周波数が高くなれば短い時間になり低くなれば長い時間になるものの,回路Lのレイテンシであるクロックサイクル数は固定である。
図3は,動的レイテンシを説明する図である。動的レイテンシは,入力データに対する出力データのレイテンシが入力データ以外の入力パラメータによって変化するレイテンシを意味する。図3の回路Dの例では,入力パラメータがP0の場合はレイテンシが2クロックサイクルであるのに対して,入力パラメータがP1に変化するとレイテンシが4クロックサイクルになっている。
図4は,静的レイテンシを説明する図である。静的レイテンシは,入力データに対する出力データのレイテンシが入力データ以外の入力パラメータの変化によらず常に固定の値となるレイテンシを意味する。図4の回路Sの例では,入力パラメータがP0,P1のいずれの場合も,レイテンシが2クロックサイクルと固定になっている。
静的レイテンシは,例えばC/C++言語によるビヘイビア記述ファイルを高位合成によりHDLファイルに変換する過程で求められ,高位合成のレポートに出力される。一方で,動的レイテンシは回路への入力パラメータによって変化するので,通常の高位合成だけでは求められない。
図5は,高位言語による高位設計を行った場合のHDLで記述された回路構成例を示す図である。前述のとおり,集積回路で実現したい機能のアルゴリズム等をC/C++などの高位言語で記述したビヘイビア記述ファイル1を高位合成することで,そのアルゴリズムによる機能を実現する機能回路2を記述したHDLファイル2に変換される。このように設計された機能回路2は,既に開発済みのHDLファイルである回路A,Bと接続したり,メモリであるROMやRAMとデータの読み書きを行うことが行われる。そのため,機能回路2と回路A,Bおよびメモリとの間に,インタフェース制御と機能回路2に対する入出力の制御を行うラッパーモジュール4を開発する必要がある。このラッパーモジュールは制御回路のHDL記述ファイルである。
つまり,C/C++言語などで高位設計を行う場合,アルゴリズム機能部分をC/C++言語で記述し,高位合成を行う。しかし,アルゴリズム機能部分の外部IFおよび機能部分の制御は,タイミングなどの時間概念の制御であり,C/C++言語ではタイミングを表現出来ない。そのため,現状では,図5のラッパーモジュール4は,HDLを用いてタイミング記述が可能なRTL設計で記述されている。この場合,アルゴリズム機能部分を高位合成した後に生成されるレポート情報3からレイテンシの情報を抜き出し,その値をラッパーモジュール4に記述する。これによりラッパーモジュール4がアルゴリズム機能回路2に対するタイミング制御を行うことができる。
しかし,図5のような設計方法では,高位言語によるビヘイビア記述ファイル1の開発とは別に,HDLで外部IF制御および機能回路の制御を行うラッパーモジュールのHDLファイルを別途開発する必要があり,さらに,ラッパーモジュール4とアルゴリズム機能回路2とのインタフェースの検証も必要になる。そして,アルゴリズム機能回路2のレイテンシが入力パラメータなどによって可変になる場合,高位合成後のレポート情報3からは静的レイテンシしか得られず,動的レイテンシを求めてラッパーモジュール内の回路記述を開発することが必要になる。このようなラッパーモジュールの開発は,通常,手作業により行われ,開発工数の増大を招く。
[本実施の形態におけるビヘイビア記述ファイル]
本実施の形態では,上記のラッパーモジュールのHDLファイルの開発を,高位言語によるビヘイビア記述とは別に行うのではなく,アルゴリズム機能部分の記述と,外部IFや機能部分の制御を行う部分(以下制御部分と称する。)の記述とを含むビヘイビア記述ファイルを開発する。そして,そのビヘイビア記述ファイルを高位合成することにより,アルゴリズム機能回路と,そのレイテンシに対応する制御や外部IFを行う制御回路とを有するHDLファイルに変換する。この高位合成により,レイテンシの計算を行う回路が自動的に生成される。その結果,生成されたHDLファイルの回路では,アルゴリズム機能回路内でその計算回路がレイテンシを計算し,制御回路に出力して,制御回路がレイテンシに基づく制御を行う。
図6は,本実施の形態におけるビヘイビア記述の構成例を示す図である。第1に,このビヘイビア記述20は,例えばC/C++の高位言語で記述され,アルゴリズム機能部分22と制御部分24とを有する。そして,第2に,アルゴリズム機能部分22のレイテンシの値を,制御部分24が参照出来る仕組みを記述する。第3に,アルゴリズム機能部分22内にレイテンシ拡張変数を埋め込み,高位合成プログラムが,高位合成のプロセスと平行してレイテンシ計算回路を自動で生成し,レイテンシ拡張変数の位置にレイテンシ計算回路を組み込む。このレイテンシ計算回路は,例えば,静的レイテンシであれば固定値であり,動的レイテンシでは入力パラメータに基づいて計算する計算回路である。その場合は,入力パラメータが与えられる関数内にレイテンシ計算回路が挿入されるように,レイテンシ拡張変数がその関数内に記述される。
高位合成プログラムは,通常の高位合成処理(コンパイル)の中で,ビヘイビア記述ファイル20の構文を解析し,データフローを生成し,RTL(Register Transfer Level)を生成するので,ビヘイビア記述ファイル内の関数やレイテンシの拡張変数を抽出することができると共に,関数の演算要素毎の静的レイテンシをレポートとして出力することができる。
そこで,本実施の形態における高位合成プログラムは,関数の演算要素毎の静的レイテンシと,関数の構文から得られるループ回数とに基づいて,アルゴリズム機能部分22のレイテンシの値またはレイテンシを計算する回路のHDL記述を自動的に生成する。この高位合成プログラムによるレイテンシ計算回路の生成処理については後に詳述する。
この方法によれば,アルゴリズム機能部分22を開発する開発者が,高位言語でアルゴリズム機能部分22と共に上記の制御部分24の記述も開発し,両者を含むビヘイビア記述が高位合成されて,機能部分に対応する機能回路と制御部分に対応する制御回路を有する回路のHDLファイルに変換される。さらに,高位合成処理で,機能回路の静的レイテンシや,入力パラメータによってレイテンシが可変になる動的レイテンシを計算する回路のHDL記述が開発され,制御回路が静的レイテンシまたは動的レイテンシを有する機能回路の制御を行えるようになる。
したがって,制御回路に対応するラッパーモジュールのHDLファイルを,高位合成後に別途開発する必要がなく,制御回路に対応する制御部分の記述がアルゴリズム機能部分の記述と共に同じビヘイビア記述ファイルとして開発される。さらに,ビヘイビア記述ファイル内には,アルゴリズム機能部分22からレイテンシを参照する記述が制御部分24に含まれ,制御部分24からアルゴリズム機能部分22へ制御信号を供給する記述も必要なら含ませることができ,HDLファイルでの両者の回路間の動作について検証しなくともよい。よって,本実施の形態の方法によれば,集積回路の設計工数を大幅に削減する。
[本実施の形態における高位合成装置]
図7は,本実施の形態における高位合成装置の構成図である。高位合成装置は,CPUなどのプロセッサ10と,RAMなどのメモリ12と,プログラムファイルやデータファイルが格納されたファイルシステムとがバスBUSを介して接続されるコンピュータシステムである。ファイルシステム内には,レイテンシ計算回路挿入機能付きの高位合成プログラム100と,高位合成用ライブラリ103とが格納される。レイテンシ計算回路挿入機能付き高位合成プログラム100は,通常の高位合成を行う高位合成プログラム110と,レイテンシ計算回路挿入プログラム120とを有する。
そして,図7の高位合成装置には,図6に示したビヘイビア記述ファイル101と高位合成制約ファイル102とが入力され,高位合成プログラム110がビヘイビア記述ファイル101をHDL記述ファイルに変換する。この高位合成処理中に,レイテンシ計算回路挿入プログラム120は,ビヘイビア記述ファイル101内の拡張変数とそれを含む関数を抽出しそれを有する拡張変数データベース(以下DB)122と,抽出した関数内のループ回数などを有するループ情報DB124と,関数内の各要素の静的レイテンシを抽出してそれを有する静的レイテンシDB126と,上記のDBに基づいて生成したレイテンシ計算回路のHDL記述ファイル128とを生成する。そして,高位合成プログラム110が高位合成により生成した機能回路と制御回路とを有するHDLファイル104内の拡張変数の位置に,レイテンシ計算回路のHDL記述を挿入し,レイテンシ計算回路付き機能回路と制御回路とを有するHDLファイル105を生成する。
図8は,動的レイテンシ計算回路挿入機能付き高位合成装置を示す図である。図7のレイテンシ計算回路挿入機能付き高位合成プログラム100をプロセッサ10が実行することにより,図8の高位合成装置が構成される。したがって,プログラムの引用番号110,120がそのまま装置の引用番号に与えられている。
動的レイテンシ計算回路挿入機能付き高位合成装置100は,従来の高位合成装置110を有するとともに,その高位合成装置110にはなかった動的レイテンシ計算回路挿入装置120と高位合成装置110と動的レイテンシ計算回路挿入装置120を接続するためのインタフェース131,インタフェース132,インタフェース133,インタフェース134を含む。このインタフェースらは,たとえば,高位合成プログラム100内に含まれている動的レイテンシ計算回路挿入装置120の各処理121,123,125,127,129をサブルーチンコールする記述である。
動的レイテンシ計算回路挿入装置120は,高位合成装置110に含まれるコード解析111,コントロール・データ・フロー解析113,スケジューリング116において,それぞれ拡張変数抽出121,ループ情報抽出123,静的レイテンシ抽出125を行い,レイテンシ計算回路生成127とレイテンシ計算回路挿入129に必要なデータベースである拡張変数DB 122,ループ情報DB 124, 静的レイテンシDB 126を生成する。レイテンシ計算回路生成127は,ループ情報DB 124と静的レイテンシDB 126からレイテンシ計算回路のHDL記述128を生成し,レイテンシ計算回路挿入129は,拡張変数DB 122を参照して,ビヘイビア記述101を高位合成して得た回路のHDLファイル104内のレイテンシ拡張変数が記述されている箇所に,レイテンシ計算回路のHDL記述128を挿入して,レイテンシ計算回路付き回路のHDLファイル105を生成する。
[動的レイテンシ計算回路挿入装置の概略]
図9は,本実施の形態における動的レイテンシ計算回路挿入装置の処理のフローチャート図である。以下,処理の概略を説明し,その後ビヘイビア記述の具体例に基づいて,詳細に説明する。
時間概念のないC/C++などの高位言語で記述されたビヘイビア記述内の機能部分を,高位合成により,その機能を実現する回路のHDLファイルへ変換する場合,機能部分のレイテンシに対する制御回路が必要になる。本実施の形態では,ビヘイビア記述内にこの機能部分と制御部分とを関連つけて開発し,動的レイテンシ計算回路挿入装置120が,機能部分を解析してレイテンシを求めるレイテンシ生成回路のHDL記述を生成し,高位合成されたHDLファイルに挿入する。挿入する位置を特定するために,ビヘイビア記述においてレイテンシ拡張変数を記述しておく。
さらに,動的レイテンシ計算回路挿入装置120では,特に,レイテンシが条件によって変化する場合,そのレイテンシを静的に決定することができないため,入力パラメータの変化を考慮したレイテンシ計算回路のHDL記述128を生成し,高位合成で生成する回路のHDLファイル104に挿入する。
動的レイテンシ計算回路挿入装置120の処理は,図9に示されるとおり,
(1)C/C++で記述された機能部分からレイテンシ拡張変数と関数を抽出し,拡張変数DB122を生成する(拡張変数抽出処理121)。
(2)前記関数に含まれるループを抽出し,ループ回数を含むループ情報を抽出し,ループ情報DB124を生成する(ループ情報抽出処理123)。
(3)前記関数を要素毎に分割し,各要素の静的なレイテンシを求め,静的レイテンシDB126を生成する(静的レイテンシ抽出処理125)。これでレイテンシ計算回路を生成するために必要なデータベースが構築される。
(4)前記ループ情報と前記静的なレイテンシとに基づき,動的レイテンシを計算するための式を求める(レイテンシ計算回路生成処理127)。
(5)レイテンシ計算式に相当する回路のHDLファイル128を,高位合成で変換された回路のHDLファイル104の中のレイテンシ拡張変数の箇所に挿入する(レイテンシ計算回路挿入処理129)。である。
レイテンシ計算回路のHDL記述が挿入された回路のHDLファイル105は,レイテンシに基づいて機能回路の制御を行う制御回路を有し,且つ,動的レイテンシを計算して制御回路の制御に反映することができる。さらに,ビヘイビア記述ファイル102は,機能部分と制御部分とが連携しあうように開発されているので,高位合成後のHDLファイル104,105において,機能回路と制御回路のインタフェース検証を行わなくともよい。
[ビヘイビア記述ファイルの例]
図10は,ビヘイビア記述ファイルの例を示す図である。この例は,C/C++で記述され,px列,py行の画素マトリクス内の各画素データの平均値を求める機能部分を有する。
図11は,図10のビヘイビア記述ファイルの機能部分の機能を説明する図である。この機能部分は,px列,py行の画素マトリクス内の各画素データの平均値を求める。
図10のビヘイビア記述ファイルソースコードは,入出力として次の変数や状態信号を有する。
入力px:横の画像サイズ
入力py:縦の画像サイズ
入力mem:画像のメモリ
入力start:開始信号
出力run:計算中を示す状態信号
出力done:終了信号
戻り値ave:平均算出結果(pxとpyの全画素を累積加算して,平均値を求める)
そして,画像メモリmemから横の画像サイズpxと縦の画像サイズpyで指定したサイズの画像データを読み込み,指定サイズの画像データの画素の平均値を算出して,平均値aveを出力する処理内容となっている。例えば,px=8,py=8の場合は,8×8=64画素分の平均値を求めて出力する。従って,本ソースコードは,平均値算出のためのループ回数がpxとpyで可変となり,高位合成した回路もpxとpyに従って入力から演算結果が出力されるまでのレイテンシが可変になっている。
図10のビヘイビア記述ファイルソースコードは,以下の記述を有する。
行1:レイテンシ拡張変数P_HLS_LATENCYを定義。ただし,この拡張変数はとりあえず0になっている。
行2:変数MAXが128と定義。
行3-27:アルゴリズム機能部分の記述。
行3-8:関数calc_aveの記述であり,画素データの合計値sumを列px,行pyの積で除算して求める関数。px,pyは変数である。
行10-27:関数pixel_aveの記述であり,変数に,スタート信号start,入力パラメータのpx,py,画素データが格納されているメモリの値mem[MAX],レイテンシ値latのアドレスを示すポインタ*latencyが含まれている。また,行13-14に,レイテンシ拡張変数P_HLS_LATENCYの値を値latに代入し,そのアドレスをポインタ*latencyに代入する記述が含められている。このレイテンシ拡張変数の位置に,高位合成で生成されるレイテンシ計算回路のHDL記述が埋め込まれる。そして,行15-24に,スタート信号startが真になると,ループL0,L1で全ての列px,行pyについてメモリ内の画素値を累積(行19)し,累積値sumの平均値を求める関数cal_aveをコールし(行22)する記述がある。
行29-50:制御部分の記述であり,関数controlは変数としてレイテンシ値latency,フラグstart,状態信号のポインタ*run,*dineが含まれている。レジスタsr_run,sr_doneがfalseにリセットされ(行31,32),カウント値cntが宣言され(行33),スタート信号startが真になると(行34),レジスタsr_run,sr_doneがtrue,falseに,カウント値cntがレイテンシ値latencyにされ(行35-37),カウント値cntが0になるまでの間(行38),レジスタsr_runが真にされ,カウント値cntがデクリメントされ(行40),カウント値cntが0になるとwhileループを抜けてレジスタsr_run,sr_doneがfalse,trueにセットされ(行42,43),スタート信号startが偽になるとレジスタsr_run,sr_doneがfalseにリセットされ(行45,46),最後に状態信号のポインタ*run,*dineにレジスタsr_run,sr_doneのアドレスが代入される(行48,49)。
行52-58:メインルーチンの関数dutが記述され(行52),その関数dutでは,レイテンシ値latency,平均値aveを宣言し(行54),関数pixel_aveの戻り値を平均値aveに代入し(行55),関数controlを実行し(行56),戻り値を平均値aveにする(行57)。
図12は,図10のビヘイビア記述ファイルの構成を示すブロック図である。上記の説明から明らかなとおり,図10のビヘイビア記述ファイルの構成は,図12に示されるとおりである。すなわち,ビヘイビア記述ファイル20は,アルゴリズム機能部分22である関数pixel_aveが,内部で他の関数calc_aveをコールし,さらに,関数pixel_ave内にレイテンシ拡張変数P_HLS_LATENCYが埋め込まれている。関数pixel_aveが,入力パラメータである変数px,pyを入力し,その変数px,pyに応じてレイテンシが変化するので,かかる動的レイテンシを計算する回路は,関数pixel_ave内に埋め込む必要があることは,ビヘイビア記述ファイルを開発する開発者は知っている。したがって,開発者は,上記のように動的レイテンシを計算する回路を埋め込む箇所を,レイテンシ拡張変数P_HLS_LATENCYで指定する。
さらに,ビヘイビア記述ファイル20は,レイテンシ値latencyに基づいてアルゴリズム機能部分22を制御するための状態信号run,doneを生成する制御部分24を有する。すなわち,制御部分24は,スタート信号startが真になったときに機能部分22が動作を開始することに対応して,その動作を開始し,そのレイテンシ値latencyに基づくクロックサイクル後に状態信号run,doneを出力する。
従来の機能部分22だけを有するビヘイビア記述ファイルを開発する場合に比較すると,開発者は,機能部分22がその機能回路を記述するHDLファイルに変換された場合に,その回路のレイテンシに対応する必要な制御を行う制御部分24を同時に開発し,さらに,そのレイテンシが入力パラメータなどにより動的に変化する動的レイテンシの場合には,そのレイテンシ計算が可能な位置にレイテンシ拡張変数P_HLS_LATENCYを埋め込む。その結果,ビヘイビア記述ファイルを高位合成することで,機能部分22の回路とそれの制御部分24の回路とを記述するHDLファイルに変換することができる。このHDLファイルでは,機能部分に対応する機能回路と制御部分に対応する制御回路とのインタフェースの記述も含まれる。そして,高位合成の過程で抽出した情報に基づいてレイテンシ生成回路のHDL記述を生成して,機能部分に対応する機能回路内に挿入してレイテンシ生成回路付き集積回路のHDLファイルを生成することができる。
[高位合成の詳細説明]
図10のビヘイビア記述ファイルを例にして,図8,図9を参照しながら,本実施の形態における高位合成装置(または高位合成プログラム)100の詳細な処理について説明する。以下,高位合成プログラムをプロセッサが実行した場合の処理として説明する。
図8,図9において,ビヘイビア記述ファイル101は,高位言語であるC/C++で記述され,例えば図10の記述を有する。高位合成制約102は,高位合成を行うための制約条件であり,主なものとして,集積回路の目標動作周波数,目標面積,高位合成用ライブラリの設定(どのテクノロジのライブラリを使用するかの設定)などである。さらに,高位合成用ライブラリ103は,高位合成を行うためのライブラリであり,通常,ASICベンダが提供するテクノロジライブラリから高位合成用に提供されるライブラリを使用する。ライブラリ内には,回路の遅延情報,面積情報,消費電力情報,などが定義されている。
高位合成プログラム110は,ビヘイビア記述ファイル101をコンパイルして集積回路のHDLファイル104に変換する。さらに,高位合成プログラム110には,動的レイテンシ計算回路挿入プログラム120の各処理をコールする記述等がインタフェースとして含まれている。
[コード解析処理111]
高位合成プログラム110は,コード解析処理111にて,ビヘイビア記述ファイル101が高位合成可能な記述であることをチェックし,高位合成装置が解釈できるフォーマットに変換する。このコード解析処理は,一般的なコンパイラ技術をもとに作られており,字句解析,構文解析,意味解析,などからなる。コード解析の処理後に拡張変数抽出処理121で拡張変数を抽出する処理を行う。
[拡張変数抽出処理121]
図13は,拡張変数抽出処理121のフローチャート図である。図14は,拡張変数DB122の内容とそれを生成する段階で生成される関数ツリーを示す図である。ビヘイビア記述ファイル101(図10のソースコード例参照)をコード処理111で解析を行った後,図13のフローチャート図に従って,拡張変数P_HLS_LAYTENCYを拡張変数DB 122に登録する。
拡張変数抽出121では,拡張変数抽出に先立って,図14に示す関数ツリーの作成を行う(S10,S11)。図10の例では,関数dutがトップに,その次のレベルに関数pixel_aveとcontrol関数とがあり,さらに,関数pixel_aveの下のレベルに関数calc_aveがある。この関数ツリーを作成することにより,各関数がどのレベルに属するかを把握することが可能となる。
次に各関数内で定義されている拡張変数を抽出し,拡張変数が存在すればその"名前"を,存在しなければ"なし"を各関数レベルと共に拡張変数DB122に登録する(S12,S13,S14)。図10のソースコードで拡張変数P_HLS_LAYTENCYが存在する関数は関数pixel_aveのみであり,その他の関数に拡張変数は存在しない。図10のソースコードの例では,最終的には図14の表1の拡張変数DB 122が得られる。ここで得られた拡張変数DB 122の内容は,後工程のレイテンシ計算回路129で参照される。
[コード最適化処理112]
コード最適化処理112では,コード解析111の結果をもとにコード記述の最適化を行う。例えば,冗長なコードがある場合に冗長性をなくすよう最適化するなどである。一般的なコンパイラ技術の最適化のフェーズにあたる。
[コントロール・データ・フロー解析113]
次に,最適化したソースコードからデータ・フロー・グラフを生成し,高位合成に必要なデータの流れを明確にする。このコントロール・データ・フロー解析113内のループ解析113aと条件分岐解析113bで,後工程であるリソース・アロケーション115とスケジューリング116の処理対象となるループ文や条件分岐の解析を行い,ループや条件分岐が反映されたデータ・フロー・グラフを生成する。そして,コントロール・データ・フロー解析の処理後にループ情報抽出123でループ情報を抽出する処理を行う。
[ループ情報抽出処理123]
図15は,ループ情報抽出123の処理フローチャート図である。図16は,抽出されたループ情報データベースの一例を示す図である。コントロール・データ・フロー解析113でループ解析113aや条件分岐解析113bを行った後に,動的レイテンシ計算回路挿入プログラム120が,ループ情報抽出処理123を実行する。
まず,初めに各関数内に記述されているループ文(for文,while文,do〜while文,break文)の抽出を行い,抽出されたループ文よりも入れ子として先にあるループは親ループとして定義し,親ループの抽出を行う(S15,S16)。その後,ループ回数となる要素を確定し,各関数ごとに用意したループ情報DBに登録を行う(S18,S19,S20)。
図10のビヘイビア記述ファイルのpixel_ave関数の場合,最初に出現するループL0より上のループは存在しないため,親ループはなし,ループ回数は変数pxとなり,回数属性は変数,変数名はpxとして,図16の表3のように登録する。次にループL1の場合,ループL1より上のループとしてループL0が存在しているため,親ループはL0,ループ回数は変数pyとなり,回数属性は変数,変数名はpyとして,図16の表3のように登録する。回数属性が変数ではなく固定値である場合は,回数属性を固定値,固定値にループ回数の値を登録する。
関数pixel_aveと同様の処理を関数calc_ave,関数control,関数dutにも行うが,これらの関数はいずれも内部にループ文が存在しないため,ループなし,親ループなし,回数属性なし,変数名/固定値なし,という形で登録される。結局,ループ情報抽出処理123の結果,図16の表2,3,4,5のような内容のループ情報DB124が生成される。
[ライブラリ選択処理114]
高位合成プログラム110に戻り,ライブラリ選択処理114では,高位合成制約102で指定したライブラリを高位合成ライブラリ103から読み込み,高位合成に必要な演算リソースの作成や,すでに準備された演算リソースを選択して,次の処理であるリソース・アロケーション115にライブラリデータを渡す。
[リソース・アロケーション処理115]
次に,リソース・アロケーション処理115では,コントロール・データ・フロー解析113で生成したデータ・フロー・グラフの各演算パーツ(加減算器,乗算器,除算器,など)に対して,ライブラリ選択114で読み込んだライブラリのリソースを割り当てる。これも高位合成の一般的処理である。
[スケジューリング処理116]
スケジューリング処理116では,リソース・アロケーション115でライブラリデータを適用したデータ・フロー・グラフに対して,高位合成制約102で記述した目標動作周波数,スループットなどの制約を与え,その制約を満たす範囲内で高位合成可能なクロックサイクルを計算する。本処理の時点でUntimedな処理フローからフリップフロップを利用したクロックサイクルの処理フロー(RTL: Register Transfer Level)への変換が行われる。本実施の形態では,スケジューリングの処理後に静的レイテンシ抽出125で静的レイテンシを抽出する処理を行う。
図17は,スケジューリング処理116の一例を示す図である。まず,図17中の(1)に示されているX=A+B*Cのフローグラフについて,加算器と乗算器との間にラッチ回路FFを挿入して(2)のグラフを生成する。この(2)のグラフにおいて乗算器は入力側ラッチ回路FFと出力側ラッチ回路FFとの間に設けられ,乗算器は1クロックサイクルt10で乗算処理を完了させる構成になっている。そこで,スケジューリング処理116では,高位合成制約102の目標動作周波数から1クロックサイクルの時間が得られ,その時間内に乗算器が乗算処理を完了できるか否かチェックする。
完了不能の場合は,さらにスケジューリング処理により,乗算器を2つに分割し,それらの間にラッチ回路FFを挿入する。その結果,乗算器は2クロックサイクルで処理すれば良いことになり,乗算器は2クロックサイクルt12で乗算処理を完了させる構成に変更される。
上記のようなスケジューリング処理により,フローグラフにクロックサイクルに対応したラッチ回路が追加され,RTLへの変換が行われる。RTLに変換されれば,各関数内に存在する静的なレイテンシを決定することができる。
[静的レイテンシ抽出処理125]
次に,スケジューリング116で各関数内に存在する静的なレイテンシが決定可能になるので,静的レイテンシ抽出処理125では,静的レイテンシの値を抽出し,静的レイテンシDB 126に登録する。
図18は,静的レイテンシ抽出処理126のフローチャート図である。図19は,図10のビヘイビア記述ファイル内の関数calc_ave,pixel_aveの静的レイテンシを示す図である。そして,図20は,静的レイテンシDB 126の一例を示す図である。
動的レイテンシの計算対象となる関数は,拡張変数P_HLS_LATENCYが記述されているpixel_ave関数とそこから呼び出されるcalc_ave関数である。そこで,図19にはpixel_ave関数とcalc_ave関数のみを抜き出したC/C++のソースコードが示されている。まず初めに,図19のソースコードから演算要素となる式を抽出し,各要素ごとにユニークな番号I〜VIIを割り振る。次に,番号ごとに属性,親ループ,静的レイテンシを抽出し(図18のS21),図20の表6のように静的レイテンシDBに登録する(S22)。続いて,calc_ave関数も同様の処理S21,S22を行い,図20の表7のように静的レイテンシDBに登録する。ただし,calc_ave関数は,pixel_ave関数と違いループがないため,親ループは存在しない。同様の処理S21,S22を,拡張変数に関連するすべての関数に対して行い,静的レイテンシDB 126を構築する。
図19の2つの関数の演算要素のレイテンシは,以下のとおりである。
関数pixel_aveの場合では,
I:条件式であるため文属性は条件式,親ループは存在せずなし,レイテンシは0
II:代入文であるため文属性は代入,親ループは存在せずなし,レイテンシは1
III:累積加算であるため文属性は計算式,親ループはループL1,レイテンシは5
IV:関数であるため文属性は関数,親ループは存在せずなし,レイテンシは未定
V:リターンであるため文属性はリターン,親ループは存在せずなし,レイテンシは0
また,関数calc_aveの場合では,
VI:計算式であるため文属性は式,親ループは存在せずなし,レイテンシは3
VII:リターンであるため文属性はリターン,親ループは存在せずなし,レイテンシは0
上記の両関数の演算要素のレイテンシ抽出により,両関数に対する静的レイテンシDBは,図20の表6,表7に示されるとおりとなる。さらに,関数calc_aveのレイテンシは,表7のレイテンシの列を加算することで得られ,関数calc_aveのレイテンシは3+0=3となる。
次に,表6内の演算要素IVの未定のレイテンシを確定させるために表7から得られた関数calc_aveのレイテンシ3+0=3を参照し,表6の演算要素IVのレイテンシを更新する。その結果,図20の表8に示す関数pixel_aveの静的レイテンシDBが生成される。
図21は,静的レイテンシ抽出処理125におけるレイテンシ情報の更新処理のフローチャート図である。図21に示すとおり,高位合成対象の関数の静的レイテンシDBを読み込む(S25)。これにより,図20の表6,7が読み込まれる。そして,表6について,文属性が関数である行を抽出し(S27),その関数の行のレイテンシの列が「確定」か「未定」かを確認し(S28),「未定」の場合は,その行の関数の静的レイテンシDB(表7)を読み込む(S29)。そして,読み込んだ関数の静的レイテンシDB(表7)内に未確定の演算要素があるか否かチェックし(S30),存在する場合は,図21のプログラムを再帰呼び出しする(S32)。表7の静的レイテンシDBには未確定の演算要素は存在しないので,表6の行IVのレイテンシ情報を更新する(S31)。具体的には,関数calc_aveの合計レイテンシ情報「3」を表6の行IVのレイテンシ情報に更新する。そして,関数pixel_aveの全ての関数について上記と同じ処理を完了すれば(S26のYES),更新処理は完了する。
[回路最適化117]
高位合成プログラム110に戻り,回路最適化処理117にて,スケジューリング116で生成されたRTL(図17(3))に対して,演算器やフリップフロップの最適化を行い,制約を満たす範囲内で最適な回路を構築する。この最適化処理により,冗長な構成や無駄な構成などが最適化される。これも一般的な高位合成プログラムの処理の一つである。
[HDL生成118]
高位合成プログラム110は,上記の最適化されたRTL回路からHDLファイルを生成する。HDLファイルとしては,一般的にVerilog-HDLやVHDLが使用される。本実施の形態では,HDLファイル生成処理118の後にレイテンシ計算回路挿入処理129でレイテンシ計算回路の生成と挿入を行う。
[レイテンシ計算回路生成処理127]
一方,動的レイテンシ計算回路挿入プログラム120は,レイテンシ計算回路生成処理127を実行して,レイテンシ計算回路のHDLファイルを生成する。レイテンシ計算回路生成処理127では,図16のループ情報DB 124と図20の静的レイテンシDB 126に基づいて,動的レイテンシ計算回路のHDLファイル128を生成する。
まず,図20の表8のpixel_ave関数の静的レイテンシDBでは,演算要素IIIの親ループL1のレイテンシが何回なのか,もしくはループ回数が変数なのかの情報が決まっていない。この情報の確定は,ループ情報抽出123で生成した図16の表3のpixel_ave関数のループ情報DB 124を参照することで可能である。計算式確定までの処理ステップを以下に示す。
図22は,レイテンシ計算回路生成処理のフローチャート図である。また,図23,図24は,レイテンシ計算回路生成処理を説明するための図である。図22のレイテンシ計算回路生成処理では,まず高位合成対象関数dutのうち,レイテンシ拡張変数が埋め込まれている関数pixel_aveとそれがコールする関数calc_aveとを統合した静的レイテンシDB(図20の表8)を読み込む(S40)。そして,その静的レイテンシDB(図20の表8)内の親ループが存在する全ての行について処理S42-S44を実行する(S41のNO)。そして,親ループが存在する行が全て処理されて親ループがなくなると(S41のYES),処理S45,S46を実行してレイテンシ計算式の確定(S45)と,その回路のHDLファイルの生成(S46)を行う。
図20の表8の例では,処理S42-S44を2回行い,その後処理S45,S46を行うことでレイテンシ計算回路のHDLファイルが生成される。以下,具体例に沿って説明する。
処理S42-S44(1回目):図23に示すように表8の要素IIIの親ループL1の情報を参照する。表8の関数pixel_aveの親ループL1の情報は,表3の関数pixel_aveのループ情報DBにおけるループ名L1の列を参照することで取得できる(S42)。この場合,表3の関数pixel_aveのループ情報DBでは,ループL1の親ループはL0,回数属性は変数,変数名はpyであるため,表8の要素IIIの親ループ名をL1からL1の親ループであるL0に書き換え(S43),表3のループL1のループ回数である変数名pyに基づいて,表8の要素IIIのレイテンシを5*pyに書き換える(S44)。上記の処理を行うことで,図23において表8は表9のように更新される。
処理S42-S44(2回目):図24に示すように表9の要素IIIの親ループL0の情報を参照する。
表9の関数pixel_aveの親ループL0の情報は,表3の関数pixel_aveのループ情報DBにおけるループ名L0の列を参照することで取得できる(S42)。この場合,表3の関数pixel_aveのループ情報DBでは,ループL0の親ループはなし,回数属性は変数,変数名はpxであるため,表9の要素IIIの親ループ名をL0から親ループなしに書き換え(S43),表3のループL0のループ回数である変数名pxに基づいて,表9のIIIのレイテンシを5*px*pyに書き換える(S44)。上記の処理を行うことで,図24において表9は表10のように更新される。
処理S45,S46:図24の表10からレイテンシの計算式を抽出し,計算回路を生成する。
処理S42-S44の繰り返しにより,静的レイテンシDB内の未確定情報がすべて確定したため,表10のレイテンシの列の総和が関数pixel_aveのレイテンシの計算式になる(S45)。表10の例では,「1+5*px*py+3」というレイテンシ計算式になる。そこで,このレイテンシ計算式に相当する回路のHDLファイルが,動的なレイテンシ計算回路128として生成される(S46)。
[レイテンシ計算回路挿入処理129]
レイテンシ計算回路挿入処理129では,HDLファイル104内の拡張変数と拡張変数DB 122に登録されている拡張変数が一致することを確認し,一致すればHDLファイル104内の拡張変数の箇所にレイテンシ計算回路のHDL記述128を挿入し,レイテンシ計算回路付き回路のHDLファイル105を生成する。
図25は,レイテンシ計算回路付き回路のHDLファイル105のブロック図である。図12に示したビヘイビア記述ファイルのブロック図における機能部分22の関数pixel_aveと関数calc_aveとが,図25のHDLファイルのブロック図では,pixel_ave回路22Hとcalc_ave回路23HのHDL記述に変換され,図12の拡張変数P_HLS_LATENCYが,図25ではレイテンシ計算回路のHDL記述128に変換されている。さらに,図12の制御部分24は,図25の制御回路のHDL記述24Hに変換されている。
そして,図23の回路では,レイテンシ計算回路128で計算されるレイテンシlatencyが制御回路24Hに入力されるよう高位合成されるので,従来のように制御回路を高位合成とは独立してHDLファイルにより開発した場合の動作検証などが不要になる。
図26は,制御回路24Hの動作を示すタイミングチャート図である。図10のビヘイビア記述ファイルのソースコード内にある制御部分controlの動作は,レイテンシ計算回路により計算されたレイテンシ値latencyが与えられることで,図26に示す動作になる。即ち,スタート信号startが「1」になると,状態信号runが「1」になり,クロックCLKに同期して,カウンタのカウント値cntがレイテンシ値Latencyからデクリメントされる。そして,カウント値cntが0になると,状態信号runが「0」になると共に,状態信号doneが1クロックサイクルだけ「1」になる。
この制御回路24Hが出力する状態信号run,doneを参照して,図25には示されていない別の回路により,pixel_ave回路22Hの出力である平均値aveの値がラッチされる。つまり,状態信号doneが一種のストローブ信号として機能する。
図10のビヘイビア記述ファイルの例では,関数pixel_aveにだけレイテンシ拡張変数が埋め込まれている。複数の関数においてそれぞれレイテンシに対応した制御が必要な場合は,各関数にレイテンシ拡張変数が区別可能に埋め込まれることになることは明らかである。そして,前述の動的レイテンシ計算回路挿入プログラム120により,それぞれのレイテンシ拡張変数が埋め込まれた関数それぞれについて,レイテンシ計算式の生成とレイテンシ計算回路のHDL記述128の生成が行われ,対応するレイテンシ拡張変数の位置に挿入される。
[静的なレイテンシ計算回路の例]
図22のレイテンシ計算回路の生成処理127を実行したとき,レイテンシ計算式に変数が含まれない場合がある。その場合は,その関数のレイテンシは,入力パラメータにより動的に変化することのない静的レイテンシである。その場合は,レイテンシ計算回路は,変数が含まれず,固定値の演算式または固定値になる。たとえば,上記の例でpx=4,py=4の固定値の場合は,レイテンシ計算式は「1+5×4×4+3」となり,レイテンシ=84で固定となる。
このようにレイテンシ拡張変数が埋め込まれた関数のレイテンシが静的レイテンシの場合も,本実施の形態にしたがって,固定値についてレイテンシ計算回路のHDL記述を生成して挿入すれば,制御回路のHDLファイルを有効に生成することができる。すなわち,図23に示したレイテンシ計算回路付き回路のHDLファイル105では,レイテンシ計算回路128が固定値を出力する回路になる。もちろん,この場合のレイテンシ計算回路はレイテンシを変数で計算することはない。しかし,この場合においても,回路開発において,制御部分をビヘイビア記述ファイル内に含めて開発できるので,高位合成により制御回路を有する回路のHDLファイル105を開発することができる。そして,制御回路と機能回路とのインタフェースの検証作業などは不要になる。
[HDLファイル104,105の具体例]
図27,図28,図29は,図8のHDLファイル104の例を示す図である。図27において,リスト1-aは,図10のビヘイビア記述ファイルの行3-8の関数calc_aveを高位合成した回路のHDL記述例である。リスト1-aでは,関数calc_aveの動作を高位合成した回路の具体的なHDL記述は簡単のために省略されている。リスト1-a内に示されるとおり,このHDL記述は,入力sum,px,pyと出力aveを有する回路モジュールcalc_aveを記述する。
さらに,図27のリスト1-bは,図10のビヘイビア記述ファイルの行29-50の関数controlを高位合成した回路のHDL記述例である。ここでも関数controlの動作を高位合成した回路の具体的なHDL記述は省略されている。リスト1-b内に示されるとおり,このHDL記述は,クロック入力clk,入力rst,latency,start,出力run,doneを有する回路モジュールcontrolを記述する。
図28において,リスト1-cは,図10のメインの関数dutを高位合成した回路のHDL記述例である。ビヘイビア記述内の関数dutが,回路モジュールdutを記述するHDLファイルに変換されている。また,回路モジュールdutは,内部でcontrolとpixel_aveをコールしている。
図29において,リスト1-dは,図10の関数pixel_aveを高位合成した回路のHDL記述例である。リスト1-dでは,関数pixel_aveの動作を高位合成した回路の具体的なHDL記述は簡単のために省略されている。リスト1-d内に示されるとおり,このHDL記述は,クロック入力clk,入力rst,start,px,py,出力ave,latencyを有する回路モジュールcalc_aveを記述する。そして,この関数pixel_aveのHDL記述においても,レイテンシ拡張変数P_HLS_LATENCYを出力latencyに代入する回路が下線のとおり含まれている。これは,ビヘイビア記述内の関数pixel_ave内に記述したレイテンシ拡張変数がHDL記述に変換されたものである。
図30は,レイテンシ計算回路付き関数pixel_aveの回路のHDL記述例を示す図である。このレイテンシ計算回路付き関数pixel_aveの回路のHDL記述105は,ビヘイビア記述101を高位合成して生成したHDLファイル104内の関数pixel_ave(図29)内のレイテンシ拡張変数P_HLS_LATENCYに,レイテンシ計算回路のHDL記述128を挿入して生成される。図30中の下線部分がレイテンシ計算回路のHDL記述128に対応する。
上記の実施の形態では,図8に示されるとおり,高位合成プログラム110が変換した回路のHDLファイル104内の拡張変数の位置に,動的レイテンシ計算回路挿入プログラム120が生成したレイテンシ計算回路のHDLファイル128を挿入した。しかし,スケジューリング処理116で生成されたRTL記述に,レイテンシ計算回路生成処理127で生成されるレイテンシ計算回路のRTL記述を挿入して,それをHDLファイルに変換するようにしてもよい。
以上の通り,本実施の形態では,集積回路で実現したい機能部分と,それを制御する制御部分とを有するビヘイビア記述ファイル101を開発する。また,その機能部分にレイテンシ拡張変数を挿入しておく。そして,高位言語で記述されたビヘイビア記述ファイル101を高位合成する過程で,レイテンシの制御が必要な関数の解析結果であるループ情報DBと,その関数の静的レイテンシDBとを生成し,両DBから関数のレイテンシ計算式を生成し,レイテンシ計算回路のHDL記述128を生成する。最後にビヘイビア記述ファイル101を高位合成して変換したHDL記述ファイル104内のレイテンシ拡張変数の位置にレイテンシ計算回路のHDL記述128を挿入することで,レイテンシに対する制御回路を有する集積回路のHDLファイル105を生成することができる。しかも,レイテンシが変数により動的に変化する場合は,動的レイテンシ計算回路のHDL記述128を挿入することで,動的レイテンシに対する制御回路を有する集積回路のHDLファイル105を生成することができる。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成装置であって,
プロセッサと,
前記プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成部と,
前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出部と,
前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成部と,
前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出部(125)と,
前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,前記レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成部と,
前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入部とを有する高位合成装置。
(付記2)
付記1において,
前記レイテンシ生成回路生成部が生成する第2のハードウエア記述ファイルは,前記レイテンシ拡張変数に対応するレイテンシ生成回路として,前記抽出した関数内の静的なレイテンシを前記ループ情報のループ回数に基づいて加算するレイテンシ生成回路を記述する高位合成装置。
(付記3)
付記2において,
前記ループ回数は,前記レイテンシ拡張変数を内部に有する全てのループのループ回数を有する高位合成装置。
(付記4)
付記3において,
前記ループ回数のいずれかが変数に基づくループ回数であり,
前記レイテンシ生成回路は,前記変数に基づいて関数の動的レイテンシを算出する回路である高位合成装置。
(付記5)
付記1〜3のいずれかにおいて,
前記ビヘイビア記述ファイルは,前記機能部分内のレイテンシ拡張変数の値を前記制御部分に供給する記述を有する高位合成装置。
(付記6)
タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成方法であって,
プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成工程と,
前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出工程と,
前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成工程と,
前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出工程と,
前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,前記レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成工程と,
前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入工程(129)とを有する高位合成方法。
(付記7)
タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成処理をコンピュータに実行させる高位合成プログラムであって,
前記高位合成処理は,
プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成工程と,
前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出工程と,
前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成工程と,
前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出工程と,
前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,前記レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成工程と,
前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入工程とを有する高位合成プログラム。
(付記8)
タイミング記述がない高位言語によるビヘイビア記述ファイルであって,集積回路の機能回路に対応する機能部分の記述と,前記機能部分のレイテンシに対応する制御回路に対応する制御部分の記述と,前記機能部分内のレイテンシ拡張変数の記述とを有するビヘイビア記述ファイルを生成する工程と,
コンピュータが,前記ビヘイビア記述ファイルを高位合成して第1のハードウエア記述ファイルを生成する工程と,
コンピュータが,前記ビヘイビア記述ファイルの高位合成工程で抽出されるデータであって,前記レイテンシ拡張変数を有する関数のループ回数と前記関数内の静的レイテンシのデータとから,レイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成する工程と,
コンピュータが,前記第1のハードウエア記述ファイル内のレイテンシ拡張変数の記述を,前記第2のハードウエア記述ファイル内の前記レイテンシ生成回路のハードウエア記述に置換して,レイテンシ生成回路と前記機能回路と前記制御回路とを記述する第3のハードウエア記述ファイルを生成する工程とを有する集積回路の設計方法。
(付記9)
付記8において,
前記第2のハードウエア記述ファイルは,前記レイテンシ生成回路として,前記抽出した関数内の静的なレイテンシを前記ループ回数に基づいて加算するレイテンシ生成回路を記述する集積回路の設計方法。
(付記10)
付記9において,
前記ループ回数は,前記レイテンシ拡張変数を内部に有する全てのループのループ回数を有する集積回路の設計方法。
(付記11)
付記10において,
前記ループ回数のいずれかが変数に基づくループ回数であり,
前記レイテンシ生成回路は,前記変数に基づいて前記関数の動的レイテンシを算出する回路である集積回路の設計方法。
(付記12)
付記8〜11のいずれかにおいて,
前記ビヘイビア記述ファイルは,前記機能部分内のレイテンシ拡張変数を前記制御部分に供給する記述を有する集積回路の設計方法。
100:動的レイテンシ計算回路挿入機能付き高位合成プログラム
101:ビヘイビア記述ファイル
104:第1のハードウエア記述ファイル
105:第3のハードウエア記述ファイル
110:高位合成プログラム
120:動的レイテンシ計算回路挿入プログラム
121:拡張変数抽出処理
123:ループ情報抽出処理
125:静的レイテンシ抽出処理
127:レイテンシ計算回路生成処理
129:レイテンシ計算回路挿入処理

Claims (8)

  1. タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成装置であって,
    プロセッサと,
    前記プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成部と,
    前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出部と,
    前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成部と,
    前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出部と,
    前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成部と,
    前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入部とを有する高位合成装置。
  2. 請求項1において,
    前記レイテンシ生成回路生成部が生成する第2のハードウエア記述ファイルは,前記レイテンシ拡張変数に対応するレイテンシ生成回路として,前記抽出した関数内の静的なレイテンシを前記ループ情報のループ回数に基づいて加算するレイテンシ生成回路を記述する高位合成装置。
  3. 請求項2において,
    前記ループ情報生成部は,前記抽出した関数内の全てのループそれぞれのループ回数を,前記ループ情報に含まれるループ回数として生成する高位合成装置。
  4. 請求項3において,
    前記ループ回数のいずれかが変数に基づくループ回数であり,
    前記レイテンシ生成回路は,前記変数に基づいて関数の動的レイテンシを算出する回路である高位合成装置。
  5. 請求項1〜3のいずれかにおいて,
    前記ビヘイビア記述ファイルは,前記機能部分内のレイテンシ拡張変数の値を前記制御部分に供給する記述を有する高位合成装置。
  6. タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成方法であって,
    プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成工程と,
    前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出工程と,
    前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成工程と,
    前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出工程と,
    前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成工程と,
    前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入工程とを有する高位合成方法。
  7. タイミング記述がない高位言語により集積回路の機能を記述したビヘイビア記述ファイルを,タイミング記述を含めて前記集積回路を記述するハードウエア記述ファイルに変換する高位合成処理をコンピュータに実行させる高位合成プログラムであって,
    前記高位合成処理は,
    プロセッサが,前記機能を記述した機能部分とタイミングを制御する制御部分とを有するビヘイビア記述ファイルを,第1のハードウエア記述ファイルに変換する高位合成工程と,
    前記プロセッサが,前記ビヘイビア記述ファイルから,前記機能部分内のレイテンシ拡張変数を含む関数を抽出する変数抽出工程と,
    前記プロセッサが,前記抽出した関数に含まれるループ記述を抽出し,前記関数内のループのループ回数を含むループ情報を生成するループ情報生成工程と,
    前記プロセッサが,前記抽出した関数の要素毎に静的なレイテンシを生成する静的レイテンシ抽出工程と,
    前記プロセッサが,前記ループ回数と静的レイテンシとに基づいて,レイテンシ情報を生成するレイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成するレイテンシ生成回路生成工程と,
    前記プロセッサが,前記第1のハードウエア記述ファイルに前記第2のハードウエア記述ファイルを挿入して第3のハードウエア記述ファイルを生成する挿入工程とを有する高位合成プログラム。
  8. タイミング記述がない高位言語によるビヘイビア記述ファイルであって,集積回路の機能回路に対応する機能部分の記述と,前記機能部分のレイテンシに対応する制御回路に対応する制御部分の記述と,前記機能部分内のレイテンシ拡張変数の記述とを有するビヘイビア記述ファイルを生成する工程と,
    コンピュータが,前記ビヘイビア記述ファイルを高位合成して第1のハードウエア記述ファイルを生成する工程と,
    コンピュータが,前記ビヘイビア記述ファイルの高位合成工程で抽出されるデータであって,前記レイテンシ拡張変数を有する関数のループ回数と前記関数内の静的レイテンシのデータとから,レイテンシ生成回路を記述する第2のハードウエア記述ファイルを生成する工程と,
    コンピュータが,前記第1のハードウエア記述ファイル内のレイテンシ拡張変数の記述を,前記第2のハードウエア記述ファイル内の前記レイテンシ生成回路のハードウエア記述に置換して,レイテンシ生成回路と前記機能回路と前記制御回路とを記述する第3のハードウエア記述ファイルを生成する工程とを有する集積回路の設計方法。
JP2012013177A 2012-01-25 2012-01-25 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法 Expired - Fee Related JP5910108B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012013177A JP5910108B2 (ja) 2012-01-25 2012-01-25 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法
US13/742,638 US8601413B2 (en) 2012-01-25 2013-01-16 High-level synthesis device, high-level synthesis method, high-level synthesis program, and integrated circuit design method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012013177A JP5910108B2 (ja) 2012-01-25 2012-01-25 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法

Publications (2)

Publication Number Publication Date
JP2013152620A JP2013152620A (ja) 2013-08-08
JP5910108B2 true JP5910108B2 (ja) 2016-04-27

Family

ID=48798308

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012013177A Expired - Fee Related JP5910108B2 (ja) 2012-01-25 2012-01-25 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法

Country Status (2)

Country Link
US (1) US8601413B2 (ja)
JP (1) JP5910108B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6254387B2 (ja) * 2013-08-30 2017-12-27 株式会社日立情報通信エンジニアリング 高位合成で作成する新規設計データと既存設計データの接続方法
JP6255880B2 (ja) * 2013-10-10 2018-01-10 株式会社ソシオネクスト 高位合成用データ生成装置、高位合成装置、高位合成用データ生成方法及びプログラム
GB2525596B (en) * 2014-04-28 2021-05-26 Arm Ip Ltd Access control and code scheduling
US9449131B2 (en) * 2014-06-02 2016-09-20 Xilinx, Inc. Extracting system architecture in high level synthesis
US9075945B1 (en) 2014-06-27 2015-07-07 Google Inc. Method for implementing efficient entropy decoder by using high level synthesis
EP3304364A4 (en) 2015-06-05 2018-07-11 Chaoyang Semiconductor Jiangyin Technology Co., Ltd. Integrated system of pdn implementation and digital co-synthesis
JP6407181B2 (ja) * 2016-03-04 2018-10-17 三菱電機株式会社 設計支援装置、設計支援方法及び設計支援プログラム
US9953121B2 (en) * 2016-05-03 2018-04-24 International Business Machines Corporation Accommodating engineering change orders in integrated circuit design
EP3624392B1 (en) * 2018-09-17 2023-05-10 Secure-IC SAS Methods and devices for secure secret key generation
KR20200139525A (ko) 2019-06-04 2020-12-14 삼성전자주식회사 Fpga를 포함하는 전자 시스템 및 이의 동작 방법
US11829737B2 (en) 2020-01-16 2023-11-28 Microsoft Technology Licensing, Llc Using compiler optimization to enable automatic generation of combinational circuits from high-level programs
EP4250169A1 (en) * 2022-03-25 2023-09-27 Tata Consultancy Services Limited Method and system for non-intrusive profiling of high-level synthesis (hls) based applications

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06325124A (ja) 1993-05-13 1994-11-25 Matsushita Electric Ind Co Ltd 論理回路生成装置
JP3763700B2 (ja) 1998-06-04 2006-04-05 シャープ株式会社 高位合成装置
US7120879B2 (en) * 2001-04-20 2006-10-10 Peter Pius Gutberlet Hierarchical presentation techniques for a design tool
JP4158458B2 (ja) * 2002-08-28 2008-10-01 ソニー株式会社 情報処理装置、その情報処理方法
JP3811133B2 (ja) 2003-03-03 2006-08-16 三菱電機株式会社 半導体集積回路設計方法および設計支援装置
JP2005258917A (ja) * 2004-03-12 2005-09-22 Ip Flex Kk 集積回路の設計支援システムおよび設計支援プログラム
JP2007287044A (ja) * 2006-04-19 2007-11-01 Toshiba Corp 設計支援装置
JP2010165334A (ja) 2008-12-16 2010-07-29 Ricoh Co Ltd 高位合成装置、方法及びプログラム
JP5644344B2 (ja) * 2010-10-05 2014-12-24 富士通セミコンダクター株式会社 設計データ生成装置、設計データ生成方法及びプログラム
US8806410B2 (en) * 2011-10-28 2014-08-12 The Board Of Trustees Of The University Of Illinois Power balanced pipelines

Also Published As

Publication number Publication date
JP2013152620A (ja) 2013-08-08
US20130191799A1 (en) 2013-07-25
US8601413B2 (en) 2013-12-03

Similar Documents

Publication Publication Date Title
JP5910108B2 (ja) 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法
Meeus et al. An overview of today’s high-level synthesis tools
US9501269B2 (en) Automatic source code generation for accelerated function calls
US9652570B1 (en) Automatic implementation of a customized system-on-chip
Mattarei et al. Cosa: Integrated verification for agile hardware design
Choi et al. HLS-based optimization and design space exploration for applications with variable loop bounds
US20130091482A1 (en) Method and apparatus for design space exploration acceleration
JP2006285333A (ja) 動作合成装置及び方法
Brandt et al. Integrating system descriptions by clocked guarded actions
US20060015858A1 (en) System development method and data processing system
Vanderperren et al. Extending UML for electronic systems design: A code generation perspective
Kamppi et al. Kactus2: Environment for embedded product development using ip-xact and mcapi
EP2676210B1 (en) Mixed-language simulation
Tatsuoka et al. Physically aware high level synthesis design flow
US20210096830A1 (en) Incremental code generation method
JPWO2004036463A1 (ja) コンパイラ及び論理回路の設計方法
JP5830955B2 (ja) 検証装置、検証方法及び検証プログラム
US20080109777A1 (en) Hardware verification programming description generation apparatus, high-level synthesis apparatus, hardware verification programming description generation method, hardware verification program generation method, control program and computer-readable recording medium
US9098661B1 (en) Extensible platform for back-annotation of target-specific characterization onto a model of a hardware system
US9223910B1 (en) Performance and memory efficient modeling of HDL ports for simulation
WO2022198447A1 (zh) 一种数字电路的综合方法及综合装置
JP2018041301A (ja) Rtl最適化システム及びrtl最適化プログラム
JP5577619B2 (ja) 論理回路設計装置
CN101923466B (zh) 装饰器模式的指令的存取方法
JP2006190085A (ja) デジタル回路のモデリング方法及び設計方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140929

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20150610

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151022

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151110

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160108

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160301

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160314

R150 Certificate of patent or registration of utility model

Ref document number: 5910108

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees