JP2003223473A - 集積回路の設計方法及びそれによって設計された集積回路 - Google Patents

集積回路の設計方法及びそれによって設計された集積回路

Info

Publication number
JP2003223473A
JP2003223473A JP2002324539A JP2002324539A JP2003223473A JP 2003223473 A JP2003223473 A JP 2003223473A JP 2002324539 A JP2002324539 A JP 2002324539A JP 2002324539 A JP2002324539 A JP 2002324539A JP 2003223473 A JP2003223473 A JP 2003223473A
Authority
JP
Japan
Prior art keywords
compiler
optimizer
integrated circuit
hardware
code
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.)
Pending
Application number
JP2002324539A
Other languages
English (en)
Inventor
Andrew Kay
ケイ アンドリュー
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.)
Sharp Corp
Original Assignee
Sharp 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 Sharp Corp filed Critical Sharp Corp
Publication of JP2003223473A publication Critical patent/JP2003223473A/ja
Pending legal-status Critical Current

Links

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)
  • Devices For Executing Special Programs (AREA)
  • Semiconductor Integrated Circuits (AREA)

Abstract

(57)【要約】 【課題】 高レベル言語で記述されたソフトウェアレベ
ルからハードウェアレベルへの変換時間を短縮し、ハー
ドウェア開発の効率を向上させる集積回路の設計方法を
提供する。 【解決手段】 並列処理及び同期通信をサポートするプ
ログラミング言語でその機能を定義することによって、
集積回路が設計される。得られたソースコード(1)
が、コンパイラに与えられる。コンパイラは、集積回路
の外部通信の順番を変えずに同期通信のタイミングを変
える最適化器モジュール(8)を含む。コンパイラは、
集積回路の回路構成を表す出力コード(12)を生成す
る。出力コード(12)は、統合ツール、及び集積回路
の製造における後工程にも提供され得る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、集積回路の設計方
法に関する。本発明はまた、そのような方法によって設
計された集積回路に関する。
【0002】
【従来の技術】大規模集積(LSI)回路のデザイン
は、例えばAND、OR、NOT、FLIP−FLOP
等の2進機能を実行するゲートの集合体と、それらのゲ
ートの相互接続に関する仕様と、を含む。その後に、デ
ザインを適切な技術での製造に適した形式に変換するた
めに、レイアウトツールが使用され得る。
【0003】このようなデザインを作成する公知の技術
では、「概略的な獲得(schematiccapture)」の名で知
られる方法が用いられる。この技術によれば、ユーザ
は、グラフィックソフトウェアツールを用いて、ライブ
ラリから得た各論理ゲート或いはゲートの集合体を配置
し、コンピュータのマウスを用いて配線を「描く」こと
によってこれらのゲートを相互接続することができる。
その後に、例えばゲートを除去或いは単純化することに
よって、回路の全体機能を変えずに得られた回路を最適
化し、これをレイアウト及び製造工程に出すことができ
る。しかし、設計者は、全て或いは殆ど全てのゲート或
いはゲートの集合体についてのタイミング及び論理を考
慮しなければならない。従って、この技術は、大規模な
設計に使用することが難しく、またエラーを生じ易い。
【0004】別の公知の技術では、設計者が、LSI回
路の記述をハードウェア記述言語(HDL)で書く。H
DLの各ステートメントは最終デザインにおける数個の
ゲートに対応するので、最終デザインにおける論理の複
雑さに比べれば入力ソースコードは比較的に短い。従っ
て、設計者の生産性が向上する。公知のHDLには、IE
EE Standard VHDL Language ReferenceManual, IEEE St
d 1076-1993, IEEE,New York, 1993に開示されるVHD
L、及びD.E. Thomasand P.R. MoorbyによりTheVerilog
Hardware Description Language, Kluwer Academic 19
95に開示されるVerilogがある。このような言語
をS. CarlsonによりIntroductionto HDL-Based Design
Using VHDL, SynopsysInc., CA, 1991(文献1)に開示
されるような適切な統合ツールとともに用いることによ
り、デザインを回路構成に変換する。
【0005】このようなHDLを用いた統合技術を利用
して新たなLSI回路を設計する際には、その回路の挙
動についてのアルゴリズムが、ソフトウェア技術者によ
って、C言語として知られるような適切な高レベル言語
でキャプチャされる。その後に、例えばC言語で書かれ
た「テストハーネス」を用いて、アルゴリズムの挙動が
正しいかどうかを調べるテストを行う。テストハーネス
は、回路シミュレータ或いはエミュレータを用いて、そ
の回路設計がテストされ得る環境を記述する。ディスク
或いはランダムアクセスメモリ(RAM)に格納された
回路に対しては、ベクトルとして知られている入力セッ
トを利用したテストをコンパイルして且つ実行するため
に、標準的なコンパイラを有するワークステーションが
用いられる。
【0006】次のステップでは、文献1に開示されるV
HDLレジスタ転送レベル(RTL)のような、ハード
ウェアの統合及びシミュレーションにより適した言語
に、ハードウェア技術者がCコードを書き換える。この
時点では、どの種のアーキテクチャを用いるか、データ
をパイプライン化するかどうか、外部に対する回路イン
ターフェースをどのようにするか、及び各ストラクチャ
に何ビット分の格納場所をアロケートするのか等、多数
の設計上の選択肢が存在する。典型的には、VHDLバ
ージョンは、オリジナルのCバージョンに比べて、大き
さが1桁大きくなる。
【0007】CバージョンとHDLバージョンとの間に
直接的な結び付きがないので、HDLの記述にエラーが
生じることがあり、そのために、この段階でテストを行
うことが必要不可欠である場合が多い。デザインがテス
トされ得る前には、例えばVHDLなどで新しいテスト
ハーネスを書かなければならない。このハーネスもま
た、C言語で書かれたハーネスに比べて1桁大きくなる
場合が多い。VHDLバージョンを綿密にテストした後
には、上記のような適切な統合ツールを用いて、回路に
変換することができる。しかし、回路に統合され得るV
HDL構成のセットは、VHDL言語全体のサイズと比
べて比較的に小さい。また、タイミング及びアーキテク
チャに関する決定の殆どは、ユーザによって明示的に注
釈されなければならず、従って、ユーザは個々の言語構
成がどのように統合されるかに関してかなり詳細な知識
を持っていなければならない。この知識は、異なる統合
ツール間では異なる。
【0008】この時点で、統合された回路が、所望のデ
ザインに対して遅過ぎたり大き過ぎたりすることを発見
することができる。そのような場合、HDLを調節して
デザインを指定の範囲内に戻すことができる場合もある
が、それができない場合には、C言語で書かれた新たな
アルゴリズムを試作する必要があり、設計時間が長くか
かってしまう。
【0009】例えばD.Gajski, N. Dutt, A. Wu and S.
LinによってHigh-Level Synthesis,Introduction to Ch
ip and System Design,Klewer, 1992(文献2)に開示
されているような高レベルハードウェア設計言語を提供
するために、HDLの抽象化レベルの向上が図られてい
る。その一例に、Synopsys On-Line documentation 3.2
b (CDROM format), Synopsys Inc., CA, 1995に開示さ
れているシノプシス・ビヘイビア・コンパイラがある。
このコンパイラは、「挙動性(behavoural)」VHDLで
書かれたソースコードを受け取り、比較的低レベルな統
合可能VHDLの出力を生成する。この入力言語は、標
準的な統合可能サブセットよりも広いフルVHDL言語
のサブセットから派生する。コンパイラは、そのデザイ
ンのアーキテクチャを選択し、マイクロプロセッサコア
としてそれをモデリングし、回路全体の速度要件に見合
う十分なハードウェアが利用可能であるようにする。こ
のコンパイラは最適化を提供し、文献2に開示されるよ
うなスケジューリング及びアロケーション方式アルゴリ
ズムによって速度と面積とのトレードオフを行う。
【0010】しかし、依然としてユーザは、クロック端
がどこで生じるのかを注釈することによってタイミング
情報を提供し、且つ、どのクロックサイクルで入力及び
出力データが利用可能でなければならないのかを知って
いる必要がある。このような理由から、このシステムを
使用しようとする設計者には、ハードウェアに関する相
当な知識が要求される。また、得られるハードウェア記
述は、オリジナルの挙動性VHDL記述とは挙動が異な
るので、2つの異なるテストハーネスが必要となり得
る。さらに、このシステムは、そのタイミング要件への
依存性のために、アルゴリズムの試作には適さない。な
ぜなら、これらは、現在はクロックサイクルレベルであ
り、サブクロックレベルではないからである。
【0011】他の公知のコンパイラとしては、I. Page
and W. LuckによりCompiling Occaminto FPGAs, 271-28
3, Abingdon EE & CSbooks, 1991に開示されているよう
なHandelコンパイラ及びHandel−Cコンパ
イラがある。Handelコンパイラは、例えばInmos,
The Occam 2 Programming Manual, Prentice-HallInte
rnational, 1988に開示されるような、Occamの名
で知られる言語で書かれたソースコードを受け取る。O
ccamはCに似た言語であるが、並列処理及び名前付
きチャネルを介した同期2点間通信を表現するための余
分な構成を有する。Handel−Cコンパイラも殆ど
同じであるが、ソース言語が若干異なっており、C言語
に慣れたプログラマにとってより馴染み易いものとなっ
ている。
【0012】コンパイラが並列構成を提供するので、プ
ログラマは、設計上の問題に対する可能な解決策とし
て、並列アルゴリズムを考えることができる。プログラ
マがどのサイクルで開始しようともメッセージが全く失
われないことを確実にするために、周知のタイプの単純
な「ハンドシェーク」技術によって同期通信が行われ
る。従って、送信側及び受信側の両者は、通信が完了す
るのを待ってからでなければ、続行することができな
い。言語によってこの制約が課せられるので、プログラ
マが通信イベントを再スケジューリングする際の自由度
が増す。例えば、プログラマが、c1及びc2と名付け
られたチャネルを介してそれぞれ10及び23という値
の送信を要求する場合、受信プロセスが適切に書かれて
いるとすれば、上記データは、どの順番でも、並列にも
送信され得て、或いは、sendコマンドの前とsen
dコマンドの間とに任意の遅延を伴っても送信され得
る。このための疑似コードの一例は、
【0013】
【数1】
【0014】のようになる。
【0015】ハンドシェークプロトコルは、(どのよう
な形態で実施されていても)受信側が準備状態にあると
きにデータアイテムが必ず受信され且つ全く失われない
ことを確実にする。このようにして、コンパイルされた
回路の2つの部分が正確にいつ相互作用するかに関し
て、幾分の自由度がある。
【0016】しかし、Handelの場合は、(通信以
外の)各構成のタイミングの総合的な制御は、プログラ
マが行う。各構成には、正確なサイクル数が割当てられ
ている(これを、タイムドセマンティクスと呼ぶ)。従
って、プログラマは、デザインにおける全ての低レベル
並列処理を考慮しなければならず、且つ、コンパイラが
各構成をどのようにクロックサイクルに割当てるのかを
知っていなければならない。例えば、プログラマは、
【0017】
【数2】
【0018】を指定することができる。しかし、全ての
アサインメントに1サイクルしか要しないので、両方の
乗算1サイクルで行われる必要がある。これは、2つの
乗算器が形成されなければならないことを意味し、面積
が大きくなる。また、これらの乗算器が単一のサイクル
で動作しなければならないので、クロック速度が遅くな
る。
【0019】さらに、主としてタイムドセマンティクス
のために、Handelが対応できない重要な構成がい
くつかある。そのような構成には、あるアレイ(RA
M)を2回参照するアサインメント(なぜなら、これは
高価なデュアルポートRAMを示唆する)、ファンクシ
ョンコールを含む表現、ならびにパラメータ付き関数が
含まれる。
【0020】
【発明が解決しようとする課題】タイムドソース言語セ
マンティクスを用いる公知の言語は、オリジナルのソー
スコードにおける暗示的なタイミングに従ってしまう。
従って、コンパイラがプログラムの実行に要するサイク
ル数を変えるような最適化を行うことができないことが
あって、オリジナルソースコードにおけるタイミング挙
動をエンコードするのがユーザの責任になる。従って、
タイムドセマンティクスを利用する場合には、設計者自
身が最適化を行わなければならず、コンパイラがそれを
助けることはできないので、設計時間の点で問題があ
る。
【0021】本発明は、上記課題を克服するためになさ
れたものであって、その目的は、(1)高レベル言語で
記述されたソフトウェアレベルからハードウェアレベル
への変換時間を短縮し、ハードウェア開発の効率を向上
させる集積回路の設計方法を提供すること、及び(2)
そのような設計方法に従って設計された集積回路を提供
すること、である。
【0022】
【課題を解決するための手段】本発明の第1の局面によ
れば、集積回路の機能を並列処理及び同期通信をサポー
トするプログラミング言語で定義するステップと、該集
積回路の外部通信の順番を変えずに同期通信のタイミン
グを変えるように構成されたコンパイラを適用して、該
集積回路の回路構成を表す出力コードを生成するステッ
プと、を包含する集積回路の設計方法が提供され、その
ことによって上記目的が達成される。
【0023】前記同期通信は、ハンドシェークを含み得
る。
【0024】前記コンパイラは、抽象構文木及び記号テ
ーブルを形成するように構成され得る。前記コンパイラ
は、前記抽象構文木を単純化するソフトウェア最適化器
を含み得る。前記ソフトウェア最適化器は、各コンポー
ネント部分に変数が1つ存在するように複合データ構造
をコンポーネント部分に変換するように構成され得る。
前記ソフトウェア最適化器は、未使用変数を除去するよ
うに構成され得る。前記ソフトウェア最適化器は、ルー
プ外の共通演算子を移動させるように構成され得る。
【0025】前記コンパイラは、前記出力コードによっ
て表記されるハードウェアインプリメンテーションを最
適化するハードウェア最適化器を含み得る。前記ハード
ウェア最適化器は、スケジューリング及びアロケーショ
ンを行うように構成され得る。
【0026】前記コンパイラは、少なくとも1つの所定
の性能パラメータが達成されたときに最適化を終了する
ように構成され得る。前記少なくとも1つの所定の性能
パラメータは、集積回路の最大面積を含み得る。前記少
なくとも1つの所定の性能パラメータは、集積回路の最
小処理速度を含み得る。前記少なくとも1つの所定の性
能パラメータは、最大消費パワーを含み得る。
【0027】該方法は、前記出力コードで定義される構
成を実行する回路構成を表すレジスタ転送レベルコード
を生成するステップをさらに含み得る。
【0028】本発明の第2の局面によれば、本発明の第
1の局面による方法によって設計された集積回路が提供
され、そのことによって上記目的が達成される。
【0029】以下に、本発明の作用を説明する。
【0030】ハンドシェーク等の通信プロトコルを高レ
ベルの最適化と共に使用すれば、コンパイラは効率的な
インプリメンテーションをもたらし得るので、通信を抽
象的に表現する際のより高い自由度が設計者にもたらさ
れる。入力言語は、高レベルで且つプログラマに馴染み
易いものであり得るとともに、ハードウェアにおいて認
識可能な表記を有する重要な構成の殆どをサポートし得
る。言語は、並列処理及び2点間通信を表現し得るが、
タイムドセマンティクスを持たない。コンパイラは、例
えばソースコードレベルに近い比較的高レベルで最適化
を行うことができるとともに、HDLを出力することが
できる。従って、低レベルの統合、最適化及びハードウ
ェアマッピングは、業界標準ツールを用いて行うことが
できる。並列構成及び2点間通信を伴うC言語に類似し
たソフトウェア言語を用いたデザインの機能は、効率的
なLSI設計のために自動的に或いは半自動的にHDL
に変換される。アンタイムドソース言語セマンティクス
を使用すれば、コンパイラによって、オリジナルソース
言語の仕様に従いながらデザインのタイミングを向上さ
せる最適化を行うことが可能になる。
【0031】
【発明の実施の形態】以下に、添付の図面を参照しなが
ら本発明の実施例を説明する。
【0032】図1に示されるコンパイラは、「並列C言
語」の名で知られる高レベル言語で書かれたソースコー
ド1を受け取る。この言語は、構成とハンドシェーク2
点間通信プリミティブとを含み、例えば最終デザインの
コスト及び性能に関するユーザ指定性能制約(参照符号
2で図示)を指定する。コンパイラは、モジュール3を
有する。モジュール3は、入力ソースコードの構文解析
及びチェックを行うことにより、中間抽象構文木(AS
T)表記4及び記号テーブル5を作成する。記号テーブ
ル5は、ソースコードによって宣言された名前及びオブ
ジェクトを記録するものである。A.V. Aho and J.D. Ul
lmanによりPrinciples of Compiler Design,Addison-We
sley, 1977(文献3)第197〜244頁に、これに適
したレクサ及びパーサが開示されている。中間構文は、
シーケンシャル、並列、及びループ構造のための表記を
有し、また、演算のスケジューリング及びアロケーショ
ンを表すために用いられる特定の注釈を有する。
【0033】ASTは、単純化器モジュール6に与えら
れる。単純化器モジュール6は、全ての不体裁な構成
を、よりシンプルな構成に書き直す。特に、後のステー
ジをより単純にコード化できるように、単純化器モジュ
ール6からの出力はフル抽象構文のサブセットだけが使
用されている。例えば、単純化器モジュール6は、複合
データ構造を、各コンポーネントに変数が1つであるコ
ンポーネント部分に分解する。
【0034】単純化されたAST7は、最適化器モジュ
ール8に与えられる。最適化器モジュール8は、ソフト
ウェア最適化器モジュール9とその次にあるハードウェ
ア最適化器モジュール10とを含んでいる。ソフトウェ
ア最適化器モジュール9は、例えば文献3の第406〜
517頁に開示されるような、不使用変数の除去及びル
ープ外の共通処理の移動のようなソフトウェア最適化技
術を用いて、単純化されたAST7を最適化する。ハン
ドシェークのようなプロトコルを用いて通信を行うの
で、転送中にデータが失われることがない。従って、デ
ザインにおける最終タイミングに影響を及ぼし得るが、
そのような通信の時間的順序は変えないように、単純化
されたAST内で通信の移動を行うことができる。並列
処理を許容する言語でソースコード1が書かれているた
め、ソフトウェア最適化器モジュール9は、性能制約2
を満たすように計算をパイプライン化する等の手段を導
入することができる。
【0035】全ての最適化が設計の向上に貢献するよう
に、推定関数が用いられる。推定関数を用いて、ゲート
数、回路面積、回路速度、待ち時間、スループット、消
費パワー、リソース要件などを推定することができる。
ソフトウェア最適化が完了すると、ハードウェア最適化
器モジュール10は、ハードウェアターゲットに固有の
最適化を行う。文献2の第137〜296頁に、適切な
ハードウェア最適化器が開示されている。回路面積及び
ゲート数はハードウェアの作成における重要な考慮点で
あるので、上記の最適化は、可能な限りハードウェアが
再利用され得るように、タイミングを考慮して設計され
る。このプロセスには、パイプライン化、スケジューリ
ング、及びアロケーションの技術が含まれ、各最適化に
対して再び推定関数を行うことにより、確実に改善がな
されているようにする。モジュール10による最適化の
結果によって、各変数及び演算子の最適なハードウェア
表記についての追加情報が、記号テーブル5に追加され
る。例えば、初期化された後に書込みが全く行われない
アレイは、読出し/書込みアレイに必要なRAMよりも
安価なリードオンリーメモリ(ROM)によって表すこ
とができる。
【0036】デザインが、ユーザによって指定された性
能及びコスト制約2を満たしていることが推定関数によ
って示されたとき、モジュール9及び10による最適化
が終了し得る。これらの制約を満たすことが不可能な場
合、ユーザにメッセージが与えられ得る。さらに、特定
の最適化を選択する、或いは、最適化のパラメータを与
えることによって、最適化器モジュール8に命令を与え
るためのユーザインタラクションがさらに設けられても
良い。この最適化は、適切な環境下におけるデザインの
機能性には影響を与えないが、これによって、異なる性
能或いはコストを達成し得る。
【0037】最適化されたAST及び改変された記号テ
ーブルは、HDL生成器モジュール11に与えられる。
HDL生成器モジュール11は、ASTを詳細に検討
し、そして、記号テーブル5に集められた情報を用いて
各構成についてのハードウェア表記を作成する。このよ
うにして、生成器モジュール11は、VHDLRTL等
の適切な言語で書かれたハードウェア表記12を提供す
る。その後、業界標準ツールを用いて、RTLをLSI
回路に変換することができる。
【0038】モジュール8が行い得る最適化の種類の3
つの例を、以下に説明する。 (例1)この例は、ソフトウェア式の最適化によってア
ルゴリズム性能を向上させる1つの方法を示す。
【0039】
【数3】
【0040】というコードを考える。この例に適用可能
な最適化がいくつかある。まず、a*aはループの反復
の度に計算されるが、aの値はループ内で変わらないの
で、答は常に同じである。ループ開始前に行う1回の計
算と1回の一時的変数の代入とによって、これを置換し
得る。これは、ハードウェア上では、ループの実行中に
乗算器を開放して他の場所での乗算器の使用を可能にす
るとともに、乗算器が2サイクル以上のサイクルを要求
する場合にはループ待ち時間を短縮する可能性もある。
これが可能であるのは、sendコマンドがタイミング
に依存しないからであり、
【0041】
【数4】
【0042】のようになる。
【0043】2番目の最適化は、a=3及びtmp=9
とすることである。従って、このプログラムは、
【0044】
【数5】
【0045】のように書くことができる。
【0046】次に、aは一度も読み出されないので、
【0047】
【数6】
【0048】のように、aを取ってしまうことが可能で
ある。 (例2)ハードウェア式の最適化の例として、
【0049】
【数7】
【0050】というアサインメントを考える。
【0051】先に述べたように、公知のコンパイラにお
けるタイムドセマンティクスでは、やはり、ソース言語
で書かれたこのステートメントは、実行時には、1クロ
ックサイクルで実行されなければならない。これは、2
つのフラッシュ乗算器及び1つの加算器を設ける他に
は、あまり選択の余地がない。結果的に、2つの乗算器
のために面積が大きくなり、サイクル時間が遅くなる
(フラッシュ乗算器は、典型的に、入力の幅に依存して
大きな組合せ遅延を有する)。
【0052】しかし、図1のコンパイラには、上記のよ
うな制限が全くない。上記の乗算は、
【0053】
【数8】
【0054】と示すようにシーケンシャル化することが
できる。
【0055】次に、
【0056】
【数9】
【0057】に示すように、上記乗算を共有乗算関数に
代入することが可能である。
【0058】乗算器は、その時の処理の種類に合わせる
ことができる(高速ではあるが大型なパラレル乗算、ま
たは、数サイクルを必要とはするが非常に小型で且つク
ロック速度の速いシーケンシャル乗算)。いずれの場合
も、乗算器は1つで十分である。実際の選択は、自動的
になされても、或いは、コンピュータのガイダンスによ
ってユーザが行ってもよい。 (例3)この例では、最終的なデザインの効率を向上さ
せるために、どのようにアサインメントの再スケジュー
リングを行うかを示す。
【0059】
【数10】
【0060】というプログラム例を考える。
【0061】乗算器と加算器とが1つずつある場合、受
信側がaの値を受信する準備ができていれば、上記プロ
グラム全体を、
【0062】
【数11】
【0063】のように、2サイクルに圧縮できる。
【0064】公知のコンパイラでは、通信をこのように
再スケジューリングすることができないので、この最適
化を行うことはできない。例えば、タイムドセマンティ
クスを有するコンパイラでは、ソース言語のタイミング
を変えることはできず、一方、挙動性コンパイラ(Behav
ioral Compiler)のようなコンパイラでは、通信によっ
て課せられる境界を越えて最適化を行うことはできな
い。
【0065】あるデザインのソースコード1は、C言語
のサブセットにいくつかの追加を含む並列C言語で書か
れている。追加分は、以下の通りである。 (a)並列処理のための構成:par par構成は、プログラム内のどこにでも使用すること
ができ、これにより、システムレベルから単一ステート
メントレベルまでのあらゆる細分性の並列処理が導入さ
れ得る。この構文は、
【0066】
【数12】
【0067】に示すように、通常のCステートメント構
文を拡張する。
【0068】例えば、
【0069】
【数13】
【0070】のようにして、2つのファンクションコー
ルを並列に実行する。 (b)所与のタイプの同期チャネル これらのチャネルにより、1つのparにおけるブラン
チ間での通信、及び、(C言語の通常の外部キーワード
とともに用いられる場合に)同期回路とその周辺との間
での通信が可能になる。内部チャネルは、
【0071】
【数14】
【0072】に示す宣言の構文の拡張を用いて宣言され
る。
【0073】例えば、
【0074】
【数15】
【0075】のようにすれば、構造成タイプcommの
データを用いて通信する2つの内部チャネルa及びbが
宣言される。
【0076】チャネルは単方向性であるので、周辺との
通信を行うには、そのプロセスが、任意の共有チャネル
の送信端或いは受信端のいずれを有しているのかが分か
っている必要がある。これは、キーワードchanin
及びchanoutによって区別されるので、全ての外
部チャネル宣言において、これらのキーワードを使用し
なければならない。
【0077】
【数16】
【0078】例えば、
【0079】
【数17】
【0080】のようにして、16ビットの整数で周辺と
通信するチャネルfrom_env及びto_envを
宣言する。 (c)プリミティブsend(chan、val)及び
receive(chan) send(chan、val)は、チャネルchanを
介して値valを送信する。receive(cha
n)は、チャネルchanを介して値を受信するもので
あり、表現を作成する際に使用できる。各チャネルは2
点間方式でデータの通信を行い、通信を行っている2つ
の処理はそれぞれ、通信が完了するのを待ってからでな
ければ続行できない。さらに、チャネルchanを介し
て送信されるのを待っているデータが存在するときに真
となる関数ready(chan)がある。
【0081】
【数18】
【0082】次の例は一対のプロセスを示し、一方のプ
ロセスは、整数を生成してそれを他方のプロセスに(チ
ャネルchを用いて)送信し、この他方のプロセスは、
受信した整数を加算する。
【0083】
【数19】
【0084】(d)所与のビット幅の整数型のセット これは、どのような数値精度が要求された場合でも、効
率的な回路が形成できるようにするためのものである。
このために、#eが含まれるように、型修飾子のセット
が拡張される。ここで、eは、eの値に等しい幅を示す
定数表現である。
【0085】
【数20】
【0086】例えば、
【0087】
【数21】
【0088】のようにして、「符号無し7ビット整数」
型のcと呼ばれるチャネルを宣言する。 (e)ビット操作を行う効率的な回路を構築するための
ビット選択及びビット連結演算子 記号@は、連結を表す。「grab」演算子(<−と書
く)は、表現e、及び定数ビット位置b1...bnのリ
ストを要する。この演算子が評価されると、eb1...
bnのnビットの結果が返される。但し、eiは、eの
i番目のビットである。
【0089】
【数22】
【0090】例えば、3ビット2進数では510=101
2であり、710=1112である。従って、6ビット2進
数では、510@710=1011112=4710である。
471 0から上位4ビットを選択すると、表現4710<−
{5,4,3,2}は、値10112=1110を生成す
る。
【0091】入力言語の標準C部分は、if、whil
e、switch、blocks、functions
等の全ての制御特徴、ならびに、ポインタを除く演算及
びデータ操作の殆ど全てを有する。しかし、アレイのイ
ンデックスを用いてポインタを真似ることは可能であ
る。回路の外部のRAM或いはROMコンポーネントで
あると仮定される「外部アレイ」を除いて、アレイは、
統合回路内の専用ロジックとして実現される。
【0092】上記言語におけるC言語部分のセマンティ
クスは、C言語のセマンティクス(つまり、expre
ssions、assignment、if、whil
e、for、break等)と類似している。par及
びチャネル通信のセマンティクスは、上記INMOSの
文献に開示されるOccamのセマンティクス、及び、
C.A.R.HoareによってCommunicationSequential Process
es, InternationalSeries in Computer Science, Prent
ice-Hall,1985に開示されるCSPのセマンティクスと
類似している。Occamの用法ルールに類似する用法
ルールがある。2つの異なる並列コンポーネントから同
一の変数がアクセスされる場合、そのアクセスが全てリ
ードオンリーでない限り、挙動は不確定である。
【0093】先に説明したように、ソースコードがファ
イルに入力された後、図1の3においてコンパイラはコ
ンパイルを開始し、標準的な構文解析技術を用いてソー
スコードを構文解析して、デザインの構造やサブ構造な
どを記録する抽象構文木4とするとともに、使用される
全ての識別子のタイプ及び名前を記録する記号テーブル
を作成する。処理が進むと、記号テーブルは、各識別子
についての情報を照合することによって様々な変換ステ
ージを互いに関連付ける。
【0094】次の工程は、図1の6において抽象構文木
を単純化することである。これを行うのは、生成器11
によって、プログラミング特徴の全てをハードウェアに
変換することはできないからである。単純化器モジュー
ル6は、それらのサポートされない構成を除去して、H
DL生成器モジュール11によってサポートされる等価
な構成に置き換える。例えば、生成器モジュールは、標
準的なC言語におけるa=(b++)+5のように、ア
サインメントが副次的効果を有することを許可しない。
単純化された等価物は、a=b+5;b=b+1のよう
になり得る。さらに、単純化器モジュール6は、全ての
演算子及び定数の幅と型とを計算し、この情報を構文木
に格納する。
【0095】send(ch、R)は、ch:=Rのよ
うなアサインメントに単純化される。この表記は、記号
テーブルにおけるchの型によって、それが本当はチャ
ネル送信であることを「知る」。しかし、この表記法の
統一性(どのプロトコルが要求される場合でも、デステ
ィネーションは常にアサインメントの左側に書かれる)
のために、後のトランスフォーメーションが殆ど例外無
く記述される。同様に、x:=receive(ch)
は、x:=chというアサインメントに単純化される。
【0096】この時点で、デザインは、単純化された抽
象構文7及び記号テーブル5の組合せで表現される。H
DL生成器が処理できない全ての構成を取り去り、最適
化を行う必要がある。例えば、外部アレイ(RAM)へ
のアクセスは、逆の情報がない限り、シングルポートR
AMであると想定される。従って、mem[i]:=m
em[j]のような表現は、HDL生成器によって正し
く処理されない。なぜなら、HDL生成器は、そのメモ
リへの2つのアクセスを(ほぼ)同時に生成するからで
ある。この表現は、local t;t:=mem
[j];mem[i]:=t;のように書き換えられ
る。
【0097】標準的な最適化の1つの可能な方法は、ル
ープ内のある計算を反復する必要がない場合に、その計
算をループから取り去ってしまうことである。例えば、
【0098】
【数23】
【0099】は、
【0100】
【数24】
【0101】のように書き換えられる。
【0102】もう1つの可能な方法は、寿命時間が重な
らない複数の変数の間でレジスタを共有することであ
る。例えば、
【0103】
【数25】
【0104】は、
【0105】
【数26】
【0106】のように書き換えられる。
【0107】最適化器モジュール10が、ある特別な場
合にしか用いられない構造を見つけた場合、生成器モジ
ュール11がその情報を利用してより簡潔なコードを生
成できるように、最適化器モジュール10は、構文木
(或いは記号テーブル)にその情報を記録することがで
きる。例えば、あるアレイが定数によって初期化され、
その後に全く更新されない場合、より高価なRAMより
も安価なROMとして、そのアレイが実現され得る。
【0108】抽象構文における1つの重要な構成は、ア
サインメント同期化の形態である。これにより、数個の
アサインメントを同時に実行して、時間若しくは格納ス
ペース或いはそれら両方を節減することができる。例え
ば、localtmp;tmp:=a;a:=b;b:
=tmp;とする代わりに、これを最適化して、syn
ch{a:=b AND b:=a}とすることが可能で
ある。アサインメントは、レジスタ、チャネル、及びア
レイの値の全ての通信を処理する。この構造により、い
くつかの有用なアクションを短縮し、短縮しなかった場
合よりも時間を短くすることが可能になる。何が同期化
され得るかについては制限があり、その制限は、インプ
リメンテーションに依存する。
【0109】最適化器モジュール10は、さらに根本的
なことをすることが可能であり、例えば、シーケンシャ
ルコードをパラレルに動作させる、或いは、その逆を行
う、チャネルを除去して、より弱い形態の同期化に置き
換える、インラインに関数を拡張する、乗算を共有乗算
関数へのコールにすることにより乗算器を共有する、コ
ード或いは表現の重複部分を共有する、そして、得られ
る回路の外部挙動が変わらない場合に複雑な表現をパイ
プライン化することができる。無論、速度、面積及びサ
イクル数は変化し得るが、外部インターフェースは全て
ハンドシェークを有するので、通信の順序が守られる場
合は、このような変化は影響しない。
【0110】最適化は、自動的に適用されてもよいし、
ユーザ命令型もしくはユーザ選択型であってもよい。目
標は、特定の用途によって決まる指定の面積、パワー、
或いは時間の範囲を達成することである。これらの属性
は、抽象表記に適用される単純なメトリクスによって推
定され得る。
【0111】HDL生成器モジュール11は、洗練され
た抽象構文木を受け取り、これをHDLによる回路の記
述に変換する。この段階では、抽象構文に残された各構
成が、良好に特定されたハードウェアインプリメンテー
ションを有する。その一部を以下に説明する。全般的な
技術は、以下に示す重要な点において、公知の技術とは
異なっている。 (1) アサインメントが、より複雑なものであり得る
とともに、チャネル通信及びパラメータ化されたファン
クションコールを含み得る。そのためには、例えば乗算
器にその引数がいつ準備状態にあるかが知らされるよう
に、表現の部分間のより複雑なプロトコルが要求され
る。 (2) コンパイラが、ネットリストではなくHDLを
生成するので、幾分かの選択の余地がある。具体的に
は、設計チェーンにおけるより低い統合ツールまで、状
態マシン及びレジスタを実行する方法に、選択の余地が
ある。
【0112】基本的なスキームは、抽象構文内の制御ス
テートメントからの状態マシンとして、制御パスを統合
することである。殆どの状態において、何らかの計算が
行われる。状態マシンは、計算を初期化し、その計算が
完了するのを待ってから次のステージに進む。例えばI
Fの場合、次の状態の位置は、計算された値に依存す
る。1つの状態マシンが、その後に同時に実行される他
の1セットの状態マシンを起動し得るようにすることに
よって、並列処理が行われる。
【0113】それぞれの計算が完了するまでにかかり得
る時間は未知であるので、例えば、チャネル或いは外部
装置との送信或いは受信が行われる場合、データ依存型
の計算が行われる場合、或いは、ファンクションコール
が行われる場合には、その計算を実行する回路は、計算
の完了を信号で知らせるとともに、その値が使用される
の待ってからその値をディスアサートできなければなら
ない。これは、以下に述べる表現のプロトコルの複雑さ
を説明する。最適化工程によって抽象構文が十分に単純
化されるならば、より単純なプロトコルを用いることも
可能であるが、その場合、実行時間が長くなり得る。さ
らに、統合後のゲートレベルの何らかの最適化は、必要
とされないシグナリングの余分なレベルを除去する。
【0114】図2A〜図2Cは、制御パス用の基本的な
ビルディングブロックがどのように形成されるのかを示
す図である。ステージは、抽象構文木によって決まる形
状に従う。図2Aには、1プロセスを表す状態マシン1
5が示されている。大きい円16は制御ノードであり、
各制御ノードは、1つ或いは1セットのアクションに関
連し得る。最も単純なケースにおいて、これらの制御ノ
ードは、抽象構文言語内の基本プロセスに対応するアサ
インメント或いは通信である。状態マシン15は、その
アクションが完了してからでないと、次の状態に進むこ
とができない。
【0115】図2Bには、コンポーネント状態マシン1
7及び18のシーケンシャル構造として、シーケンシャ
ル構造が示されており、第1のマシンの終了状態19が
第2のマシンの開始状態と1つになっている。
【0116】図2Cには、並列構造が示されている。一
つのマスタープロセス20は特別なものであり、通常の
方法によって現在のシーケンシャル状態マシンに挿入さ
れる。他の全てのスレーブプロセス21は、マスタープ
ロセスが開始するのを待ってから開始する。
【0117】並列部分の終端では、マスタープロセス2
0は、全てのスレーブプロセス21が終了するのを待っ
てから、次に進む。その後、各スレーブプロセス21は
初期待機状態に戻って、次の起動に備える。実行中は、
マスタープロセス及びスレーブプロセスのステータスは
同じである。つまり、両者を区別するのは、その開始方
法だけである。
【0118】a及びbが幅8で宣言されたものとして、
【0119】
【数27】
【0120】という抽象構文のフラグメントを考える。
【0121】図3は、このプログラムのために生成され
得る可能な回路例を示す。図3の左側には、この例にお
ける抽象状態マシンが示されている。各アサインメント
につき1つ、合計2つの中間状態22があり、また、通
常の開始状態23及び終了状態24がある。図3の残り
の部分は、可能な回路を示す。フリップフロップ25、
26、29及び30は、グローバルクロック(不図示)
に接続され、立ち上がりエッジで起動する。
【0122】リセット付きD型フリップフロップ25及
び26は、「ワンホット」エンコードにおける状態マシ
ンを表す。これは、各フリップフロップが可能な状態の
1つを表していることを意味する。フリップフロップが
1を有するときには状態はアクティブであり、そうでな
いときには非アクティブである。プログラムの開始前に
フリップフロップ25及び26を0に設定するために、
リセットライン27が必要である。この他のエンコード
を用いて状態マシンを表すことも可能であるが、この例
が恐らく最も単純である。
【0123】開始パルス28は、1クロックサイクル毎
に1状態の割合で、チェーン上を移動する。これは、特
別な例である。なぜなら、各アサインメントは1サイク
ルしか要しないとが仮定されているからである。より複
雑な例の場合、関連アクションが完了するまでパルスを
待機させるために、何らかの回路機構を生成する必要が
ある。
【0124】第1の中間状態においては、変数aのため
のレジスタ29のイネーブルビットは真に設定されてお
り、これにより、次の立ち上がりクロックエッジにおい
て、8ビットの定数値1(2進数で00000001)
を格納することが可能になる。
【0125】第2の中間状態においては、変数bのレジ
スタ30のイネーブルビットは、シングルサイクル加算
器31のイネーブルビットと同様に真に設定されてい
る。従って、a及びbの以前の値は、次の立ち上がりク
ロックエッジが生じたときにbに格納される。
【0126】図4Aは、R表現32(即ち、その値がデ
ータとして要求されている表現)がどのようにインター
フェースされるかを示す。R表現の値が要求されると、
信号Rrequestがアサートされる。上記の値が要
求されなくなるまでの間、信号Rrequestを真に
保っておかなければならない。その後、この表現はある
値を計算し、その値を信号Rvalueとして出力する
とともに、その信号Rvalueが有効であることを示
すために信号Rreadyをアサートする。Rvalu
eが要求されなくなると、入力信号goが、1クロック
サイクルだけ真となり、そして信号Rrequestは
偽になる。信号Rrequestが次に真となるまで、
信号Rvalue及びRreadyはディスアサートさ
れる。無論、定数及び組合せ表現等の多くの単純な表現
の場合、本スキームにおける明らかな複雑さの大部分
は、統合中にゲートレベル最適化器によって容易に単純
化され得る。
【0127】図4Bにおいては、A+BについてのR表
現が、A及びBについてのR表現33及び34、加算器
35、及び組合せロジックから構成される。R表現は、
定数、単純変数、アレイのリファレンス、チャネル入
力、或いは外部メモリからの読出し、ならびに通常の演
算的、論理的及びビット的組合せであり得る。Rreq
uest及びgo信号は、両方のコンポーネント33及
び34に一斉送信され、そのRvalueは加算器35
に与えられる。この例において、加算器35は組合せ加
算器であると仮定されている。複合物のRreadyと
して、RreadyのブールANDをとる。この回路
は、加算器35を必要な関数に変えるだけで、あらゆる
組合せ表現を実行するのに十分なものとなる。実行する
処理が組合せではない場合、演算子自体が、適切な方法
によって2つのコンポーネントのRreadyを組み合
わせることによって、Rreadyを提供しなければな
らない。このような接続は、パワー削減のためにも利用
され得る。その場合、入力データが有効になるまで、加
算器35をオフにする。
【0128】オペランドと演算子入力との間に幾つかの
マルチプレクサを挿入し、演算子出力の上にデマルチプ
レクサを挿入するだけで、1つの加算器(或いは他の演
算子)を、いくつかの計算によって共有することが可能
になる。最適化器モジュール8がコンフリクトが全く無
いこと、例えば一度に2つの計算が同一の演算子を使用
しようとしていないことを、確かめる必要がある(これ
は、スケジューリング及びアロケーションと呼ばれ
る)。
【0129】図5A〜図5Cに、その他のR表現を示
す。図5Aは、コール・バイ・バリュー関数がどのよう
にコールされ得るのかを示す。実際のパラメータ(引
数)を連結することによって、1つの表現R38が与え
られる。この表現は、準備状態になると、プロセスを始
動する。このプロセスは、図4A及び図4Bのスレーブ
プロセスと同様に関数F39を実行する。Fが一度に2
回以上起動されないようにするためにFにとって必要な
調停は、図5Aには図示されておらず、この単純なロジ
ックは、Fの内部に設けられている。Fからの全ての戻
り値は、Rvalue信号を介して発信側に渡され、ま
た、Fが終了すると、Rreadyがアサートされる。
go信号は、F及びRに一斉送信される。
【0130】図5Bは、単純変数をどのように実施する
のかを示す。値自体はレジスタ(不図示)に格納されて
おり、そのレジスタからの出力は、Rvalue信号を
介して、その出力を要求する各R表現に対して利用可能
になっている。Rrequest及びgo信号は無視さ
れる。この値は常に利用可能であるので、Rready
はロジック1に固定されている。
【0131】図5Cは、チャネルがどのように読み出さ
れるのかを示す。チャネルのtxready信号が真で
あれば、その表現は準備状態である。ハンドシェークの
最終部は、go信号である。特定のチャネルから読出し
を行う全てのR表現からのgo信号のORをとることに
より、そのチャネルのrxready(受信準備完了)
信号を生成する。
【0132】図6A及び図6Bは、どのようにしてL表
現(値のデスティネーションを表す表現)を作成するの
かを示す。図6Aは、L表現42のための標準的なイン
ターフェースを示す。L表現は、単純変数、アレイのリ
ファレンス、チャネルの出力、外部メモリへの書込み、
或いはそれらの組合せであり得る。Rrequest信
号を用いて、L表現内のあらゆる埋込みR表現(通常
は、アレイのインデックス計算)を開始する。Lreq
uest信号は、真性L表現を開始し、また、Lval
ue信号に有効なデータが存在するときには真に設定さ
れる。格納処理の完了準備が整うと、LRready信
号が立ち上がる。最後に、表現の環境が準備状態になっ
たとき、1サイクルの間go信号を真にすることによっ
て、リソースの解放を示す。L表現の組合せの場合、2
クロックサイクルを要求できるのはL表現の中の1つだ
けであり、そして、このサブ表現が、処理全体のタイミ
ングを決定する。他の全てのサブ表現のLRready
は、常に真でなければならない。この条件が満たされな
い場合、プロトコルが失敗し得る。
【0133】図6Bにおいては、アサインメントがどの
ように構築されるのかを説明するために、インターフェ
ースが用いられている。
【0134】図7A〜図7Cは、いくつかの特定のL表
現がどのようにしてエンコードされるのかを示す。図7
Aは、単純変数(レジスタ)に対する書込みがどのよう
に行われるのかを示す。書込みデータを、3状態ドライ
バ44を介して、その変数用の書込みバスの上に流す。
3状態ドライバ44は、信号goが送信されるとイネー
ブルされる。これがうまく作動するように、書込みに要
するサイクル数を1とする。そのレジスタの書込みイネ
ーブル信号をとって、そのレジスタに書込みを行う全て
のL表現に対する全ての書込みイネーブル信号の論理O
Rにする。コンフリクトが全く生じ得ないようにするの
は、最適化ステージまでである。
【0135】図7Bは、外部メモリへの書込みがどのよ
うに行われるのかを示す。go信号が到達するまでの
間、書込み完了信号を真に保っておかなければならな
い。やはり、このメモリ装置に関係する全ての書込みイ
ネーブルのORがとられなければならない。
【0136】図7Cは、チャネル出力がどのように行わ
れるのかを示す。所与のチャネルに対するチャネル出力
の全てのL表現が集められる。そのチャネルのtxre
ady(発信準備完了)は、(このチャネルに言及する
各L表現に1つずつある)部分的txready信号の
全てのORである。個々のrxready信号は、チャ
ネルrxreadyに直接に接続される。
【0137】図8は、if b thenP elseQ
のインプリメンテーションを示す。R表現bからのre
ady信号は、マルチプレクサによって方向づけられ
る。このマルチプレクサは、bが返した値によって制御
される。これにより、状態マシンがPまたはQのどちら
を伴って継続するかが選択される。
【0138】図9は、while C(b) doPのイ
ンプリメンテーションを示す。状態マシンは、bの値に
よって、再びPを実行するか、或いは、Pを実行せずに
次に進むように指示される。
【0139】図10A及び図10Bは、リソースの作成
方法を示す。変数、アレイ、チャネル、或いは関数のそ
れぞれが、リソースである。HDL生成器モジュール1
1が構文木を詳細に検討した後の時点では、各リソース
は、1つ以上の様々なR表現及びL表現によってアクセ
スされている。各リソースについて、HDL生成器モジ
ュール11は、これらのR表現及びL表現の「バックエ
ンド」からの信号を用いて、リソースの正しい挙動を規
定する適切な回路を作成しなければならない。
【0140】図10Aは、書込みイネーブルを有するエ
ッジトリガレジスタ45として実施される、単純変数を
どのように形成するのかを示す。L表現からの(書き込
まれるべき値を持つ)データバスは結合され、書込みイ
ネーブル信号は一緒にORをとられる。出力(R表現)
は比較的簡単であり、必要とされるところにデータがコ
ピーされるだけである。
【0141】図10Bは、どのようにチャネルが形成さ
れるのかを示す。全てのL表現(チャネル出力)は、そ
れぞれデータバスを有する。それらのデータバスは結合
され、このチャネルの全てのR表現(チャネル入力)の
データバスにコピーされる。チャネルの読出し箇所はm
箇所あり、また、チャネルの書込み箇所がn箇所あると
仮定されている。図10Bの46において、書込み側の
txready信号のORをとり、これを読出し側に一
斉送信する。同様に、図10Bの47において、読出し
側のrxready信号のORをとり、これを書込み側
に一斉送信する。 (例)
【0142】
【数28】
【0143】というフラグメント例を考える。
【0144】これは、非常に不自然な例である。なぜな
ら、入力も出力もないからである。しかし、この例は、
短くて理解し易い。変数Xは、値0から始まる。その
後、変数Xをインクリメントして、これを左に1ビット
シフトし、その工程を変数Xが10未満でなくなるまで
反復する。その後に、プログラムを終了する。この時点
では、出力が多少整理されており、可読性が高められて
いる。
【0145】記号テーブルは、
【0146】
【数29】
【0147】というエントリを有する。
【0148】抽象構文は、
【0149】
【数30】
【0150】となる。
【0151】HDL生成器には「for」構成がなく、
副次的効果を持つアサインメントは、その副次的効果を
明示しなければならない。従って、上記の例は、
【0152】
【数31】
【0153】のように単純化される。
【0154】最適化器モジュールは、ループ内の2つの
アサインメントが組み合わされ得ることを発見する。
【0155】
【数32】
【0156】最終的に、HDL生成器モジュールは、統
合用のVHDLRTLで書かれた以下の出力を生成す
る。初めにエントリ宣言があり、これにより、周辺との
インターフェースが記述される。
【0157】
【数33】
【0158】第2に、アーキテクチャがあり、これによ
り、エントリの挙動が記述される。これは、3つの部
分、即ち、いくつかのローカル宣言と、制御パスのため
の状態マシンと、格納場所及びデータパスのためのレジ
スタ定義とに分かれる。
【0159】ローカル宣言
【0160】
【数34】
【0161】メイン(main)のアーキテクチャRTLを、
以上に示す。
【0162】制御パス状態マシンは、
【0163】
【数35】
【0164】のように示される。
【0165】格納場所及びデータパスは、
【0166】
【数36】
【0167】のように示される。
【0168】
【発明の効果】以上に説明したように、本発明によれ
ば、集積回路の設計にあたって、C言語に類似した言語
によって記述された集積回路の機能や仕様などに関する
ソフトウェアアルゴリズムが、高レベルの最適化を行う
適切なコンパイラの使用によって、自動的に或いは半自
動的に、ハードウェア記述言語(HDL)に変換(コン
パイル)される。ソフトウェアアルゴリズムを記述する
言語としては、並列処理や同期通信を記述できる高レベ
ル言語(例えば、並列C言語)を使用することができ
る。従って、本発明によれば、集積回路の設計にあたっ
て、高レベル言語で記述されたソフトウェアレベルから
ハードウェアレベルへの変換時間が短縮され、ハードウ
ェア開発の効率が向上する。
【図面の簡単な説明】
【図1】本発明のある実施形態の一部を構成するハード
ウェアコンパイラの構造を示す概略図である。
【図2A】図1のコンパイラによって制御パスがどのよ
うに統合されるのかを概略的に示す図であり、特に、開
始及び終了時間が1つである単一の処理を説明するため
の図である。
【図2B】図1のコンパイラによって制御パスがどのよ
うに統合されるのかを概略的に示す図であり、特に、2
つの処理をシーケンシャルに実行する方法を説明するた
めの図である。
【図2C】図1のコンパイラによって制御パスがどのよ
うに統合されるのかを概略的に示す図であり、特に、数
個の処理を同時に実行する方法を説明するための図であ
る。
【図3】簡単なプログラム例を実行するための可能な回
路例を示す図である。
【図4A】表現をどのようにエンコードするのかを説明
するための図であり、特に、単一のR表現の場合を説明
するための図である。
【図4B】表現をどのようにエンコードするのかを説明
するための図であり、特に、A及びBの表現から表現A
+Bをどのように作成するのかを説明するための図であ
る。
【図5A】コール・バイ・バリューファンクションコー
ルがどのように行われるのかを説明するための図であ
る。
【図5B】単純変数がどのように読み出されるのかを説
明するための図である。
【図5C】チャネルがどのように読み出されるのかを説
明するための図である。
【図6A】L表現がどのようにエンコードされるのかを
示す図であり、特に、単一のL表現インターフェースを
説明するための図である。
【図6B】L表現がどのようにエンコードされるのかを
示す図であり、特に、どのようにL表現とR表現を組み
合わせてアサインメントを生成するのかを説明するため
の図である。
【図7A】特定のL表現がどのようにエンコードされる
のかを示す図であり、特に、単純変数或いはレジスタへ
の書込みがどのように行われるのかを説明するための図
である。
【図7B】特定のL表現がどのようにエンコードされる
のかを示す図であり、特に、外部メモリへの書込みがど
のように行われるのかを説明するための図である。
【図7C】特定のL表現がどのようにエンコードされる
のかを示す図であり、特に、チャネル出力がどのように
行われるのかを説明するための図である。
【図8】条件ステートメントをどのように作成するのか
を説明するための図である。
【図9】ループステートメントをどのように作成するの
かを説明するための図である。
【図10A】どのようにリソースを作成するのかを説明
するための図であり、特に、単純変数をどのように作成
するのかを説明するための図である。
【図10B】どのようにリソースを作成するのかを説明
するための図であり、特に、チャネルをどのように作成
するのかを説明するための図である。
【符号の説明】
1 ソースコード 5 記号テーブル 6 単純化器モジュール 8 最適化器モジュール 9 ソフトウェア最適化器モジュール 10 ハードウェア最適化器モジュール 11 HDL生成器モジュール 12 ハードウェア表記(出力コード)

Claims (24)

    【特許請求の範囲】
  1. 【請求項1】 並列処理を許容する言語で集積回路の機
    能を記述したソースコードをハードウェア依存のコード
    に変換するコンパイラであって、 該集積回路内の通信の時間的順序を変えることなく該通
    信の再スケジューリングを行うことにより、該集積回路
    の性能またはコストを最適化する最適化器と、 該最適化器の出力に基づいて、該集積回路の回路構成を
    表す出力コードを生成する生成器とを備えた、コンパイ
    ラ。
  2. 【請求項2】 前記通信は、ハンドシェークのプロトコ
    ルを用いた同期通信である、請求項1に記載のコンパイ
    ラ。
  3. 【請求項3】 前記コンパイラは、前記ソースコードを
    解析することにより、抽象構文木と記号テーブルとを作
    成する解析器をさらに備えており、 前記最適化器は、該抽象構文木と該記号テーブルとを用
    いて最適化を行う、請求項1に記載のコンパイラ。
  4. 【請求項4】 前記コンパイラは、前記抽象構文木を単
    純化する単純化器をさらに備えている、請求項3に記載
    のコンパイラ。
  5. 【請求項5】 前記最適化器は、未使用変数を除去する
    ように構成されたソフトウェア最適化器を含む、請求項
    1に記載のコンパイラ。
  6. 【請求項6】 前記最適化器は、ループの反復の度に計
    算されるが答えが常に同じである演算を該ループの外に
    移動させるように構成されたソフトウェア最適化器を含
    む、請求項1に記載のコンパイラ。
  7. 【請求項7】 前記最適化器は、前記出力コードによっ
    て表記されるハードウェアインプリメンテーションを最
    適化するハードウェア最適化器を含む、請求項1に記載
    のコンパイラ。
  8. 【請求項8】 前記ハードウェア最適化器は、スケジュ
    ーリングおよびアロケーションを行うように構成されて
    いる、請求項7に記載のコンパイラ。
  9. 【請求項9】 前記最適化器は、少なくとも1つの所定
    の性能パラメータが所定の制約を満たしたときに最適化
    を終了するように構成されている、請求項1に記載のコ
    ンパイラ。
  10. 【請求項10】 前記少なくとも1つの所定の性能パラ
    メータは、集積回路の最大面積を含む、請求項9に記載
    のコンパイラ。
  11. 【請求項11】 前記少なくとも1つの所定の性能パラ
    メータは、集積回路の最小処理速度を含む、請求項9に
    記載のコンパイラ。
  12. 【請求項12】 前記少なくとも1つの所定の性能パラ
    メータは、集積回路の最大消費パワーを含む、請求項9
    に記載のコンパイラ。
  13. 【請求項13】 前記出力コードは、レジスタ転送レベ
    ル(RTL)のコードである、請求項1に記載のコンパ
    イラ。
  14. 【請求項14】 並列処理を許容する言語で集積回路の
    機能を記述したソースコードをハードウェア依存のコー
    ドに変換するコンパイラであって、 該ソースコードを解析することにより、抽象構文木と記
    号テーブルとを作成する解析器と、 該抽象構文木を単純化することにより、単純化された抽
    象構文木を作成する単純化器と、 該単純化された抽象構文木を最適化することにより最適
    化された抽象構文木を作成するとともに、該記号テーブ
    ルを改変することにより改変された記号テーブルを作成
    する最適化器と、 該最適化された抽象構文木と該改変された記号テーブル
    とを用いて、該集積回路の回路構成を表す出力コードを
    生成する生成器とを備え、 該最適化器は、通信の時間的順序を変えることなく該単
    純化された抽象構文木内で該通信の移動を行うソフトウ
    ェア最適化器を含む、コンパイラ。
  15. 【請求項15】 前記通信は、ハンドシェークのプロト
    コルを用いた同期通信である、請求項14に記載のコン
    パイラ。
  16. 【請求項16】 前記ソフトウェア最適化器は、未使用
    変数を除去するように構成されている、請求項14に記
    載のコンパイラ。
  17. 【請求項17】 前記ソフトウェア最適化器は、ループ
    の反復の度に計算されるが答えが常に同じである演算を
    該ループの外に移動するように構成されている、請求項
    14に記載のコンパイラ。
  18. 【請求項18】 前記最適化器は、前記出力コードによ
    って表記されるハードウェアインプリメンテーションを
    最適化するハードウェア最適化器をさらに含む、請求項
    14に記載のコンパイラ。
  19. 【請求項19】 前記ハードウェア最適化器は、スケジ
    ューリングおよびアロケーションを行うように構成され
    ている、請求項18に記載のコンパイラ。
  20. 【請求項20】 前記最適化器は、少なくとも1つの所
    定の性能パラメータが所定の制約を満たしたときに最適
    化を終了するように構成されている、請求項14に記載
    のコンパイラ。
  21. 【請求項21】 前記少なくとも1つの所定の性能パラ
    メータは、集積回路の最大面積を含む、請求項20に記
    載のコンパイラ。
  22. 【請求項22】 前記少なくとも1つの所定の性能パラ
    メータは、集積回路の最小処理速度を含む、請求項20
    に記載のコンパイラ。
  23. 【請求項23】 前記少なくとも1つの所定の性能パラ
    メータは、集積回路の最大消費パワーを含む、請求項2
    0に記載のコンパイラ。
  24. 【請求項24】 前記出力コードは、レジスタ転送レベ
    ル(RTL)のコードである、請求項14に記載のコン
    パイラ。
JP2002324539A 1996-09-12 2002-11-07 集積回路の設計方法及びそれによって設計された集積回路 Pending JP2003223473A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9619096.2 1996-09-12
GB9619096A GB2317245A (en) 1996-09-12 1996-09-12 Re-timing compiler integrated circuit design

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP9249152A Division JPH10116302A (ja) 1996-09-12 1997-09-12 集積回路の設計方法及びそれによって設計された集積回路

Publications (1)

Publication Number Publication Date
JP2003223473A true JP2003223473A (ja) 2003-08-08

Family

ID=10799852

Family Applications (3)

Application Number Title Priority Date Filing Date
JP9249152A Pending JPH10116302A (ja) 1996-09-12 1997-09-12 集積回路の設計方法及びそれによって設計された集積回路
JP2002324538A Expired - Fee Related JP3835754B2 (ja) 1996-09-12 2002-11-07 集積回路の設計方法及びそれによって設計された集積回路
JP2002324539A Pending JP2003223473A (ja) 1996-09-12 2002-11-07 集積回路の設計方法及びそれによって設計された集積回路

Family Applications Before (2)

Application Number Title Priority Date Filing Date
JP9249152A Pending JPH10116302A (ja) 1996-09-12 1997-09-12 集積回路の設計方法及びそれによって設計された集積回路
JP2002324538A Expired - Fee Related JP3835754B2 (ja) 1996-09-12 2002-11-07 集積回路の設計方法及びそれによって設計された集積回路

Country Status (4)

Country Link
US (1) US6021266A (ja)
EP (1) EP0829812A3 (ja)
JP (3) JPH10116302A (ja)
GB (1) GB2317245A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007041796A (ja) * 2005-08-02 2007-02-15 Mitsubishi Electric Corp コード生成装置
JP2009141395A (ja) * 2007-12-03 2009-06-25 Yamaha Corp 制御装置、音響信号処理システムおよび音響信号処理装置並びに制御用プログラム

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6152612A (en) * 1997-06-09 2000-11-28 Synopsys, Inc. System and method for system level and circuit level modeling and design simulation using C++
US5966534A (en) * 1997-06-27 1999-10-12 Cooke; Laurence H. Method for compiling high level programming languages into an integrated processor with reconfigurable logic
JP3765923B2 (ja) 1998-02-26 2006-04-12 シャープ株式会社 ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体
DE69910826T2 (de) 1998-11-20 2004-06-17 Altera Corp., San Jose Rechnersystem mit rekonfigurierbarer programmierbarer logik-vorrichtung
GB2350448A (en) * 1999-05-27 2000-11-29 Sharp Kk Multichannel synchronised communication
JP3716967B2 (ja) * 1999-07-29 2005-11-16 シャープ株式会社 高位合成装置および高位合成方法並びにそれに用いられる記録媒体
WO2001013285A2 (en) * 1999-08-19 2001-02-22 Massachusetts Institute Of Technology Synchronous circuit synthesis using an asynchronous specification
US6625797B1 (en) * 2000-02-10 2003-09-23 Xilinx, Inc. Means and method for compiling high level software languages into algorithmically equivalent hardware representations
US6519742B1 (en) * 2000-03-06 2003-02-11 Synplicity, Inc. Local naming for HDL compilation
US6519757B1 (en) * 2000-04-11 2003-02-11 International Business Machines Corporation Hardware design language generation for input/output logic level
WO2001090887A1 (fr) * 2000-05-25 2001-11-29 Fujitsu Limited Procede de traitement de programme permettant un traitement haute vitesse au moyen d'un materiel a reconfiguration dynamique et programme permettant d'executer ce procede de traitement
US7079281B1 (en) 2000-08-01 2006-07-18 Eastman Kodak Company Edge enhancement processor and method with adjustable threshold setting
JP2002049652A (ja) * 2000-08-03 2002-02-15 Hiroshi Yasuda デジタル回路設計方法、そのコンパイラーおよびシミュレータ
EP1742159A3 (en) * 2000-08-07 2007-06-20 Altera Corporation Software-to-Hardware compiler
AU2001283549A1 (en) 2000-08-07 2002-02-18 Altera Corporation Software-to-hardware compiler
US7343594B1 (en) 2000-08-07 2008-03-11 Altera Corporation Software-to-hardware compiler with symbol set inference analysis
JP3852741B2 (ja) * 2000-10-31 2006-12-06 シャープ株式会社 高位合成方法および高位合成装置
US6530069B2 (en) * 2000-11-29 2003-03-04 Unisys Corporation Printed circuit board design, testing, and manufacturing process
US20030023653A1 (en) * 2001-01-29 2003-01-30 Andrew Dunlop System, method and article of manufacture for a single-cycle floating point library
US6792580B2 (en) * 2001-01-31 2004-09-14 Kabushiki Kaisha Toshiba Method and computer program product for software/hardware language model conversion
JP3895934B2 (ja) * 2001-01-31 2007-03-22 株式会社東芝 仕様操作装置
JP2002366596A (ja) 2001-06-11 2002-12-20 Sharp Corp 高位合成装置および高位合成方法、高位合成方法による論理回路の製造方法、記録媒体
US6907599B1 (en) * 2001-06-15 2005-06-14 Verisity Ltd. Synthesis of verification languages
US7080365B2 (en) * 2001-08-17 2006-07-18 Sun Microsystems, Inc. Method and apparatus for simulation system compiler
US20030196194A1 (en) * 2001-10-11 2003-10-16 Johns Clifford R. Hardware design protocol and system
AU2003244180A1 (en) * 2002-06-26 2004-01-19 E-Trees.Japan Inc. Method and device for quickly processing communication protocol by replacing software with hardware
US20040066462A1 (en) * 2002-10-07 2004-04-08 Mark Medow Peripheral component interconnect (PCI) card for controlling a motorized zoom lens of a camera
AU2003272931A1 (en) * 2002-10-28 2004-05-13 Renesas Technology Corp. System development method and data processing system
US7827017B2 (en) * 2002-12-17 2010-11-02 Cadence Design Systems, Inc. Method and system for implementing circuit simulators
GB2398651A (en) * 2003-02-21 2004-08-25 Picochip Designs Ltd Automatical task allocation in a processor array
US7454744B2 (en) * 2003-07-03 2008-11-18 International Business Machines Corporation Private source code commenting
WO2005086746A2 (en) * 2004-03-04 2005-09-22 Trustees Of Boston University Programmable-logic acceleraton of data processing applications
JP2005284577A (ja) * 2004-03-29 2005-10-13 Matsushita Electric Ind Co Ltd コンパイラ
US7370312B1 (en) 2005-01-31 2008-05-06 Bluespec, Inc. System and method for controlling simulation of hardware in a hardware development process
US7647567B1 (en) 2005-01-31 2010-01-12 Bluespec, Inc. System and method for scheduling TRS rules
US7506278B1 (en) * 2005-03-08 2009-03-17 Xilinx, Inc. Method and apparatus for improving multiplexer implementation on integrated circuits
US7716608B2 (en) 2005-06-01 2010-05-11 Massachusetts Institute Of Technology Circuit synthesis with sequential rules
JP2007287044A (ja) * 2006-04-19 2007-11-01 Toshiba Corp 設計支援装置
US7665059B2 (en) 2006-06-07 2010-02-16 Bluespec, Inc. System and method for designing multiple clock domain circuits
JP5491176B2 (ja) * 2006-06-21 2014-05-14 エレメント シーエックスアイ,エルエルシー 回復能力を有する集積回路アーキテクチャのための要素コントローラ
FR2902913A1 (fr) * 2006-06-21 2007-12-28 France Telecom Procede et dispositif de codage d'une note de similarite semantique et spatiale entre concepts d'une ontologie memorisee sous forme de treillis numerote hierarchiquement
JP4787711B2 (ja) * 2006-10-02 2011-10-05 日本電気株式会社 データ処理装置および方法、コンピュータプログラム、情報記憶媒体、並びにデータ処理システム
US8418135B2 (en) * 2007-05-31 2013-04-09 Red Hat, Inc. Method and apparatus to abstract away rule languages
US8350594B2 (en) 2008-11-08 2013-01-08 Massachusetts Institute Of Technology Hardware synthesis from multicycle rules
US8156457B2 (en) * 2009-09-24 2012-04-10 Synopsys, Inc. Concurrent simulation of hardware designs with behavioral characteristics
JP5751669B2 (ja) 2011-07-08 2015-07-22 ルネサスエレクトロニクス株式会社 言語変換処理方法及び言語変換処理プログラム
US8959469B2 (en) 2012-02-09 2015-02-17 Altera Corporation Configuring a programmable device using high-level language
US9449131B2 (en) * 2014-06-02 2016-09-20 Xilinx, Inc. Extracting system architecture in high level synthesis
US10421111B2 (en) 2015-04-17 2019-09-24 Ball Corporation Method and apparatus for controlling an operation performed on a continuous sheet of material
CA2982977C (en) * 2015-04-17 2019-09-10 Ball Corporation Method and apparatus for controlling the speed of a continuous sheet of material
JP6407181B2 (ja) * 2016-03-04 2018-10-17 三菱電機株式会社 設計支援装置、設計支援方法及び設計支援プログラム
US10628284B2 (en) * 2017-04-24 2020-04-21 Tektronix, Inc. System and method for bitstream decoding with compiler-generated syntax trees
JP2018200634A (ja) * 2017-05-29 2018-12-20 富士通株式会社 SystemCモデル生成方法およびSystemCモデル生成プログラム
US10671779B1 (en) * 2018-07-09 2020-06-02 Xilinx, Inc. Function calls in high level synthesis
EP3751412A1 (en) * 2019-06-11 2020-12-16 ENGEL AUSTRIA GmbH A computer-implemented method to generate an opc ua information model
US11520369B2 (en) * 2020-02-04 2022-12-06 Qualcomm Incorporated Clock instantaneous temperature-rate-of-change measurement
CN113536717B (zh) * 2021-07-14 2022-05-24 北京华大九天科技股份有限公司 一种基于增量编译的电路仿真方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5005136A (en) * 1988-02-16 1991-04-02 U.S. Philips Corporation Silicon-compiler method and arrangement
US5870308A (en) * 1990-04-06 1999-02-09 Lsi Logic Corporation Method and system for creating and validating low-level description of electronic design
US5598344A (en) * 1990-04-06 1997-01-28 Lsi Logic Corporation Method and system for creating, validating, and scaling structural description of electronic device
US5557531A (en) * 1990-04-06 1996-09-17 Lsi Logic Corporation Method and system for creating and validating low level structural description of electronic design from higher level, behavior-oriented description, including estimating power dissipation of physical implementation
US5555201A (en) * 1990-04-06 1996-09-10 Lsi Logic Corporation Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including interactive system for hierarchical display of control and dataflow information
US5603043A (en) * 1992-11-05 1997-02-11 Giga Operations Corporation System for compiling algorithmic language source code for implementation in programmable hardware
US5483640A (en) * 1993-02-26 1996-01-09 3Com Corporation System for managing data flow among devices by storing data and structures needed by the devices and transferring configuration information from processor to the devices
US5493508A (en) * 1994-06-01 1996-02-20 Lsi Logic Corporation Specification and design of complex digital systems
US5537580A (en) * 1994-12-21 1996-07-16 Vlsi Technology, Inc. Integrated circuit fabrication using state machine extraction from behavioral hardware description language
US5793824A (en) * 1996-04-30 1998-08-11 Adtran, Inc. Digital phase locked loop having adaptive bandwidth for pulse stuffing synchronized digital communication system

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007041796A (ja) * 2005-08-02 2007-02-15 Mitsubishi Electric Corp コード生成装置
JP2009141395A (ja) * 2007-12-03 2009-06-25 Yamaha Corp 制御装置、音響信号処理システムおよび音響信号処理装置並びに制御用プログラム

Also Published As

Publication number Publication date
EP0829812A3 (en) 1999-08-25
US6021266A (en) 2000-02-01
JPH10116302A (ja) 1998-05-06
JP2003216668A (ja) 2003-07-31
JP3835754B2 (ja) 2006-10-18
GB9619096D0 (en) 1996-10-23
EP0829812A2 (en) 1998-03-18
GB2317245A (en) 1998-03-18

Similar Documents

Publication Publication Date Title
JP3835754B2 (ja) 集積回路の設計方法及びそれによって設計された集積回路
Gajski et al. Introduction to high-level synthesis
Jóźwiak et al. Modern development methods and tools for embedded reconfigurable systems: A survey
JP4014080B2 (ja) デジタル回路の設計装置および設計方法、並びに、プログラムおよび格納媒体
US6233540B1 (en) Design environment and a method for generating an implementable description of a digital system
US8336036B2 (en) System and method for translating high programming level languages code into hardware description language code
US6996788B2 (en) Hardware-operation description conversion method and program therefor
Lin et al. Synthesis of concurrent system interface modules with automatic protocol conversion generation
US7325209B2 (en) Using patterns for high-level modeling and specification of properties for hardware systems
WO2002061636A2 (en) System, method and article of manufacture for parameterized expression libraries
Josipović et al. Invited tutorial: Dynamatic: From C/C++ to dynamically scheduled circuits
US20030196194A1 (en) Hardware design protocol and system
EP0867820A2 (en) A design environment and a method for generating an implementable description of a digital system
Zhao et al. Using vivado-HLS for structural design: A NoC case study
US7113901B1 (en) Reuse of hardware components
US6449763B1 (en) High-level synthesis apparatus, high level synthesis method, and recording medium carrying a program for implementing the same
Brunvand Designing self-timed systems using concurrent programs
Ku et al. Synthesis of asics with hercules and hebe
Mamaghani et al. Optimised synthesis of asynchronous elastic dataflows by leveraging clocked eda
Hadjiyiannis et al. ISDL: An instruction set description language for retargetability and architecture exploration
Savaton et al. Behavioral vhdl styles and high-level synthesis for ips
Coussy et al. Constrained algorithmic IP design for system-on-chip
Van Leeuwen Implementation and automatic generation of asynchronous scheduled dataflow graph
Cesário et al. Overlap and frontiers between behavioral and RTL synthesis
Gajski et al. Embedded system environment (front end) ese version 2.0 evaluation tutorial

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060307

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060428

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060531