JP5568566B2 - 高水準言語コードをhdlコードに変換する方法及びシステム - Google Patents

高水準言語コードをhdlコードに変換する方法及びシステム Download PDF

Info

Publication number
JP5568566B2
JP5568566B2 JP2011537361A JP2011537361A JP5568566B2 JP 5568566 B2 JP5568566 B2 JP 5568566B2 JP 2011537361 A JP2011537361 A JP 2011537361A JP 2011537361 A JP2011537361 A JP 2011537361A JP 5568566 B2 JP5568566 B2 JP 5568566B2
Authority
JP
Japan
Prior art keywords
code
hdl
hardware
main core
level language
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
JP2011537361A
Other languages
English (en)
Other versions
JP2012509537A (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.)
Korea University Research and Business Foundation
Original Assignee
Korea University Research and Business Foundation
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 Korea University Research and Business Foundation filed Critical Korea University Research and Business Foundation
Publication of JP2012509537A publication Critical patent/JP2012509537A/ja
Application granted granted Critical
Publication of JP5568566B2 publication Critical patent/JP5568566B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、C、C++、フォートラン、ジャバなどのような高水準言語コードをVerilog及びVHDLのようなHDLコードに変換する方法及びシステムに関するものであって、より具体的には、高水準言語コードのコンパイラに付け加わえられるHDLバックエンド(Back End)を用いて高水準言語からなるコードをHDL(Hardware Description Language)コードに変換した後、変換されたHDLコードを論理合成し、メインコアと連動されるようにすることによって、応用プログラムの速度を向上させることができる高水準言語コードをHDLコードに変換する方法及びシステムに関する。また、専用ハードウェアで実行される変換されたHDLコードと、メインコアで実行されるソフトウェアコードとの間のクロスコール及びハードウェア内部での再帰呼び出し(recursive call)のためのフレームワークに関する。
過去数十年の間、デジタル回路の設計は、半導体の製造技術の急激な発展によって速く進化してきた。初期のデジタル回路は、真空管とトランジスターとから設計され、一つのチップの上に論理回路を集積した集積回路(IC、Integrated Circuit)がその後に続いた。技術の発展によって、論理回路(Gate)の数がとても少なかったSSI(Small Scale Integration)からMSI(Medium Scale Integration)、チップの上に数千個のGateを集積しなけばならないLSI(Large Scale Integration)、及びLSIの複雑性よりずっと大きな複雑性を有するVLSI(Very Large Scale Integration)技術に発展した。以後、汎用プロセッサー(General Purpose Processor)、DSPs(Digital Signal Processors)、及びASICs(Application Specific Integrated Circuit)等のようなVLSIは徐々により活用されている。
Fortran、Pascal、Cのようなプログラミング言語は、長い間、順次的に動作するコンピュータープログラムの記述に使われた。これと同じく、デジタル回路の設計者達は、デジタル回路を記述することのできる標準化された言語の必要性を感じてきて、これによって作られたのが、HDL(Hardware Description Language)である。HDLは、ハードウェアの特性と合う同時発生の過程を記述することができて、代表的HDLがVerilogHDLとVHDLである。Verilog HDLはGateway Design Automationから始まって、VHDLはDARPA(アメリカ国防高等研究計画局)の支援で開発された。デジタル回路の開発者達はデジタルシステムの発展のためにHDLを活用し、設計されたHDLコードはHDLコンパイラによって合成(synthesize)された。
現在、多くのシステム開発者達はマイクロプロセッサーより、ワット当たりの性能が優れる点及びASICより設計の柔軟性を有するため、FPGA(Field Programmable Gate Array)を自分達の開発プラットフォームに加える必要性を感じており、時々汎用プロセッサーまたはDSPsをFPGAに取り替えて活用している。しかし、HDLコードを用いてFPGAを活用するためには、ハードウェア設計における多くの知識が要求され、これによってたいていのソフトウェア開発者達のFPGAの活用にあたって、現実的に困難がある。従って、ハードウェアの構成における心配なしに、概念的水準の言語である高水準言語コードをもってハードウェアシステムを開発する必要性が増えており、このため、一般的に活用される高水準言語コードをHDLコードに変換するツールの必要性が増えている。
従って、このような問題を解決するために、従来のソフトウェアレベルの言語コードをHDLコードに変換してくれるツール乃至方法について多くの研究が行われてきた。しかし、高水準言語コードをHDLコードに変換することにおいて、ハードウェアとソフトウェアとのプログラミングに概念的に大きな差が存在し、これによってポインタ、二次元アレーなどのソフトウェア言語の全てのsyntaxをHDL言語で表現することに大きな困難があるため、従来のツール乃至方法は、単にSystemC、SA-CまたはStreams-Cのようなシステムレベル言語コードのHDLコードへの変換のみを支援するか、または高水準言語のHDLへの直接変換を支援しても、ただ高水準言語からなるsyntaxの一部分のみを直接変換するだけで、多くの限界点を有していた。
さらに、ハードウェアとソフトウェアにおけるコード生成での差異点のため、ソフトウェアとハードウェアとの間のクロスコール(cross call)乃至ハードウェア内部での再帰呼び出し(recursive call)を支援しない問題点があった。
前記のような問題点を解決するための本発明の目的は、変換対象高水準言語コードにおける修正がなくても、全ての高水準言語のsyntax及びsemanticsが変換可能であって、メインコンパイラが支援する全ての高水準言語コードをHDLコードに変換する方法を提供する。
本発明の他の目的は、ソフトウェアのメインコンパイラが支援する全ての高水準言語コードの全てのsyntax及びsemanticsをHDLコードに変換して、同時に高水準言語からなるコードに使う全ての最適化(optimization)が活用できるHLL-to-HDL(High-Level Language Code to HDLCode)変換機を提供する。
本発明のまた他の目的は、メインコアで実行されるソフトウェアコードと、専用ハードウェアで実行されるHDLコードとの間にcross call及び専用ハードウェアで実行されるHDLコードとの間の再帰呼び出し(recursive call)を制限なく支援するコンパイル(compilaton)及び実行(execution)フレームワーク(framework)を提供する。
前記の目的を達成するための本発明の一実施例によると、(1)高水準言語コードの変換対象部分(translation-targeted section)をプログラミングディレクティブ(programming directive)を用いて表示する段階;(2)表示された前記高水準言語コードの変換対象部分をハードウェア部分コード及び前記高水準言語コードの残り部分をソフトウェア部分コードに分割(partition)する段階;(3)前記ソフトウェア部分コード及びハードウェア部分コードをメインコンパイラによってコンパイルし、前記ハードウェア部分コードをHLL-to-HDL(High-level language code to hardware description language)変換機によってHDLコードに変換される段階;及び(4)前記ソフトウェア部分コードはメインコアで実行され、前記HDLコードは専用ハードウェアで実行される段階とを含む高水準言語コードのHDLコードへの変換方法を提供する。
好ましい実施例として、前記(2)段階の前記ハードウェア部分コードは、前記変換対象高水準言語コードの一つ以上のサブルーチン(subroutine)/関数(function)を含み、前記ソフトウェア部分コードは、前記ハードウェア部分コードへのサブルーチン/関数呼び出し(call)ステートメント(statement)または呼び出し命令を含むことを特徴とする。
また、前記(3)段階は:前記ソフトウェア部分コード及びハードウェア部分コードをメインコンパイラによって実行できるコードにコンパイルする段階;前記メインコンパイラリンカ(linker)によって一定のデータオフセット(constant data offset)を含むリンキング(linking)ログファイルを生成する段階;前記メインコンパイラによって実行できるソフトウェアコードの全てのソフトウェア関数及び変数の住所を含むシンボルテーブル(symbol table)を生成する段階;及び前記HLL-to-HDL変換機によって前記リンキングログファイル及びシンボルテーブルを参照して前記ハードウェア部分コードのHDLコードを生成する段階を含むことを特徴とする。
また、前記HLL-to-HDL変換機は、前記ソフトウェア部分コードに定義されたソフトウェアの関数及び変数の住所レゾリューション(resolution)のために、前記リンキングログファイル及びシンボルテーブルを活用して、前記ハードウェア部分コードのストリングコンスタント(String constant)等の住所レゾリューション(address resolution)のために前記リンキングログファイル及びシンボルテーブルを活用することを特徴とする。
また、前記(3)段階の前記HLL-to-HDL変換機による前記ハードウェア部分コードのHDLコードへの変換は:前記ハードウェア部分コードを前記メインコンパイラのターゲットアセンブリコード生成の直前段階の低水準IR(Intermediate Representation)コードに変換する段階;及び前記低水準IRコードをHDLコードに変換する段階を含み、前記変換は、前記メインコアの標準呼出リンケージ規約(standard call linkage convention)を保持することを特徴とする。
また、前記高水準言語コードのサブルーチン(subroutine)/関数(function)から生成された前記HDLコードは:ターゲットアセンブリコード生成と同一方式で前記低水準IRコードからHDLにマッピング(mapping)して生成されるデータパス(datapath);及び前記低水準IRコードのベーシックブロックら(basic blocks)の間のコントロールフロー情報(control flow information)に基づいて、前記HDLバックエンドの内部のHDLコード生成器(HDLcode generator)によって生成され、前記データパスを制御する制御ユニット(control unit)を含むことを特徴とする。
また、前記高水準言語コードのサブルーチン/関数のHDLへの変換方法は、生成された前記HDLコードが一つ以上のブロックモジュールを前記データパスとして含み、トップモジュールを前記制御ユニットとして含むbasic-block-by-basic-block生成方法または生成された前記HDLコードが前記データパス及び前記制御ユニットを全て含む一つのモジュールを含むfunction-by-function生成方法の中のいずれか一つであることを特徴とする。
また、前記basic-block-by-basic-blockコード生成方法の前記一つ以上のブロックモジュールは、前記低水準IRコードのベーシックブロック(basic blocks)と同一機能を遂行し、前記トップモジュールは、前記一つ以上のブロックモジュールのインスタンス(instances)を生成し、前記一つ以上のブロックモジュールを活性化(enabling)/非活性化(disabling)によって実行順序を定めることを特徴とする。
また、前記basic-block-by-basic-blockコード生成方法の前記ブロックモジュール及び前記トップモジュールは、有限状態機械(Finite State Machine)の形態であって、一つのブロックモジュールは、前記低水準IRコードのベーシックブロックの内部の連続的(consecutive)低水準IRインストラクション(instructions)の一つのシーケンスを遂行する有限状態機械のステート(state)セット(set)であって、有限状態機械のステートは、前記低水準IRインストラクションの遅延推定値(delay estimation)及びdata/control依存性に基づくことを特徴とする。
また、前記basic-block-by-basic-blockコード生成方法の前記トップモジュールは、前記一つ以上のブロックモジュールの中の一つまたはその以上のブロックモジュールが動作するようにすることができて、前記ブロックモジュールの中の一つまたはその以上のブロックモジュールに入力を割り当てて作動させた後、作動された前記一つまたはその以上のブロックモジュールの動作が終わるまで待ち、作動された前記一つまたはその以上のブロックモジュールは、割り当てられた入力をもって自分のコードを実行し、自分のレジスタセットまたは他のブロックモジュールと共有するレジスタセットに出力を保存(buffer)した後、前記トップモジュールに制御フロー出力(Control Flow Outcome)と一緒にレジスタセットに保存された前記出力を提供(return)し、前記トップモジュールは前記制御フロー出力に基づいて前記一つ以上のブロックモジュールの中で次に実行されるブロックモジュールを決定することを特徴とする。
また、前記function-by-functionコード生成方法の前記データパス及びハードウェア関数の制御ユニットは、一つのHDLモジュールに含まれて、一つの有限状態機械から構成(implement)され、前記データパスは、前記有限状態機械の出力信号(output signals)を生成し、前記制御ユニットは、前記有限状態機械のステート変化(transition)を制御し、前記データパスは、高水準言語のサブルーチン/関数における全てのベーシックブロックから生成され、前記高水準言語コードのサブルーチン/関数のベーシックブロックの低水準IRインストラクションから生成された有限状態機械の一つのセットであって、有限状態機械のステートは、前記低水準IRインストラクションの遅延推定値(delay estimation)及びdata/control依存性に基づくことを特徴とする。
また、前記function-by-functionコード生成方法の前記制御ユニットは、高水準言語コードのサブルーチン/関数の制御フロー情報(control flow information)に基づいて前記有限状態機械のステートを変化させることによって、前記データパスを制御することを特徴とする。
また、前記(3)段階の前記高水準言語コードから生成された前記HDLコードは、前記コンパイルされたソフトウェアコードとスタック(stack)とを含むメモリ領域を共有し、前記メインコアのソフトウェアスタックレイアウトを従い、共有する前記メモリ領域は、スピルドバリュー(spilled value)の保存、レジスタファイル及びリターンアドレスの保存、前記ハードウェアコードとコンパイルされた前記ソフトウェア部分コードとの間の関数アーギュメント(argument)の伝達等に使われることを特徴とする。
また、前記(4)段階の専用ハードウェアは、前記高水準言語コードのサブルーチン/関数から各々生成され:前記HLL-to-HDL変換機によってHWID(Hardware identification number、ハードウェア識別番号)が付与されたHWIP(Hardware Intellectual Properties)セット;及び前記HWIPを制御するハードウェアコントローラ(hardware controller)を含み、前記HWIDは、前記ソフトウェア部分コードと前記ハードウェア部分コードのシンボルテーブルに記述されたターゲットアドレスまたは前記ターゲットアドレスから再計算された固有番号であることを特徴とする。
また、前記ハードウェアコントローラは、前記HWIPらと前記メインコアとの間にアーギュメント(arguments)を伝達することによって前記HWIPらを制御し、前記HWIPらとメインコアとの間の呼び出し制御信号(calling control signals)を通じて前記HWIPらとメインコアの実行順序を制御し、前記ハードウェアコントローラは、前記HWIPらと前記メインコアで実行されるソフトウェアとの間の呼び出しシーケンスによって一つ以上のHWIPらまたはメインコアを活性化させ、前記メインコアが前記ハードウェアコントローラとして使われることを特徴とする。
また、前記(4)段階の前記メインコアと前記専用ハードウェアとの間の通信インターフェースは、前記メインコアと前記専用ハードウェアが緩く(loosely)連結(coupled)されて、前記専用ハードウェアが前記メインコアとインタラプティング(interrupting)によって通信する疎結合(loose coupling)、または前記メインコアと前記専用ハードウェアが固く(tightly)連結されて、前記専用ハードウェアと前記メインコアが制御信号を互いに直接取り交すことができる密結合(tight coupling)であることを特徴とする。
また、前記(4)段階は:コンパイルされた前記ソフトウェア部分コードを前記メインコアで実行する段階;前記コンパイルされたソフトウェア部分コードが実行される間に一つ以上の前記HWIPの実行が必要である場合、前記メインコアによって前記専用ハードウェアの前記ハードウェアコントローラを活性化させて呼び出し(calling)データを伝送する段階;前記専用ハードウェアの前記ハードウェアコントローラによって対象となる一つ以上の前記HWIPを活性化させて呼び出しデータを伝送する段階;活性化された前記HWIPのコードを実行し、実行結果をメモリとシステムレジスタに保存し、活性化された前記一つ以上のHWIPの実行終了を前記ハードウェアコントローラに通知する段階;前記ハードウェアコントローラによって活性化された前記一つ以上のHWIPの実行終了を前記メインコアに通知する段階;及び前記メインコアによって前記アップデートされたデータをもって前記コンパイルされたソフトウェア部分コードを引き続き実行する段階を含むことを特徴とする。
また、前記メインコアから前記専用ハードウェアに伝送される前記呼び出しデータは:スタックポインタ、リンクレジスタ、アーギュメントレジスタ及び前記メインコアに依存する他のレジスタを含むシステムレジスタ;及び対象となる一つ以上の前記HWIPのHWID及び活性信号(enable signal)を含む制御信号を含むことを特徴とする。
また、対象となる一つ以上の前記HWIPのアーギュメントは、前記メインコアからシステムレジスタのアーギュメント及び前記HDLコードとコンパイルされた前記ソフトウェアコードとの間に共有するスタックスペースを用いて伝送されることを特徴とする高水準言語コードのHDLコードへの変換方法。
また、前記(4)段階の前記メインコアは、前記メインコアと前記専用ハードウェアとが密結合(tight coupling)である場合には、前記メインコアのISA(Instruction Set Architecture)の専用インストラクションを用いて前記専用ハードウェアと通信するか、制御信号を伝送し、前記メインコアと前記専用ハードウェアとが疎結合(loose coupling)である場合には、通信機能を遂行するAPIファンクション媒介体を呼び出す(calling)ことによって、前記専用ハードウェアと通信するか、制御信号を伝送することを特徴とする。
また、前記メインコアと前記専用ハードウェアとが疎結合である場合、前記ハードウェアコントローラを活性化する場合、前記メインコアは、自分のレジスタ値でハードウェアのレジスタをアップデートすることを特徴とする。
また、前記ハードウェアコントローラによって前記専用ハードウェアのHWIPのいずれか一つが活性化される場合、活性化された前記HWIPは、前記メインコアと前記専用ハードウェアが密結合である場合には、前記メインコアからデータを直接読み込み、前記メインコアと前記専用ハードウェアとが疎結合である場合には、前記ハードウェアコントローラのレジスタ値を読み込むことを特徴とする。
また、前記専用ハードウェアの前記ハードウェアコントローラは、活性化された前記HWIPの実行完了において、前記メインコアと前記専用ハードウェアとが疎結合である場合には、前記メインコアをインタラプティング(interrupting)することによって前記メインコアに通知し、前記メインコアと前記専用ハードウェアとが密結合である場合には、制御信号を前記メインコアに伝送することによって前記メインコアに通知することを特徴とする。
また、前記専用ハードウェアの前記HWIPは、前記メインコアで実行中のコンパイルされた前記ソフトウェア部分コードへのクロスコール(cross call)が遂行可能であって、前記クロスコール遂行は:前記HWIPによって前記ハードウェアコントローラにコンパイルされた前記ソフトウェアを呼び出す(call)必要があることを知らせるための呼び出しデータ(calling data)を準備して制御信号(control signal)を伝送する段階;前記ハードウェアコントローラによって前記メインコアに前記クロスコールについて通知する段階;前記メインコアによって前記呼び出しデータを前記メインコアのレジスタにコピーし、呼び出された前記コンパイルされたソフトウェア部分コードのコードを実行し、呼び出された前記コンパイルされたソフトウェア部分コードの実行が完了される場合、これを前記ハードウェアコントローラに通知する段階;前記ハードウェアコントローラによって呼び出された前記コンパイルされたソフトウェア部分コードの実行完了について呼び出した前記HWIPに通知する段階;及び前記HWIPによって呼び出された前記コンパイルされたソフトウェア部分コードの実行結果をもって自分のコードを引き続き実行する段階を含むことを特徴とする。
また、前記HWIPから前記制御信号(control signal)を受信する場合、前記ハードウェアコントローラは、前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記メインコアをインタラプティング(interrupting)することによって、前記クロスコールについて前記メインコアに通知し、前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記制御信号を前記メインコアに直接伝送することによって、前記クロスコールについて前記メインコアに通知することを特徴とする。
また、呼び出された前記コンパイルされたソフトウェア部分コードの実行が完了されると、前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記メインコアは、前記ハードウェアコントローラのシステムレジスタ値で自分のレジスタをアップデートし、前記ソフトウェア部分コードのリターン値及びリターンアドレスを前記ハードウェアコントローラのレジスタに記入(write)し、前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記メインコアは、呼び出す前記HWIPから入力値を直接読み込むことを特徴とする。
また、前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記HWIPは、呼び出された前記コンパイルされたソフトウェア部分コードのリターンデータ及びリターンアドレスを前記ハードウェアコントローラのシステムレジスタから読み込み、前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記HWIPは前記コンパイルされたソフトウェア部分コードのリターンデータ及びリターンアドレスを前記メインコアのレジスタ値から直接読み込むことを特徴とする。
また、前記専用ハードウェアのいずれか一つの前記HWIPは、他のHWIPまたは自分自身への呼び出し(call)が遂行可能であって、前記呼び出しは:前記いずれか一つのHWIPによって前記ハードウェアコントローラに呼び出す(call)必要があることを知らせるための呼び出しデータ(calling data)を準備し、制御信号(control signal)を伝送する段階;前記ハードウェアコントローラによって呼び出しアドレスを検査(examining)し、前記他のHWIPまたは前記いずれか一つのHWIPを活性化する段階;前記他のHWIPまたは前記いずれか一つのHWIPによって自分のレジスタに前記呼び出しデータ(calling data)をコピーし、自分のコードを実行し、実行完了の時、これを前記ハードウェアコントローラに通知する段階;前記ハードウェアコントローラによって呼び出された前記他のHWIPまたは前記いずれか一つのHWIPの実行完了について、前記いずれか一つのHWIPに通知する段階;及び前記いずれか一つのHWIPによって呼び出された前記他のHWIPまたは前記いずれか一つのHWIPの実行結果をもって、自分のコードを引き続き実行する段階を含むことを特徴とする。
また、前記呼び出しデータは:スタックポインタと、リンクレジスタと、アーギュメントレジスタと、リターンレジスタとを含むシステムレジスタ;及び呼び出しの対象の前記他のHWIPまたは自分自身のアドレス及び活性信号(enable signal)を含む制御信号を含み、前記メインコアと前記ハードウェアコントローラとが疎結合されていて、全ての前記HWIPが前記ハードウェアコントローラの内部のシステムレジスタセットを共有する場合には、呼び出しの対象の前記他のHWIPまたは前記いずれか一つのHWIPを呼び出す前に、前記いずれか一つのHWIPによって前記呼び出しデータに前記ハードウェアコントローラの内部の共有する前記システムレジスタをアップデートすることを特徴とする。
また、前記他のHWIPのアーギュメントは、アーギュメントレジスタ及び前記HWIPらの間に共有するスタックスペースを通じて、前記いずれか一つのレジスタから伝送されることを特徴とする。
また、前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記他のHWIPは、活性化された場合、前記ハードウェアコントローラの内部のシステムレジスタに自分のレジスタをアップデートし、前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記他のHWIPは活性化された場合、前記いずれか一つのHWIPのレジスタ値を直接読み込むことを特徴とする。
また、前記メインコアと前記ハードウェアコントローラとが疎結合されていて、全ての前記HWIPが前記ハードウェアコントローラの内部のシステムレジスタセットを共有する場合には、前記他のHWIPは実行完了の時、自分のリターン値(value)及びリターンアドレスを前記ハードウェアコントローラの内部のレジスタに記入(write)することを特徴とする。
また、前記メインコアと前記ハードウェアコントローラとが疎結合されていて、全ての前記HWIPが前記ハードウェアコントローラの内部のシステムレジスタセットを共有する場合には、前記いずれか一つのHWIPは、前記他のHWIPのリターン値(value)及びリターンアドレスを前記ハードウェアコントローラの内部のレジスタから読み込み、前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記いずれか一つのHWIPは、前記他のHWIPのリターン値(value)及びリターンアドレスを前記他のHWIPのレジスタから直接読み込むことを特徴とする。
本発明の他の実施例によると、プログラミングディレクティブと表示された変換対象高水準言語コードから前記プログラミングディレクティブを読み込んだ後、前記変換対象高水準言語コードをハードウェア部分コードとソフトウェア部分コードとに分割するHLL-to-HLLソース変換機;前記ソフトウェア部分コード及びハードウェア部分コードをコンパイルするメインコンパイラ;前記ハードウェア部分コードをデータパス及びコントロールユニットを含むHDLコードに変換するHLL-to-HDL変換機;コンパイルされた前記ソフトウェア部分コードを実行するメインコア;及び前記メインコアと連動して変換された前記HDLコードを実行する専用ハードウェアを含む高水準言語コードのHDLコードへの変換システムを提供する。
好ましい実施例として、前記ハードウェア部分コードは、前記変換対象高水準言語コードの一つ以上のサブルーチン/関数を含み、前記ソフトウェア部分コードは、前記変換対象高水準言語コードの残り部分及び前記ハードウェア部分コードへの関数呼び出しを含むことを目的とする。
また、前記HLL-to-HDL変換機は、前記メインコンパイラのフロントエンド(front end)及びミドルエンド(middle end)とHDLバックエンド(backend)とを含み、前記HLL-to-HDL変換機は、自然的に(natuarally)HDLコード生成過程からコンパイルされた前記ソフトウェア部分コードのリンケージ規約(linkage convention)を従い、前記HDLバックエンドは:シンタックス(syntax)がHDLシンタックスとセマンティクス(semantics)を従い、低水準IRコードをHDLにマッピングするマシン記述ファイル(machine description file);及びHDLコードジェネレーター(generator)を含むことを特徴とする。
また、前記HLL-to-HDL変換機の前記メインコンパイラのフロントエンド及びミドルエンドは、前記ハードウェア部分コードを低水準IRコードに変換し、前記HLL-to-HDL変換機の前記HDLバックエンドは、前記低水準IRコードをHDLコードに変換することを特徴とする。
また、前記高水準言語コードのサブルーチン/関数に該当する前記HDLコードの生成は、生成された前記HDLコードが一つ以上のブロックモジュールを前記データパスとして含み、トップモジュールを前記制御ユニットとして含むbasic-block-by-basic-block生成方法、または生成された前記HDLコードが前記データパス及び前記制御ユニットを全て含む一つのモジュールを含むfunction-by-function生成方法の中のいずれか一つであることを特徴とする。
また、前記HDLコードのハードウェア関数の前記データパスは、前記HDLバックエンドのマシン記述ファイルによって前記低水準IRコードから直接生成され、前記HDLコードのハードウェア関数のコントロールユニットは、前記HDLコード生成器によって前記低水準IRコードのベーシックブロックらの間のコントロール依存性に基づいて生成され、前記データパス及び前記コントロールユニットは、有限状態機械(FSM)の形態であることを特徴とする。
また、前記basic-block-by-basic-block生成方法の場合、前記ブロックモジュールは、連続的低水準IRコードインストラクションのシーケンスから生成された有限状態機械のセット(set)であって、前記有限状態機械のステート(state)分割は、前記低水準IRコードインストラクションの遅延推定値及びデータ/コントロール依存性に基づいてなって、前記ブロックモジュールは、前記低水準IRコードのベーシックブロックと同一機能を遂行し、前記トップモジュールは、前記ブロックモジュールを活性化/非活性化させ、前記ブロックモジュールの実行順序を定めることを特徴とする。
また、前記basic-block-by-basic-block生成方法の場合、前記トップモジュールが一回に一つまたはその以上のブロックモジュールが動作するように、前記一つ以上のブロックモジュールの中の一つまたはその以上のブロックモジュールに入力を割り当てて、活性化させた後、活性化された前記一つまたはその以上のブロックモジュールの実行が終わるまで待ち、活性化された前記一つまたはその以上のブロックモジュールは、割り当てられた入力をもって自分のコードを実行し、自分のレジスタセットに出力を保存(buffer)した後、前記トップモジュールに制御フロー出力(Control Flow Outcome)と一緒にレジスタセットに保存された前記出力を提供(return)し、前記トップモジュールは、前記制御フロー出力に基づいて前記一つ以上のブロックモジュールの中で次に実行されるブロックモジュールを決定することを特徴とする。
また、前記function-by-function生成方法の場合、前記高水準言語コードのサブルーチン/関数に該当する生成された前記HDLコードの前記データパス及び前記コントロールユニットは、一つのモジュールに含まれ、有限状態機械と具現(implement)され、前記データパスは、前記有限状態機械の出力ロジック(output logic)を生成し、前記コントロールユニットは、前記有限状態機械のステート変移(transition)を制御し、前記データパスは、前記高水準言語コードのサブルーチン/関数の全てのベーシックブロックの低水準IRコードインストラクションの連続的シーケンスから生成され、前記有限状態機械のステート(state)分割は、前記低水準IRコードインストラクションの遅延推定値及びデータ/コントロール依存性に基づいてなることを特徴とする。
本発明のまた他の実施例によると、HLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステムにおいて、前記HLL-to-HDL変換機は:
メインコンパイラのフロントエンドとミドルエンド;及びHDLバックエンドを含むことを特徴とするHLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステムが提供される。
好ましい実施例として、前記HDLバックエンドは:HDLシンタックスとセマンティクスを従うシンタックスを有して、ターゲットアセンブリコード(target assembly code)生成と同一方式で低水準IRコードをHDLコードにマッピングする変換機;及び前記メインコンパイラのフロントエンド及びミドルエンドによって前記高水準言語コードから前記ターゲットアセンブリコード生成の直前に変換された低水準IRコードから前記HDLコードを生成するHDLジェネレーター(generator)を含むことを特徴とする。
また、前記HLL-to-HDL変換機によって前記高水準言語コードのサブルーチン/関数から生成された前記HDLコードは、データパス及びコントロールユニットを含み、前記データパス及び前記コントロールユニットは、有限状態機械の形態と具現されることを特徴とする。
また、basic-block-by-basic-block生成方法の場合、前記HDLコードは、前記高水準言語コードのサブルーチン/関数から生成された一つまたはその以上のブロックモジュールを前記データパスとして含み、トップモジュールをコントロールユニットとして含み、function-by-function生成方法の場合、前記HDLコードは、データパス及び前記コントロールユニットの両者を全部含む一つのモジュールを含むことを特徴とする。
また、前記basic-block-by-basic-block生成方法の場合、前記データパスは一つまたはその以上のブロックモジュールを含み、前記ブロックモジュールは、ベーシックブロックの低水準IRコードインストラクションから生成される有限状態機械セットであって、前記function-by-function生成方法の場合、前記データパスは、前記高水準言語コードのサブルーチン/関数の全てのベーシックブロックの低水準IRコードインストラクションから生成される有限状態機械セットであって、前記二つの方法全てにおいて、前記有限状態機械のステート(state)分割は、前記低水準IRコードインストラクションの遅延推定値及びデータ依存性に基づいてなることを特徴とする。
本発明による高水準言語コードのHDLコードへの変換システム及び方法は、変換対象高水準言語コードにおける修正がなくても、全ての高水準言語のsyntax及びsemanticsが変換可能であって、メインコンパイラが支援する全ての高水準言語コードをHDLコードに変換できる有利な効果がある。
また、全ての高水準言語のsyntax及びsemanticsで使用可能であって、メインコンパイラが支援する全ての高水準言語コードをHDLコードに変換することができて、メインコンパイラを基本コンパイラとして使うことによって、高水準言語からなるコードに使う全ての最適化(optimization)が使用できる有利な効果がある。
また、専用ハードウェアで実行される変換されたHDLコードとメインコアで実行されるソフトウェアコードとの間のクロスコール及びハードウェアの内部での再帰呼び出し(recursive call)を通じてHDLコードとソフトウェアコードが連動されるようにすることによって応用プログラムの速度を向上させることができる有利な効果がある。
本発明の一実施例による高水準言語コードのHDLコードへの変換システムの構造図である。 本発明の一実施例による高水準言語コードのHDLコードに変換する過程を示す順序図である。 本発明の一実施例による変換対象言語がC言語である場合において、本発明のシステムの構成を示す例示図である。 本発明の他の実施例による変換対象言語がC言語である場合のシステムの構成を示す例示図である。 本発明の一実施例によるHLL-to-HDL変換機によってハードウェア部分コードをHDLコードに変換する過程を示す順序図である。 本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合のデータパスとしてのHDLブロックモジュールとコントロールユニットとしてのトップモジュールとの間の制御フロー及び通信を示すブロックダイアグラムである。 本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合の低水準IRコードのベーシックブロックからHDLコードのブロックモジュールのコード生成を示すブロックダイアグラムである。 本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合のコントロールユニットとしてのトップモジュールのVerilogHDLコードを示す例示図である。 本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合のコントロールユニットとブロックモジュールのインスタンスを含むVerilogHDLコードのトップモジュールを示す例示図である。 本発明の一実施例によるfunction-by-function方法を用いてC関数から生成されたデータパス及びコントロールユニットを示すブロックダイアグラムである。 本発明の一実施例によるメインコアと専用ハードウェアとの間のコミュニケーションを示すブロックダイアグラムである。 本発明の一実施例によるメインコアで実行されるソフトウェア部分コードと専用ハードウェアで実行されるハードウェア部分コードとの間のコーリングプロシージャー(calling procedure)を示す順序図である。 本発明の一実施例によるメインコアと専用ハードウェアとが疎結合である場合のソフトウェア部分コードとハードウェア部分コードとの間のクロスコールを支援するためのSW/HWインターフェース及びハードウェアコントローラを示すブロックダイアグラムである。 本発明の一実施例によるメインコアと専用ハードウェアとが疎結合である場合のメインコアで実行されるソフトウェア部分コードと専用ハードウェアで実行されるハードウェア部分コードとの間のクロスコールを遂行するメカニズムを示す例示図である。 本発明の一実施例によるメインコアと専用ハードウェアとが疎結合である場合の図14のメインコアと専用ハードウェアとの間のクロスコールの例示コードにおけるクロスコールインプリメンテーションを示す例示図である。 本発明の一実施例によるメインコアと専用ハードウェアとが密結合である場合のメインコアと専用ハードウェアとの間のコミュニケーションインターフェースを示すブロックダイアグラムである。 本発明の一実施例によるメインコアと専用ハードウェアとが密結合である場合の図16のクロスコールインプリメンテーションを示すブロックダイアグラムである。 本発明の一実施例によるメインコアと専用ハードウェアとが密結合である場合の図16のクロスコールインプリメンテーションを示すブロックダイアグラムである。
以下添付した図面を参照して、本発明の好ましい実施例を詳しく説明する。
図1は、本発明による高水準言語コードのHDLコードへの変換システムの構造図である。
図1を参照すると、本発明の高水準言語コードのHDLコードへの変換システムは、HLL-to-HLLソース変換機(110)、GCC(GNU Compiler Collection)のようなメインコンパイラ(120)、変換対象高水準言語コードをVerilogのようなHDLに変換するHLL-to-HDL変換機(130)、ARM(Advanced RISC Machine)のようなメインコア(140)及びFPGA(Field Programmable Gate Array)のような専用ハードウェア(150)を含むことがわかる。
前記HLL-to-HLLソース変換機(110)は、高水準言語コードの変換対象コードセクションにプログラミングディレクティブ(programming directive)による表示がある場合、前記プログラミングディレクティブを読み込んだ後、前記変換対象高水準言語コードをハードウェア部分コードとソフトウェア部分コードとに分割(partition)する。この時、前記ハードウェア部分コードは、前記変換対象高水準言語コードの中の特定または多数のプログラムで繰り返して使われる独立された命令群であるサブルーチン/関数部分であって、前記ソフトウェア部分コードは、前記変換対象高水準言語コードの残り部分及び前記ハードウェア部分コードへの関数呼び出しを含む。
前記メインコンパイラ(120)は、前記HLL-to-HLLソース変換機(110)によってパーティションされた前記ソフトウェア部分コード及びハードウェア部分コードを一緒にコンパイルして実行できる(executable)コードに変換する役割を果たす。
前記HLL-to-HDL変換機(130)は、前記HLL-to-HLLソース変換機(110)によってパーティションされた前記ハードウェア部分コードをHDLコードに変換する役割を果たす。
前記メインコア(140)及び前記専用ハードウェア(150)は、各々前記メインコンパイラ(120)によってコンパイルされたソフトウェア部分コードと前記変換機(130)によって変換されたHDLコードとを互いに協力して実行する役割を果たす。
図2は、本発明の一実施例による高水準言語コードのHDLコードへの変換する過程を示す順序図である。
図2を参照すると、本発明による高水準言語コードのHDLコードへの変換方法は、変換対象高水準言語コードをプログラミングディレクティブと表示する段階(S210)、表示された前記コードをハードウェア部分コードとソフトウェア部分コードとにパーティションする段階(S220)、前記ソフトウェア部分コード及びハードウェア部分コードをメインコンパイラで一緒にコンパイルする段階(S230)、前記ハードウェア部分コードをHDLコードに変換する段階(S240)、コンパイルされた前記ソフトウェア部分コードをメインコアで実行する段階(S250)及び変換された前記HDLコードを専用ハードウェアで実行する段階(S260)を含むことがわかる。この時、前記メインコアと前記専用ハードウェアとは互いに連動して実行される。
図3及び図4は、本発明の二つの実施例による変換対象言語がC言語である場合において、本発明のシステムの構成を示す例示図である。
図3及び図4を参照すると、先に説明したように、まず、高水準プログラミング言語のC言語からなる変換対象コードの変換対象セクションにプラグマのようなプログラミングディレクティブを用いて表示する。この時、表示されたコード部分はループ(図面内の#pragma hardware forの部分)、サブルーチン(#pragma hardwareセクション)、または#pragma hardwareと表示した変換対象コード内のどの部分(セクション)でもできる。以後、前記HLL-to-HLLソース変換機(110)は、プログラミングディレクティブと表示された高水準言語コードを読み込んだ後、前記プログラミングディレクティブと表示されたコードセクションをサブルーチンに変換する。前記表示されたコードセクション以外の高水準言語コードの残り部分が前記ソフトウェア部分コードに該当する。前記ハードウェア部分コード及びソフトウェア部分コードは、一つの共通したファイルに保存され、または各々違うファイルに保存されることができる。生成されたハードウェア関数は、プレフィックス(prefix)hw_func_とHWID番号(hardware identification number)と命名される(図4のhw_func_1を参照)。抜粋された(extracted)コードセクションは、ラッパ(wrapper)と名付けられたAPI関数呼び出しに取り替えられる。ハードウェアコードはソフトウェアと違ってアドレスがないため、固有のハードウェアアイデンティフィケーションナンバーのHWIDが各々のハードウェア関数に付与され、付与されたHWIDは生成されたハードウェア関数を識別するに使われる。
前記コードにおける前処理過程が完了された後、前記ソフトウェア部分コードと前記ハードウェア部分コードは、GCCコンパイラのようなメインコンパイラ120によって一緒にコンパイルされ、前記ハードウェア関数は、前記HLL-to-HDL変換機(130)によって相応するVerilogコードに変換される。
一例として、一般的な変数及び関数のarr[10]及びprintfがソフトウェアコードに宣言(declare)された場合、これらはhw_func_1にハードウェアからアクセス(access)される。このような場合、ソフトウェア部分とハードウェア部分が一緒に構成されないなら、ハードウェアは前記一般的な変数(global variable)シンボルのアドレスがわからない。シンボルテーブルは全てのグローバル変数及び関数のアドレスのみならず、データセクションのベースアドレスも含む。よって、前記グローバルシンボルのアドレスレゾリューション(resolution)のために前記シンボルテーブルを用いて前記ハードウェア部分コードとソフトウェア部分コードを一緒にコンパイルする。
しかし、前記ハードウェア部分コードの"arr[%d]=%d"のようなコンスタントストリング(constant string)は 変数ではなく、シンボルテーブルに含まれないため、これらは ".rodata"セクションに保存される。コンスタントのアドレスは3変数の合計で計算される。即ち、コンスタントのアドレスは、前記シンボルテーブルの".rodata"セクションの開始アドレス、前記HLL-to-HDL変換機の変換対象であるインプットソースファイルのコンスタントオフセットアドレス(constant's offset address)及び本発明によって修正されたGCCリンカのファイルオフセットアドレスを通じて定められる。
ソフトウェアの関数がソフトウェアではなく、ハードウェアによって実行されるため、メインコンパイラは、前記ソフトウェア部分コードとハードウェア部分コードを一緒にコンパイルする。また、前記ソフトウェア部分コードのコンピレーション(compilation)過程のコード最適化(optimization)で、ソフトウェアで実行される必要のない場合、前記関数部分は除外されることができる。即ち、デッドコード削除(deadcode elimination)がなることができる。一例として、ライブラリ関数の"printf"は、ハードウェア部分コードの"hw_func_1"関数からの呼び出し(call)のためにソフトウェア部分コードに含まれることができる。また、ハードウェアコンピレーションもコンスタントオフセット情報を正しく計算するために、全体のソースコードをコンパイルする。しかし、ハードウェア関数のみがVerilogのようなHDLコードに変換され、残りのセクションはHLL-to-HDL変換機によって無視され、変換されない。
生成されたHDLコードは、ハードウェアコンパイラによって合成されて(synthesized)FPGAのような専用ハードウェア(150)で実行され、その反面、コンパイルされたソフトウェア部分コードは、ARMのようなメインコア(140)で実行される。
図5は、本発明の一実施例によるHLL-to-HDL変換機によってハードウェア部分コードをHDLコードに変換する過程を示す順序図である。
図5を参照すると、高水準言語からなるハードウェア部分コードをVerilogのようなHDLコードに変換する過程は、高水準言語コードをRTLコードのような低水準IR(Intermediate Representation)に変換する段階(S410)及びターゲットアセンブリコード(targeted assembly code)生成の直前の段階の前記RTLのような低水準IRコードからVerilogのようなHDLコードを生成する段階(S420)からなることがわかる。
前記低水準IR(Intermediate Representation)に変換する段階(S410)及びターゲットアセンブリコード(targeted assembly code)生成の直前の段階の前記RTLのような低水準IRコードからVerilogのようなHDLコードを生成する段階(S420)は、GCCのようなメインコンパイラフロントエンド及びミドルエンドとHDLバックエンドとを含むHLL-to-HDL変換機によって遂行される。
前記ハードウェア部分コードをGCCのRTLのような低水準IRコードに変換する段階(S410)は、前記HLL-to-HDL変換機のメインコンパイラフロントエンド及びミドルエンドによってなり、前記低水準IRコードからVerilogのようなHDLコードを生成する段階は、前記HLL-to-HDL変換機のHDLバックエンドによってなる。この時、前記HLL-to-HDL変換機は、他のバックエンドによってターゲットアセンブリコード生成に使われる直前の低水準IRコードを活用して前記HDLコードを生成する。この時、低水準IRコードは、入力高水準言語とは無関係であるため、前記HLL-to-HDL変換機は、メインコンパイラが支援する全ての高水準言語からなるコードをHDL言語に変換することができる。
以下、前記RTLのような低水準IRからVerilogのようなHDLコードが生成される方法を詳しく説明する。
メインコンパイラとしてGCCコンパイラが使われ、変換されたHDLがVerilogである場合を例として説明すると、GCCコンパイラのミドルエンド部分は、アルゴリズムをアセンブリ言語に変換する前に、前記アルゴリズムを最適化するため、RTLと呼ばれるIR(Intermediate Representation)を使う。GCCのRTLは"*.md"のようなマシン記述ファイル(machine description file)によって媒介変数と示される(parameterized)抽象的記述(abstract description)である。GCCの前記マシン記述ファイル "*.md"は、関数ユニット(functional unit)、レジスタファイル及びインストラクションセットアーキテクチャー(instruction set architecture)のような目的プロセッサーについて定義する。本発明によるHDLバックエンドは、前記低水準RTLのVerilogコードへの変換を容易にするためにインストラクションパターンがVerilogシンタックスを従うように構成される。
RTLのベーシックブロックを綿密に検討すると、RTLとVerilogが多くの類似点を有していることがわかる。RTLの場合、Cポインタ及び複雑なデータ構造における全てのメモリアクセスは、単純なメモリアクセスに単純化され(convert)、全ての種類のコントロールステートメントは、ブランチ(branches)及びジャンプインストラクションに変換される。また、RTLはthree-addressコードを従い、これはVerilogステートメントに容易に変換ができる。全てのRTLのオペレーター(operator)もまたVerilogのオペレーションによって表現が可能であって、RTLベーシックブロックのlive-in及びlive-outレジスタはVerilogモジュールのinput/outputデータの形式に変換ができる。Verilogのブロックモジュールは、input/outputデータを通じて、互いに通信(communication)ができる。さらに、RTLでのレジスタの使用は、Verilogのregデータ変数(reg data variables)に対応する。
ソフトウェアRTLの不在タイミングコントロール(absent timing control)及び並行性(concurrency)の問題は、有限状態機械(FSM、finite state machine)の導入で解決できる。有限状態機械は、ハードウェアで並行実行(concurrent execution)を活用(exploit)しながらも、ソフトウェアの実行シーケンスを保持することができる。有限状態機械の各々のステートは、プログラムアドレスのように固有に番号が付けられ、一つのステートは一クロックサイクル(one clock cycle)内の実行を示す。一つの有限状態機械ステートには、一つまたはその以上のRTLインストラクションが実行できて、または時間のかかるRTLインストラクション(time-consuming RTL instruction)の場合には、複数の有限状態機械ステートにかけて実行される。また、多数個のインストラクションが互いに独立的である場合には、一つのステート内に多数個のインストラクションが並列的に実行されることができる。並列的に実行されるインストラクションの数が多いほど、FPGAのような専用ハードウェアの実行速度はもっと速くなる。しかし、関数呼び出し、掛け算、割り算及びメモリアクセスのようないくつかのインストラクションは、一つのステート内で実行されることができなく、従って、HDLバックエンドは、多数個の有限状態機械のステートにかけて実行できるようにコードを生成する。実行中のステートでの全てのインストラクションが実行された後、ステート変数(例えば、プロセッサーのPC、program counter等)は、次のステート番号に合わせられる。non-blockingアサインメントの"<="が生成されたコードに使われる。
I/O機器及びメモリシステムを除いた一般的ハードウェアシステムは、データパス(レジスタ、関数ユニット等)と前記データパスを制御するためのコントロールユニットとを含む。従って、変換されたHDLコードのサブルーチンは、一つのデータパス及び一つにコントロールユニットを含むようにHLL-to-HDL変換機によって変換される。前記データパスは、一つ以上のVerilogブロックモジュールとして具現され、前記コントロールユニットは、一つのVerilogコントロールモジュールと具現される。一つのベリログブロックモジュールは、一つのRTLベーシックブロックから構成される。
図6は、本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合のデータパスとしてのHDLブロックモジュールとコントロールユニットとしてのトップモジュールとの間の制御フロー及び通信を示すブロックダイアグラムである。
図6を参照すると、GCCで関数のRTLコードは数個の基本ブロックら(basic blocks)に分かれて、各々の基本ブロックは、ただ一つのエントリポイント(entry point)及び一つのエグジットポイント(exit point)を有する。従って、コードの制御のフローは、基本ブロックのエンド部分で定められる。即ち、現在実行中の基本ブロック乃至前処理ブロックが自分の次に実行される基本ブロック乃至後処理ブロックを指定する。前処理機と後処理機との間の入力及び出力情報はレジストファイルである。この時、後処理機の実行においては、前処理機によってアップデートされたレジスタファイルが使われる。
また、図6を参照すると、本発明のHDLモジュールは、RTLのような低水準IRコードの基本ブロックの役割と同一役割を遂行するブロックモジュールら(560乃至590)とブロックモジュールの実行を制御して、その実行順序を定めるためのトップモジュール(550)を含むことがわかる。低水準IRコードのレジスタファイルは、前記ブロックモジュールの入力(input)及び出力(output)シグナルと具現(implement)される。前記トップモジュール(550)は、複数の多くのブロックモジュールの間の実行を制御する。即ち、前記トップモジュールは、ブロックモジュールに入力を割り当ててブロックモジュールを活性化させ、前記活性化されたブロックモジュールは、割り当てられた入力をもって自分のコードを実行し、自分のレジスタセットまたは他のブロックモジュールと共有するレジスタセットに出力を保存(buffer)した後、前記トップモジュール(550)に制御フロー出力(control flow outcome)と一緒にレジスタセットに保存された出力を提供(return)する。以後、前記トップモジュール(550)は、前記制御フロー出力に基づいて次に実行されるブロックモジュールを決定する。このような方式(mechanism)を用いてブロックモジュールによるデータ経路とトップモジュールによる制御経路とが分離されることができる。
一例として、図6のブロックモジュール0(560)またはブロックモジュール2(580)のようにブランチインストラクションを含むブロックモジュールは、次に実行されるブロックモジュールの決定のためにbranch_result(例えば、比較命令の結果)をコントロールモジュールに該当するトップモジュール(550)に伝送する。以後、前記トップモジュールは、enable_bbのような信号を通じて、次に実行されるブロックモジュールを活性化させ、活性化されたブロックモジュールがinput_selectシグナルを通じて自分以前に実行されたブロックモジュールから正しい入力を選択することを手伝う。
前記ブロックモジュールのボディーコード(body code)は、本発明のマシン記述ファイル(machine description file)によってRTLのような低水準IRコードから直接(directly)生成される。これと違ってトップモジュールのボディーコードは、低水準IRコードの基本ブロックらの情報に基づいた本発明のHDL制御生産部(HDLcontrol generator)によって生成され、本発明のHLL-to-HDL変換機の出力は、数個のブロックモジュールと一つのトップモジュールとを一つに含む。
以下、本発明のbasic-block-by-basic-block方法のブロックモジュールのためのHDLコード生成について説明する。
図7は、本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合の低水準IRコードのベーシックブロックからHDLコードのブロックモジュールのコード生成を示すブロックダイアグラムである。参照符号(1)乃至(6)は、アセンブリコード、RTLインストラクション及びこれに相応するVerilogコードの一対一対応を表現するために使われた。有限状態機械の各ステートらには番号が付与されていて、それらは、caseステートメントに示されている。
全てのブロックモジュール及びトップモジュールは、Verilogコンビネーション"always"ブロックを用いた有限状態機械(FSM、Finite State Machine)の形態で生成される。図7を参照すると、インストラクションシーケンスは、各々が有限状態機械の一つの段階に該当するように数個の部分と分離され、現在実行中の段階の全ての命令語が実行された後、段階変数が以後実行される段階番号となるようにしたことがわかる。
各々のFSM段階は、一つのクラックサイクル以内に実行され、従って、一つのFSM段階は、一つまたは多数個の低水準IR命令語を実行することができる。一つの段階で実行される命令語の数が多いほど、FPGAのような専用ハードウェアの実行速度は、もっと速くなる。命令語らが一つの段階内で実行されるための条件は、つまり命令語らが並列的であるべきということである。即ち、命令語らが互いに独立的であるべきということである。本発明のHLL-to-HDL変換機は、命令語らの遅延推定値(delay estimation)及びデータ依存性に基づいて、低水準IR命令語らをいかに分割するかを決定する。足し算、引き算、配分(assignment)、行移動(shift)及び演算(logic operation)は、時間のかかる作業ではないため、一つの周期(cycle)の中で実行されるものと考慮され、このような時間のかからない命令語らは、並列的でさえあれば、一つのFSM段階内に多数個が含まれることができる。しかし、掛け算、割り算及びメモリアクセスは、時間のかかる作業に該当し、従って、これらに基づいた命令語らは、掛け算、割り算及びメモリアクセス等が終わるまで待った後、次の周期に実行される。
例えば、図7のHDLブロックモジュールが活性化された場合(コードの開始部分で活性化される)、ステート変数"pc"はステート0とセットされ、レジスタregs9及びregs10は、前処理機から入力された入力値(live-in value)"*_in_4"と初期化される。前記変数"pc"は、次に実行されるステートを示し、これは一般プロセッサーのプログラムカウンター(program counter)と類似である。
図7を参照すると、メモリロード(load)インストラクションは、二ステートにかけて実行される。即ち、ステート0でメモリサービスを要請し、ステート1でメモリステータス(status)をチェックしてメモリからデータを受領する。3番目のステートの命令は、足し算であって、これは4番目のステートの命令であるメモリ保存と並列的に実行される。これは、これらの命令が互いに独立的であるためである。前記メモリ保存インストラクションは、ステート3(4番目のステート)のメモリ初期化(initialization)とステート4のメモリステータスチェックとの二つのステートに分割されている。
最後に、ステート5でブランチ出力(outcome)信号は、"regs10"の値で決定され、終了信号(finish signal)は、コントロールモジュールであるトップモジュールに実行が終了されたことを知らせるためにセット(set)される。
次に、basic-block-by-basic-block方法のトップモジュールのHDLコード生成について説明する。
図8は、本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合のコントロールユニットとしてのトップモジュールのVerilogHDLコードを示す例示図である。トップモジュールは、本発明のHLL-to-HDL変換機によってブロックモジュールの制御と実行順序(schedule)を定めるために生成される。前記トップモジュールも固有の番号を有するステートらからなる有限状態機械の形式となっている。トップモジュールは、ブロックモジュールを活性化(enable)/非活性化(disable)させるために、enable_bbシグナルを使う。ブロックモジュールは、自分のHWID(hardware identification number)に相応するビットポジション(bit position)がセットされると活性化される。例えば、"enable_bb <= 4'b0001"は、4個のブロックモジュールがこれによって制御されて、ブロックモジュール0が活性化されることを示す。ブロックモジュールが活性化された場合、ブロックモジュールは、自分の前処理であるブロックモジュールからの入力値をもって自分のボディーコード(body code)を実行し、自分の次に実行されるブロックモジュールの入力値に該当する出力値をレジスタセットに保存(buffer)する。仮に、ブロックモジュールが条件付きブランチ(conditional branch)で完了される場合、実行完了時にサクセッサー(successor)信号を通じてブランチ出力をトップモジュールにリターンする。トップモジュールは、前記ブランチ出力を考えて、次に実行されるブロックモジュール(successor block module)を決定する。
図9は、本発明の一実施例によるbasic-block-by-basic-block方法を用いた場合のコントロールユニットとブロックモジュールのインスタンスを含むVerilogHDLコードのトップモジュールを示す例示図である。
トップモジュールの主要任務の二つとは、ブロックモジュールに入力(input)/出力(output)を割り当てることと、ブロックモジュールの実行順序(schedule)を決めることである。入力/出力信号を割り当てるために、トップモジュールは、ブロックモジュールのインスタンス(instance)を生成する。これは、qブロックモジュールは、モジュールを定義して直ちに使うことができなく、ただ構造的機能的の定義であるだけであるため、定義されたモジュールを使用するためには、instantiationが必要であるためである。
トップモジュールは、現在実行されたブロックモジュールの出力を次に実行されるブロックモジュールに入力で割り当てる。ブロックモジュールらの間の前処理機と後処理機(predecessor/successor)との間の関係は、RTL基本ブロックらの間の前処理機と後処理機との間の関係と同じである。
トップモジュールには、ブロックモジュールらの実行順序を決めるための制御部が具備される。前記制御部もFSM形式と構成され(implement)、従って、次のような機能をするようになる。即ち、作動活性化信号(enable signals)をセッティング(setting)することによって、ブロックモジュールを活性化/非活性化(enable/disable)させ、中断信号(interrupt signal)を生成して、プログラム(ソフトウェア)が実行終了を示すようにする。
図9を参照すると、前記説明したように、トップモジュールは、制御部を含めていて、変数を宣言し、ブロックモジュールに入力信号を割り当てて、ブロックモジュールインスタンスを生成することがわかる。また、前記制御部は、FSM形式を取っていることがわかる。
次に、本発明の一実施例によるfunction-by-function方法の高水準言語コードのサブルーチンのVerilogコード生成について説明する。
図10は、本発明の一実施例によるfunction-by-function方法を用いてC関数から生成されたデータパス及びコントロールユニットを示すブロックダイアグラムである。図6乃至8を参照して、先に説明した低水準IRコードの各々のベーシックブロックをHDLブロックモジュールに生成するbasic-block-by-basic-blockコード生成の場合、生成されたHDLコードを容易に制御してデバッグ(debug)することができる。しかし、basic-block-by-basic-block方法によって生成されたHDLコードは、各々のブロックモジュールにおける別個のレジスタファイルがインプリメントされなければならないため、多くのリソース(resource)を消費することになる。従って、ハードウェア関数のベーシックブロックの数が多くなる場合、生成されたHDLコードは、大きい数字のレジスタを必要とされることになり、これによってFPGAのような専用ハードウェアのリソースを枯渇されるようにすることができる。
従って、リソースの消費を減らすため、高水準言語コードの全体低水準IRコードをジェネラルデータパス(general datapath)に変換するfunction-by-function方法が活用される。即ち、全体高水準言語コードの関数は、ただ一つの一般レジスタファイル(global register file)を活用する。Cコード及びRTL制御フローが図10の(a)及び(b)に示されていて、コントロールユニットとデータパスを含むCコード及びRTL制御フローに該当する変換されたVerilogコードは、図10の(c)及び(d)に各々示されている。
図10の(c)及び(d)を参照すると、前記データパス及びコントロールユニットは、一つの有限状態機械(FSM、finite state machine)から構成されることがわかる。前記コントロールユニットは、有限状態機械のステート変数"nx_pc"値を変更させ、前記データパスは、有限状態機械の出力を生成するためのレジスタファイルと関数ユニット(functional unit)とを含めている。本発明によるHLL-to-HDL変換機は、一つのベーシックブロックを有限状態機械のステートブロックに変換させ、全てのベーシックブロックのステートは、グローバルデータパスを形状するために組み合わせられる。低水準IRコードのベーシックブロックは、一つのエントリ(entry)ポイントと一つのエグジット(exit)ポイントのみを有しているため、これに相応するHDLコードの一つのステートブロックも一つのエントリポイントとエグジットポイントとを有する。ステートブロックのエントリステートは、これに相応する低水準IRコードのベーシックブロックのナンバーと番号付けられる。このような番号付与の方式は、ブロックステートらの間の制御フローの変化をとても容易にできるようにする。例えば、前記コントロールユニットがベーシックブロック3のエントリコードへのジャンプを求める場合、これは、ステートブロック3にジャンプするといいことが即刻的にわかる。従って、ベーシックブロックの一番大きい番号がnである場合、nまでの数は、ブロックステートらのエントリステートの番号を付与するために使われ、数字n+1は、関数のエグジットステートブロックのために使われる。n+2以後の数は、ベーシックブロック内部のステートらのために使われる。前記データパスは、一般的ソフトウェアの関数と同様にリンクと被呼出者保存レジスタ(link and callee-saved registers)を開始時のスタックにプッシュ(push)し、完了(end)時にポッピング(popping)する。たとえ各々のハードウェア関数が別途のレジスタファイルを有している場合でも、プッシュとポッピングは、再帰的関数(recursive function)を支援するために依然として必要である。
データパス構成(implementation)の一例が図10(d)に示されている。ハードウェア関数のRTLコードは、2から6までの五個のベーシックブロックを含めている。リンクレジスタ"reg0"は、ステート2でスタックにプッシュ(push)され、ステートブロック5のステート16及びブロック6のステート19で再保存(restore)される。C関数はレジスタ集約的(register intensive)でないため、コンパイラは、呼出者保存レジスタ(caller-saved registers)の"reg7<= reg14"のみを実行するために使い、従って、リンクレジスタを除いたその他の被呼出者保存レジスタ(callee-saved register)を保存(save)する必要がない。Cの一般アレー(global array C)の基本アドレス(based address)は、ステート3で"reg9"に割り当てられて、ループのボディー計算(loop body calculation)は、ブロック4のステート4、12、13、14、15で実行された。図10(a)ループのアレー要素(array element)"c[i]"は、ステート図10(d)のステート4、12及び13で"reg7"に使われる。前記アレー要素は、ステート14で"reg14"に"reg14 <= reg7+reg14;"のように蓄積される。図10(a)ループのスレショルド(threshold)"n"は、一番目のアーギュメントレジスタである"reg12"に保存され、従って、前記コントロールユニットのステート15でブランチディシジョン(branch decision)を定めるために"reg8"に保存されたループの導入(induction)変数"i"は"successor[4] = (reg8 !=reg12);"のように"reg12"と比較される。
図10(c)を参照すると、生成されたコントロールユニットは、二つの"always"ブロックを含むことがわかる。即ち、ステート変数"pc"のためのものと組み合わせられた次のステート"nx_pc"の二ブロックを含むことがわかる。比較(comparison)及びジャンプ命令を除いたほとんどの低水準IRインストラクションは、データパスで実行される。ジャンプ命令は、ベーシックブロックらの間の制御フローを変更させる。即ち、ステート変数の"pc"値を変更させることである。従って、これはデータパスでなく、コントロールユニット内に具現される。比較命令は、ジャンプ命令を遂行するための条件を設定するために使われ、従って、ジャンプ命令と同様にデータパスから除外される。比較動作は、連続的割り当て(continuous assignment)を通じてチェックされ、従って、遂行による遅延を最小化することができる。例えば、ベーシックブロック2のレジスタ12の "reg12"値が0より大きいかにおける比較(comparison)チェックは、図10(c)のステートメント"assign successor[2]=(reg12 <= 0)"と具現される。制御フローがベーシックブロック2の最後に到達した場合、"successor[2]"の値は正しく設定され、これは、コントロールユニットによって実行ステートを変更するためのジャンプ命令を遂行するために使われる。図10のベーシックブロック2は、二つの継承者(successor)を有し、これは、ベーシックブロック3と6である。即ち、"10: nx_pc <= successor[2] ? 6 : 3;"ステートメントによってブランチの条件を充たす場合には、ベーシックブロック6に制御フローが進行され、そうでない場合、ベーシックブロック3が次の実行のために選択される。
関数の最後の部分に制御フローは、エグジットステートで進行され(図10(c)のステート7を参照)、実行中の関数のエグジット状態(status)を示すために、図10(c)の"assign finish = (pc==7);"のようなステートメントによって連続的割り当て(continuous assignment)で終了信号が設定される。このようなエグジットステートは、RTLベーシックブロックのエグジットと同一である。以後ステート変数は、図10(c)の"22: nx_pc<=22;"のようなステートメントによってストール状態(stall status)に変更される。
次に、エンベデッドマイクロプロセッサーのARMのようなメインコアとFPGAのような専用ハードウェアとの間の情報交換について説明する。
図11は、本発明の一実施例によるメインコアと専用ハードウェアとの間のコミュニケーションを示すブロックダイアグラムである。図11を参照すると、メインコアと専用ハードウェアは、メモリと活性化信号(enable signal)のような制御信号(control signal)とアーギュメント(argument)を通じて情報交換をすることがわかる。
次に、メインコアと専用ハードウェアとの間の呼出規約(calling convention)について説明する。
図12は、本発明の一実施例によるメインコアで実行されるソフトウェア部分コードと専用ハードウェアで実行されるハードウェア部分コードとの間のコーリングプロシージャー(calling procedure)を示す順序図である。図12を参照すると、開始点からメインコアでコンパイルされたソフトウェア部分コードが実行され(S1010)、前記ソフトウェア部分コードが専用ハードウェアのHWIP(Hardware Intellectual Property)の実行が必要か否かについて判断し(S1020)、専用ハードウェアの実行が必要である場合、作動活性化信号(enable signal)及びパラメーターを専用ハードウェアに伝送して専用ハードウェアを呼び出し(S1030)、活性化された専用ハードウェアは、呼び出されたHWIPを実行し(S1040)、実行完了後、実行結果でデータをアップデートし、実行完了について前記メインコアに通知し(S1050)、専用ハードウェアの実行完了を通知されたメインコアは、アップデートされたデータでソフトウェア部分コードの実行を再開(S1060)することがわかる。以後、それ以上の専用ハードウェアのHWIPの実行の必要ない場合、プログラムは終了される。
図13は、本発明の一実施例によるメインコアと専用ハードウェアとが疎結合である場合のソフトウェア部分コードとハードウェア部分コードとの間のクロスコールを支援するためにソフトウェア(SW)/ハードウェア(HW)インターフェース及びハードウェアコントローラを示すブロックダイアグラムである。
図13に示したように、メインコアと専用ハードウェアとが疎結合である場合のクロスコールを支援するために、二つの追加的ハードウェア構成要素(hardware components)のSW/HWインターフェース及びハードウェアコントローラが追加される。専用ハードウェアの前記SW/HWインターフェースモジュールは、クロスコールの時に一定のインターフェースが提供されるように、メインコアに該当するソフトウェアを包装(wrap)するために具現される。前記SW/HWインターフェースモジュールは、専用ハードウェアからメインコアへのコミュニケーションの細部事項を隠し、ハードウェアコントローラがその他のハードウェアコンポーネントと同一方式でソフトウェアであるメインコアと通信できるようにする。前記SW/HWのHWID(hardware identification number)は、図13に示したように、デフォルト(default)値0と設定されていて、SW/HWインターフェースは、HWIDの一つである。
前記ハードウェアコントローラは、前記SW/HWインターフェース及びハードウェア構成要素(components)を制御し、スケジューリング(scheduling)するために具現された。このため、前記ハードウェアコントローラはハードウェアモジュールとの間に共有される共有レジスタセットを含み、前記共有レジスタセットは四個のアーギュメントレジスタ、ハードウェアスタックポインタ及びリンクレジスタを含む。前記ハードウェアコントローラは、一回に一つのHWIPを活性化させ、活性化されたHWIPのみが全てのシステムリソースにアクセスでき、残りのモジュールらは、アクセスできないようにブロックされる(図13のHW module1を参照)。
図14は、本発明の一実施例によるメインコアと専用ハードウェアとが疎結合である場合のメインコアで実行されるソフトウェア部分コードと専用ハードウェアで実行されるハードウェア部分コードとの間のクロスコールを遂行するメカニズムを示す例示図である。
図14を参照すると、変換対象Cコードにプログラミングディレクティブが表示されていることがわかる。図14では"min 関数"と"for ループ"関数がHDLコードへの変換対象と表示されている。C-to-Cソース変換機は、図14のPreprocessed codeに示されたように、"for ループ"に該当する"hw_func_1"及び"min 関数"に該当する"hw_func_2"の二つのハードウェアサブルーチンを生成する。変換対象オリジナルコードのfor ループは、専用ハードウェアとのコミュニケーションを遂行するために、API ラッパ(wrapper)関数への呼び出し(call)と取り替えられた。このようなラッパファンクションの一番目のアーギュメントは、呼び出されたハードウェア関数のHWIDを示し(例えば、1の場合、ハードウェア関数 hw_func_1を示す)、残りのアーギュメントは、被呼出者に伝達される変数パラメーターを示す。ラッパ関数の細部事項は図15(d)に示されている。
図15は、本発明の一実施例によるメインコアと専用ハードウェアとが疎結合である場合の図14のメインコアと専用ハードウェアとの間のクロスコールの例示コードにおけるクロスコールインプリメンテーションを示す例示図である。
メインコアと専用ハードウェアとが疎結合である場合、専用ハードウェアは、メインコアと別途のシステムレジスタを使い、メインコアとインターラプト(interrupting)を通じてコミュニケーションする。また、前記メインコアは、コミュニケーションのためにラッパというAPIを使う。
図15を参照すると、図15(a)は、ソフトウェアのAPIラッパ関数がHWIP1(hardware intellectual property 1)、即ち、"hw_func_1"を呼び出す場合の実行フロー(execution flow)を示し、実行段階は(1)乃至(5)と番号が付与された。
段階(1)で、前記ラッパ関数は、HWIP1の最初の四個のアーギュメント(a、 b、 c及びd)をアーギュメントレジスタに保存し、最後のアーギュメントeを自分のスタックに保存し、前記SW/HWインターフェースを通じて専用ハードウェアのハードウェアコントローラのリンクレジスタにリターンアドレスを保存する。以後、前記ラッパ関数はHWIP1の実行のために、活性化信号(enable signal)である"HWID=1"をコントローラに伝送する。
段階(2)で、前記ハードウェアコントローラは、HWIP1モジュールを活性化させる。HWIP1の実行開始点で、HWIP1は、前記ハードウェアコントローラのスタックポインタ値を読み込み、自分のスタックスペースを割り当てる。HWIP1は、前記ハードウェアコントローラのリンクレジスタから自分のリターンアドレスを自分のスタックに保存し、自分のボディーコードの実行を始める。
段階(3)で、HWIP1の実行が完了された場合、HWIP1は、前記スタックスペースを再保存して、リターンアドレスと一緒に終了信号(finish signal)を前記ハードウェアコントローラに伝送する。
段階(4)で、前記ハードウェアコントローラは、前記ラッパ関数を活性化させるために前記SW/HWインターフェースを通じてメインコアにインターラプトシグナルを伝送する。
段階(5)で、HWIP1の実行完了をラッパ関数に知らせるためにインターラプトハンドラーは、一般終了変数を設定し、前記ラッパ関数は終了される。
図15(d)は、前記ラッパ関数の擬似コード(pseudo code)を示す。ハードウェア関数を呼び出した(call)後、前記ラッパ関数は、呼び出されたハードウェア関数の実行完了(ソフトウェアがハードウェアを呼び出した場合)または呼び出されたハードウェアが他のソフトウェア関数を呼び出す(ソフトウェアがハードウェアを呼び出し、またハードウェアがソフトウェアを呼び出す場合)ことを待つ。呼び出されたハードウェア関数がソフトウェアにリターンする場合、前記ラッパは終了し、ハードウェア関数が他のソフトウェア関数を呼び出す場合、前記ラッパは、呼び出しを手伝う。
ハードウェア関数からのソフトウェア関数への呼び出しも反対の場合と類似である。図14の"hw_func_1"が"max"関数を呼び出す場合をみてみると、実行シーケンスは、図15(b)に示されていて、実行順序は、次のようである。
(1)HWIP1が"max"関数の最初の四個のアーギュメントの"a、b、c及びd"をハードウェアコントローラのアーギュメントレジスタに保存し、最後のアーギュメントの"e"を自分のスタックの底(bottom)に保存する。また、HWIP1は、前記ハードウェアコントローラのリンクレジスタに自分のリターンステートを保存する。以後、HWIP1は、hwid=0と一緒に"max"関数の実際アドレスをsw_addr信号で前記ハードウェアコントローラに伝送し、この時、 呼び出される関数のためにhwid=0も一緒に伝送する。
(2)前記ハードウェアコントローラは、HWIP1モジュールを非活性化(disable)させ、"max"関数呼び出しのためにSW/HWインターフェースを通じてメインコアをインターラプトする。
(3)インターラプトハンドラーは、グローバル変数を通じてラッパ関数に前記呼び出し(call)について通知する(図15(d)のhw_calledを参照)。前記ラッパ関数は、前記メインコアのスタックポインタをアップデートし、アーギュメントレジスタを前記ハードウェアコントローラの値でアップデートし、自分のローカルスタックに前記HWIP1のリターンステートを 保存し、前記"max"関数を呼び出す。
(4)前記"max"関数の実行が完了されると、前記ラッパ関数は、前記"max"関数のリターン値と終了信号を前記ハードウェアコントローラに伝送して、前記SW/HWインターフェースを通じてリターンステートを再保存する。
(5)前記ハードウェアコントローラは、リンクレジスタからリターンステートを提供することによってHWIP1を活性化させる。
図15(c)は、図14のHWIP1の"hw_func_1"がHWIP2の"hw_func_2"を呼び出す場合を示し、呼び出しプロセスは次のようである。
(1)HWIP1は、前記ハードウェアコントローラのアーギュメントレジスタとスタックにアーギュメントを保存し、前記ハードウェアコントローラのリンクレジスタにリターンステートを保存する。以後、HWIP1は、呼び出し対象関数を示す"hwid=2"と一緒に呼び出し信号(call signal)を前記ハードウェアコントローラに伝送する。
(2)前記ハードウェアコントローラは、HWIP2を活性化させ、HWIP2は、HWIP1のリターンステートを自分のスタックに保存する。
(3)HWIP2の実行完了の時、HWIP2は、呼び出した関数のHWIP1のリターンステートと一緒に終了信号を前記ハードウェアコントローラに伝送する。
(4)前記ハードウェアコントローラは、HWIP1をまた活性化させ、HWIP1は、自分の元のステートで実行を再開する。
次に、メインコアと専用ハードウェアとが密結合(tight coupling)である場合のメインコアと専用ハードウェア との間の呼出規約について説明する。
図16は、本発明の一実施例によるメインコアと専用ハードウェアとが密結合である場合のメインコアと専用ハードウェアとの間のコミュニケーションインターフェースを示すブロックダイアグラムである。
図16を参照すると、前記メインコアと前記専用ハードウェアのHWIPらの間のコミュニケーションは、インターコネクションネットワーク(interconnection network)を通じてなることがわかる。前記インターコネクションネットワークは、バスシステム及び前記バスシステムを制御するためのハードウェアコントローラを含む。全てのHWIP及びメインコアは、前記バスシステムを通じて他のコンポーネントが自分らのレジスタファイルを読み込めるように構成される。パブリックレジスタ(public register)は、スタックポインタ、リンクレジスタ、アーギュメントレジスタ及び関数(function)リターンレジスタを含む。従って、前記ハードウェアコントローラ内に別途のシステムレジスタセットを必要としない。
前記メインコアのインターフェースは、前記ハードウェアコントローラがインターラプト信号を使うかわりに、直接制御信号を伝送したり、受信できるようにしていて、前記メインコアとHWIPらは、all-to-allネットワークトポロジー(topology)によって連結されていないため、一つのコンポーネントが他のコンポーネントと通信することを求める場合、前記ハードウェアコントローラを通じて、通信(communicate)すべきである。前記ハードウェアコントローラは、前記メインコアとHWIPの呼び出し制御信号(call control signal)を検査(examine)し、決定によって、呼び出しシーケンス(calling sequence)に基づいて、対象となるコンポーネントを活性化させ、コンポーネントがバスにデータを伝送できるようにする。メインコア乃至HWIPが呼び出しを求める場合、呼び出し制御信号及び被呼出者のアドレスを前記ハードウェアコントローラに伝送し、前記ハードウェアコントローラは呼び出し対象を確認して、呼出者を非活性化させ、被呼出者を活性化させ、呼出者のレジスタをバスが読み込めるようにする。被呼出者が呼出者にリターンする場合、被呼出者も同様に終了信号(finish signal)とリターンアドレスを前記ハードウェアコントローラに伝送する。前記ハードウェアコントローラは、リターンアドレスをチェックして呼出者を確認し、被呼出者のリターンデータをバスが読み込めるようにし、被呼出者を非活性化させて、呼出者をまた活性化させる。
図17及び18は、本発明の一実施例によるメインコアと専用ハードウェアとが密結合である場合の図16のクロスコールインプリメンテーションを示すブロックダイアグラムである。
コミュニケーションオーバーヘッドを減らすために、前記メインコアのインターフェースは、前記専用ハードウェアとよりよい相互協力ができるようにもディファイ(modify)される。即ち、software-to-hardcore呼び出しを遂行するために中間(intermediate)段階を減少させるために、"hcall"と呼ばれる特殊命令(special instruction)が前記メインコアのISAに加えられる。コンパイリングする場合、 メインコンパイラは、被呼出者がハードウェア部分コードを具現されるか、ソフトウェア部分コードと具現されるかをチェックし、ハードウェア関数である場合、メインコンパイラは、一般ファンクションコールインストラクションのかわりに"hcall"インストラクションを自動的に生成する。"hcall" インストラクションの使用は、前記メインコアがsoftware-to-hardwareクロスコールを一つの機械命令(machine instruction)のきで直接遂行できるようにする。インストラクションセットを修正(modify)しなければ、前記メインコアは、専用ハードウェアとの通信(communicate)のために、図14のラッパ関数のような中間API関数を使わなければならなく、この場合、高いオーバーヘッドを免れない。
図17を参照すると、本発明によるsoftware-to-hardware cross call遂行は、(1)乃至(6)の6段階からなることがわかる。
(1)"hcall"インストラクションが実行段階である場合、"hcall"インストラクションは、メインコアパイプラインをストール(stall)するために"nx_pc_unready"信号を開始されるように(trigger)する。
(2)前記信号は、フェッチ(Fetch)コントローラコンポーネントがインストラクションフェッチング(fetching)プロセスをストール(stall)するようにし、前記メインコアが"hcall"インストラクション以後の全てのインストラクションを前記パイプラインとインストラクションキュー(instruction queue)からフラッシュ(flush)するようにする。
(3)前記"hcall"が、write back段階で実行される場合、呼び出しについて通知するために、"hw_enable"信号が被呼出者(callee)のHWIDと一緒にハードウェアコントローラに伝送され、また、一般的呼び出しのようにおリターンアドレスのための次の実行アドレスがリンクレジスタに保存される。
(4)ハードウェア側から、前記ハードウェアコントローラは、伝送されたHWID値に基づいて"hw_enable"信号及びコントロールシグナル"called"を用いて呼び出されたHWIP1を活性化させる。
(5)活性化されたHWIP1は、メインコアのスタックポインタ、アーギュメントレジスタ、リンクレジスタなどの出力値(output value)をこれらに該当する自分のレジスタにコピーし、実行を開始する。HWIP1の実行完了の時、HWIP1は、終了信号を前記ハードウェアコントローラに伝送し、前記ハードウェアコントローラは、リンクレジスタ内のHWIP1のリターンアドレスをチェックして呼出者(caller)が前記メインコアであることを確認する。
(6)確認後、前記メインコントローラは、被呼出者(callee)のHWIP1の終了ステータス(status)を知らせるために"hw_fin"信号を伝送する。
前記メインコアは、フェッチングプロセスを活性化させ、スタックポインタ、リンク及びリターンレジスタなどを被呼出者の値で調整(set)する。以後、前記メインコアは、リンクレジスタのハードウェア関数のリターンアドレスから実行を再開する。
図18を参照すると、本発明によるhardware-to-software cross call遂行は、(1)乃至(5)の5段階からなることがわかる。
(1)HWIP1は、呼び出し信号(call signal)及び呼び出し対象関数のアドレスを説明する"target_addr"信号を含む制御信号をハードウェアコントローラに伝送する。また、HWIP1は、自分のリンクレジスタに自分の次のステートのアドレスを保存し、アーギュメントを自分のアーギュメントレジスタとスタックスペースに保存する。
(2)前記ハードウェアコントローラは、"target_addr"信号を検査して呼び出される関数がメインコアのソフトウェア関数であることを確認し、ハードウェア関数からの呼び出しについて前記メインコアに通知するために"sw_enable"信号を伝送する。呼び出された場合、呼び出されたソフトウェア被呼出者(callee)を実行するため、前記メインコアは、呼出者(caller)のデータをバスを通じて自分のレジスタにコピーし、自分のプログラムカウンターレジスタを"target_addr"信号値と設定し、フェッチングインストラクションを活性化させる。
(3)被呼出者の実行完了の時、前記メインコアは、呼出者のHWIP1にリターンする。呼び出したハードウェア関数(function)にリターンする場合、前記メインコアは、一般的ソフトウェアリターンと違って、対象アドレスにジャンプしないで、フェッチングインストラクションをストール(stall)し、パイプラインをフラッシュするために"nx_pc_unready"信号を設定する。
(4)Write back段階にハードウェアリターンインストラクションは、"sw_fin"信号を前記ハードウェアコントローラに伝送する。
(5)前記ハードウェアコントローラは、リンクレジスタ値を検査して、呼出者(caller)がHWIP1であることを確認し、"hw_enable"信号でHWIP1を活性化させる。再活性化された場合、HWIP1は、被呼出者(callee)のリターン値を読み込んだ後、リンクレジスタ内の自分のステート変数をアップデートし、該当ステートから実行を再開する。
以上、本発明の実施例による高水準言語コードのHDLコードへの変換方法及びシステムについて説明したが、本発明は、前記実施例に制限されず、多くの変型が本発明の思想内に本発明の属する技術分野で通常の知識を有した者によって可能となることは勿論のことである。

Claims (43)

  1. (1)高水準言語コードの変換対象部分(translation-targeted section)をプログラミングディレクティブ(programming directive)を用いて表示する段階;
    (2)前記高水準言語コードを記変換対象部分をサブルーチンとして含むハードウェア部分コード及び前記高水準言語コードの残り部分と前記変換対象部分が前記サブルーチンを呼び出すためのラッパー(wrapper)に振り替えられた部分を含むソフトウェア部分コードに分割(partition)する段階;
    (3)前記ソフトウェア部分コード及びハードウェア部分コードをメインコンパイラによって前記メインコンパイラのターゲットアセンブリコード生成の直前段階の低水準IR(Intermediate Representation)コードにコンパイルし、前記ハードウェア部分コードに対応する前記低水準IRコードをHLL-to-HDL(High-level language code to hardware description language)変換機によってHDLコードに変換し、前記ソフトウェア部分コードに対応する前記低水準IRコードを実行できるコードにコンパイルする段階;及び
    (4)前記ソフトウェア部分コードは、メインコアで実行されて、前記HDLコードは、専用ハードウェアで実行される段階とを含む高水準言語コードのHDLコードへの変換方法。
  2. 前記(2)段階の前記ハードウェア部分コードは、前記高水準言語コードの一つ以上のサブルーチン(subroutine)/関数(function)を含み、前記ソフトウェア部分コードは、前記ハードウェア部分コードへのサブルーチン/関数呼び出し(call)ステートメント(statement)または呼び出し命令を含むことを特徴とする請求項1記載の高水準言語コードのHDLコードへの変換方法。
  3. 前記(3)段階は:
    前記ソフトウェア部分コード及びハードウェア部分コードを前記メインコンパイラによって実行できるコードにコンパイルする段階;
    前記メインコンパイラリンカ(linker)によって一定のデータオフセット(constant data offset)を含むリンキング(linking)ログファイルを生成する段階;
    前記メインコンパイラによって実行できるソフトウェアコードの全てのソフトウェア関数及び変数の住所を含むシンボルテーブル(symbol table)を生成する段階;及び
    前記HLL-to-HDL変換機によって前記リンキングログファイル及びシンボルテーブルを参照して、前記ハードウェア部分コードのHDLコードを生成する段階を含むことを特徴とする請求項1に記載の高水準言語コードのHDLコードへの変換方法。
  4. 前記HLL-to-HDL変換機は、前記ソフトウェア部分コードに定義されたソフトウェアの関数及び変数のアドレスレゾリューション(resolution)のために、前記リンキングログファイル及びシンボルテーブルを活用し、前記ハードウェア部分コードのストリングコンスタン(String constant)のアドレスレゾリューション(address resolution)のために、前記リンキングログファイル及びシンボルテーブルを活用することを特徴とする請求項3に記載の高水準言語コードのHDLコードへの変換方法。
  5. 前記高水準言語コードのサブルーチン(subroutine)/関数(function)から生成された前記HDLコードは:
    ターゲットアセンブリコード生成と同一方式で前記低水準IRコードからHDLにマッピング(mapping)して生成されるデータパス(datapath);及び
    記データパスを制御する制御ユニット(control unit)を含み
    前記制御ユニット(control unit)は前記低水準IRコードの複数のベーシックブロック(basic blocks)の間のコントロールフロー情報(control flow information)に基づいて、前記HLL-to-HDL(High-level language code to hardware description language)変換機のHDLコード生成器(HDL code generator)によって生成されることを特徴とする請求項に記載の高水準言語コードのHDLコードへの変換方法。
  6. 前記高水準言語コードのサブルーチン/関数のHDLへの変換方法は、
    生成された前記HDLコードが一つ以上のブロックモジュールを前記データパスとして含み、トップモジュールを前記制御ユニットとして含むbasic-block-by-basic-block生成方法または、
    生成された前記HDLコードが前記データパス及び前記制御ユニットを全て含む一つのモジュールを含むfunction-by-function生成方法の中でいずれか一つであることを特徴とする請求項に記載の高水準言語コードのHDLコードへの変換方法。
  7. 前記basic-block-by-basic-block生成方法の前記一つ以上のブロックモジュールは、前記低水準IRコードのベーシックブロック(basic blocks)と同一の機能を遂行し、
    前記トップモジュールは、前記一つ以上のブロックモジュールのインスタンス(instances)を生成し、前記一つ以上のブロックモジュールを活性化(enabling)/非活性化(disabling)によって実行順序を定めることを特徴とする請求項に記載の高水準言語コードのHDLコードへの変換方法。
  8. 前記basic-block-by-basic-block生成方法の前記ブロックモジュール及び前記トップモジュールは、有限状態機械(Finite State Machine)の形態であって、一つのブロックモジュールは、前記低水準IRコードのベーシックブロック内部の連続的(consecutive)低水準IRインストラクション(instructions)の一つのシーケンスを遂行する有限状態機械のステート(state)セット(set)であって、
    有限状態機械のステートは、前記低水準IRインストラクションの遅延推定値(delay estimation)及びdata/control依存性に基づいたことを特徴とする請求項に記載の高水準言語コードのHDLコードへの変換方法。
  9. 前記basic-block-by-basic-block生成方法の前記トップモジュールは、前記一つ以上のブロックモジュールの中の一つまたはその以上のブロックモジュールが動作できるようにすることが可能であって、前記ブロックモジュールの中の一つまたはその以上のブロックモジュールに入力を割り当てて作動させた後、作動された前記一つまたはその以上のブロックモジュールの動作が終わるまで待ち、作動された前記一つまたはその以上のブロックモジュールは、割り当てられた入力をもって自分のコードを実行し、自分のレジスタセットまたは他のブロックモジュールと共有するレジスタセットに出力を保存(buffer)した後、前記トップモジュールに制御フロー出力(Control Flow Outcome)と一緒にレジスタセットに保存された前記出力を提供(return)し、前記トップモジュールは、前記制御フロー出力に基づき、前記一つ以上のブロックモジュールの中で次に実行されるブロックモジュールを決定することを特徴とする請求項に記載の高水準言語コードのHDLコードへの変換方法。
  10. 前記function-by-function生成方法の前記データパス及びハードウェア関数の制御ユニットは、一つのHDLモジュールに含まれ、一つの有限状態機械から構成(implement)され、
    前記データパスは、前記有限状態機械の出力信号(output signals)を生成し、前記制御ユニットは、前記有限状態機械のステート変化(transition)を制御し、
    前記データパスは、高水準言語のサブルーチン/関数における全てのベーシックブロックから生成され、前記高水準言語コードのサブルーチン/関数のベーシックブロックの低水準IRインストラクションから生成された有限状態機械の一つのセットであって、
    有限状態機械のステートは、前記低水準IRインストラクションの遅延推定値(delay estimation)及びdata/control依存性に基づくことを特徴とする請求項に記載の高水準言語コードのHDLコードへの変換方法。
  11. 前記function-by-function生成方法の前記制御ユニットは、高水準言語コードのサブルーチン/関数の制御フロー情報(control flow information)に基づき、前記有限状態機械のステートを変化させることによって、前記データパスを制御することを特徴とする請求項10に記載の高水準言語コードのHDLコードへの変換方法。
  12. 前記(3)段階の前記高水準言語コードから生成された前記HDLコードは、前記コンパイルされたソフトウェア部分コードとスタック(stack)を含むメモリ領域を共有して前記メインコアのソフトウェアスタックレイアウトに従い、
    共有する前記メモリ領域は、スピルドバリュー(spilled value)の保存、レジスタファイル及びリターンアドレスの保存、前記ハードウェア部分コードとコンパイルされた前記ソフトウェア部分コードの間の関数アーギュメント(argument)の伝達に使われることを特徴とする請求項2に記載の高水準言語コードのHDLコードへの変換方法。
  13. 前記(4)段階の専用ハードウェアは、前記高水準言語コードのサブルーチン/関数から各々生成され:
    前記HLL-to-HDL変換機によってHWID(Hardware identification number、ハードウェア識別番号)が付与されたHWIP(Hardware Intellectual Properties)セット;及び
    前記HWIPを制御するハードウェアコントローラ(hardware controller)を含み、
    前記HWIDは、前記ソフトウェア部分コードと前記ハードウェア部分コードのシンボルテーブルに記述されたターゲットアドレスまたは前記ターゲットアドレスから再計算された固有番号であることを特徴とする請求項1に記載の高水準言語コードのHDLコードへの変換方法。
  14. 前記ハードウェアコントローラは、前記HWIP前記メインコアとの間にアーギュメント(arguments)を伝達することによって、前記HWIP制御し、前記HWIPと前記メインコアとの間の呼び出し制御信号(calling control signals)を通じて前記HWIPメインコアの実行順序を制御し、
    前記ハードウェアコントローラは、前記HWIP前記メインコアで実行されるソフトウェアとの間の呼び出しシーケンスによって一つ以上のHWIPまたはメインコアを活性化させ、
    前記メインコアが前記ハードウェアコントローラとして使えられることを特徴とする請求項13に記載の高水準言語コードのHDLコードへの変換方法。
  15. 前記(4)段階の前記メインコアと前記専用ハードウェアとの間の通信インターフェースは、
    前記メインコアと前記専用ハードウェアが緩く(loosely)連結(coupled)され、前記専用ハードウェアが前記メインコアとインタラプティング(interrupting)によって通信する疎結合(loose coupling)、または、
    前記メインコアと前記専用ハードウェアが固く(tightly)連結され、前記専用ハードウェアと前記メインコアが制御信号を互いに直接取り交わすことのできる密結合(tight coupling)であることを特徴とする請求項1に記載の高水準言語コードのHDLコードへの変換方法。
  16. 前記(4)段階は:
    コンパイルされた前記ソフトウェア部分コードを前記メインコアで実行する段階;
    コンパイルされた記ソフトウェア部分コードが実行される間に一つ以上の前記HWIPの実行が必要である場合、前記メインコアによって前記専用ハードウェアの前記ハードウェアコントローラを活性化させ、呼び出しデータを伝送する段階;
    前記専用ハードウェアの前記ハードウェアコントローラによって対象となる一つ以上の前記HWIPを活性化させて呼び出しデータを伝送する段階;
    活性化された前記HWIPのコードを実行し、実行結果をメモリとシステムレジスタとに保存し、活性化された前記一つ以上のHWIPの実行終了を前記ハードウェアコントローラに通知する段階;
    前記ハードウェアコントローラによって活性化された前記一つ以上のHWIPの実行終了を前記メインコアに通知する段階;及び
    前記メインコアによって前記メモリとシステムレジスタとに保存された実行結果をもって前記コンパイルされたソフトウェア部分コードを引き続き実行する段階を含むことを特徴とする請求項13に記載の高水準言語コードのHDLコードへの変換方法。
  17. 前記メインコアから前記専用ハードウェアに伝送される前記呼び出しデータは:
    スタックポインタ、リンクレジスタ、アーギュメントレジスタ及び前記メインコアに依存する他のレジスタを含むシステムレジスタ;及び
    対象となる一つ以上の前記HWIPのHWID及び活性信号(enable signal)を含む制御信号を含むことを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  18. 対象となる一つ以上の前記HWIPのアーギュメントは、前記メインコアからシステムレジスタのアーギュメント及び前記HDLコードとコンパイルされた前記ソフトウェア部分コードとの間に共有するスタックスペースを用いて伝送されることを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  19. 前記(4)段階の前記メインコアは、
    前記メインコアと前記専用ハードウェアとが密結合(tight coupling)である場合には、前記メインコアのISA(Instruction Set Architecture)の専用インストラクションを用いて前記専用ハードウェアと通信したり、制御信号を伝送し、
    前記メインコアと前記専用ハードウェアとが疎結合(loose coupling)である場合には、通信機能を遂行するAPI関数媒介体を呼び出す(calling)ことによって、前記専用ハードウェアと通信したり、制御信号を伝送することを特徴とする請求項1に記載の高水準言語コードのHDLコードへの変換方法。
  20. 前記メインコアと前記専用ハードウェアとが疎結合である場合、前記ハードウェアコントローラを活性化する場合、前記メインコアは、自分のレジスタ値でハードウェアのレジスタをアップデートすることを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  21. 前記ハードウェアコントローラによって前記専用ハードウェアのHWIPセットの中のいずれか一つが活性化される場合、活性化された前記HWIPは、
    前記メインコアと前記専用ハードウェアとが密結合である場合には、前記メインコアからデータを直接読み込み、
    前記メインコアと前記専用ハードウェアとが疎結合である場合には、前記ハードウェアコントローラのレジスタ値を読み込むことを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  22. 前記専用ハードウェアの前記ハードウェアコントローラは、活性化された前記HWIPの実行完了において、
    前記メインコアと前記専用ハードウェアとが疎結合である場合には、前記メインコアをインタラプティング(interrupting)することによって前記メインコアに通知し、
    前記メインコアと前記専用ハードウェアとが密結合である場合には、制御信号を前記メインコアに伝送することによって、前記メインコアに通知することを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  23. 前記専用ハードウェアの前記HWIPは、前記メインコアで実行中のコンパイルされた前記ソフトウェア部分コードへのクロスコール(cross call)を遂行することが可能であって、
    前記クロスコール遂行は:
    前記HWIPによって前記ハードウェアコントローラにコンパイルされた前記ソフトウェアを呼び出す(call)必要があることを知らせるための呼び出しデータ(calling data)を準備し、制御信号(control signal)を伝送する段階;
    前記ハードウェアコントローラによって前記メインコアに前記クロスコールについて通知する段階;
    前記メインコアによって前記呼び出しデータを前記メインコアのレジスタにコピーし、 呼び出された前記コンパイルされたソフトウェア部分コードのコードを実行し、呼び出された前記コンパイルされたソフトウェア部分コードの実行が完了される場合、これを前記ハードウェアコントローラに通知する段階;
    前記ハードウェアコントローラによって呼び出された前記コンパイルされたソフトウェア部分コードの実行完了について、呼び出した前記HWIPに通知する段階;及び
    前記HWIPによって呼び出された前記コンパイルされたソフトウェア部分コードの実行結果をもって自分のコードを引き続き実行する段階を含むことを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  24. 前記HWIPから前記制御信号(control signal)を受信する場合、前記ハードウェアコントローラは、
    前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記メインコアをインタラプティング(interrupting)することによって、前記クロスコールについて前記メインコアに通知し、
    前記メインコアと前記ハードウェアコントローラとが密結合の場合には、前記制御信号を前記メインコアに直接伝送することによって、前記クロスコールについて前記メインコアに通知することを特徴とする請求項23に記載の高水準言語コードのHDLコードへの変換方法。
  25. 呼び出された前記コンパイルされたソフトウェア部分コードの実行が完了されると、
    前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記メインコアは、前記ハードウェアコントローラのシステムレジスタ値で自分のレジスタをアップデートし、前記ソフトウェア部分コードのリターン値及びリターンアドレスを前記ハードウェアコントローラのレジスタに記入(write)し、
    前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記メインコアは、呼び出す前記HWIPから入力値を直接読み込むことを特徴とする請求項23に記載の高水準言語コードのHDLコードへの変換方法。
  26. 前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記HWIPは、呼び出された前記コンパイルされたソフトウェア部分コードのリターンデータ及びリターンアドレスを前記ハードウェアコントローラのシステムレジスタから読み込み、
    前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記HWIPは、前記コンパイルされたソフトウェア部分コードのリターンデータ及びリターンアドレスを前記メインコアのレジスタ値から直接読み込むことを特徴とする請求項23に記載の高水準言語コードのHDLコードへの変換方法。
  27. 前記専用ハードウェアのいずれか一つの前記HWIPは、他のHWIPまたは自分自身への呼び出し(call)が遂行可能であって、
    前記呼び出しは:
    前記いずれか一つのHWIPによって前記ハードウェアコントローラに呼び出す(call)必要があることを知らせるための呼び出しデータ(calling data)を準備し、制御信号(control signal)を伝送する段階;
    前記ハードウェアコントローラによって呼び出しアドレスを検査(examining)し、前記他のHWIPまたは前記いずれか一つのHWIPを活性化する段階;
    前記他のHWIPまたは前記いずれか一つのHWIPによって自分のレジスタに前記呼び出しデータ(calling data)をコピーし、自分のコードを実行し、実行完了の時、これを前記ハードウェアコントローラに通知する段階;
    前記ハードウェアコントローラによって呼び出された前記他のHWIPまたは前記いずれか一つのHWIPの実行完了について前記いずれか一つのHWIPに通知する段階;及び
    前記いずれか一つのHWIPによって呼び出された前記他のHWIPまたは前記いずれか一つのHWIPの実行結果をもって自分のコードを引き続き実行する段階を含むことを特徴とする請求項16に記載の高水準言語コードのHDLコードへの変換方法。
  28. 前記呼び出しデータは:
    スタックポインタ、リンクレジスタ、アーギュメントレジスタ、リターンレジスタを含むシステムレジスタ;及び
    呼び出しの対象の前記他のHWIPまたは自分自身のアドレス及び活性信号(enable signal)を含む制御信号を含み、
    前記メインコアと前記ハードウェアコントローラとが疎結合されていて、全ての前記HWIPが前記ハードウェアコントローラの内部のシステムレジスタセットを共有する場合には、呼び出しの対象の前記他のHWIPまたは前記いずれか一つのHWIPを呼び出す前に、前記いずれか一つのHWIPによって前記呼び出しデータで前記ハードウェアコントローラの内部の共有する前記システムレジスタをアップデートすることを特徴とする請求項27に記載の高水準言語コードのHDLコードへの変換方法。
  29. 前記他のHWIPのアーギュメントは、アーギュメントレジスタ及び前記複数のHWIPらの間に共有するスタックスペースを通じて前記いずれか一つのレジスタから伝送されることを特徴とする請求項27に記載の高水準言語コードのHDLコードへの変換方法。
  30. 前記メインコアと前記ハードウェアコントローラとが疎結合である場合には、前記他のHWIPは活性化された場合、前記ハードウェアコントローラの内部のシステムレジスタで自分のレジスタをアップデートし、
    前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記他のHWIPは活性化された場合、前記いずれか一つのHWIPのレジスタ値を直接読み込むことを特徴とする請求項27に記載の高水準言語コードのHDLコードへの変換方法。
  31. 前記メインコアと前記ハードウェアコントローラとが疎結合されていて、全ての前記HWIPが前記ハードウェアコントローラの内部のシステムレジスタセットを共有する場合には、前記他のHWIPは実行完了の時、自分のリターン値(value)及びリターンアドレスを前記ハードウェアコントローラの内部のレジスタに記入(write)することを特徴とする請求項27に記載の高水準言語コードのHDLコードへの変換方法。
  32. 前記メインコアと前記ハードウェアコントローラとが疎結合されていて、全ての前記HWIPが前記ハードウェアコントローラの内部のシステムレジスタセットを共有する場合には、前記いずれか一つのHWIPは、前記他のHWIPのリターン値(value)及びリターンアドレスを前記ハードウェアコントローラの内部のレジスタから読み込み、
    前記メインコアと前記ハードウェアコントローラとが密結合である場合には、前記いずれか一つのHWIPは、前記他のHWIPのリターン値(value)及びリターンアドレスを前記他のHWIPのレジスタから直接読み込むことを特徴とする請求項27に記載の高水準言語コードのHDLコードへの変換方法。
  33. プログラミングディレクティブと表示された(marked with programming directive)変換対象高水準言語コードから前記プログラミングディレクティブを読み込んだ後、前記変換対象高水準言語コードを前記プログラミングディレクティブが表示された部分をサブルーチンとして含むハードウェア部分コードと前記高水準言語コードの前記プログラミングディレクティブが表示された部分を除外した残り部分と前記プログラミングディレクティブが表示された部分が前記サブルーチンを呼び出すためのラッパーに振り替えられた部分を含むソフトウェア部分コードとに分割するHLL-to-HLLソース変換機;
    前記ソフトウェア部分コード及びハードウェア部分コードをコンパイルするメインコンパイラ;
    前記ハードウェア部分コードをデータパス及びコントロールユニットを含むHDLコードに変換するHLL-to-HDL変換機;
    コンパイルされた前記ソフトウェア部分コードを実行するメインコア;及び
    前記メインコアと連動して変換された前記HDLコードを実行する専用ハードウェアを含みながら
    前記HLL-to-HDL変換機は、フロントエンド(front end)及びミドルエンド(middle end)とHDLバックエンド(backend)とを含み、
    前記HLL-to-HDL変換機のフロントエンド(front end)及びミドルエンド(middle end)は前記メインコンパイラのフロントエンド(front end)及びミドルエンド(middle end)と同一で、前記HLL-to-HDL変換機は自然的に(natuarally)HDLコード生成の過程でコンパイルされた前記ソフトウェア部分コードのリンケージ規約(linkage convention)に従い、
    前記HDLバックエンドは:
    シンタックス(syntax)がHDLシンタックスとセマンティクス(semantics)に従い、低水準IRコードをHDLにマッピングするマシン記述ファイル(machine description file);及び
    HDLコードジェネレーター(generator)を含むことを特徴とする高水準言語コードのHDLコードへの変換システム 。
  34. 前記HLL-to-HDL変換機の前記フロントエンド及びミドルエンドは、前記ハードウェア部分コードを低水準IRコードに変換し、前記HLL-to-HDL変換機の前記HDLバックエンドは、前記低水準IRコードをHDLコードに変換することを特徴とする請求項33に記載の高水準言語コードのHDLコードへの変換システム 。
  35. 前記高水準言語コードのサブルーチン/関数に該当する前記HDLコードの生成は、
    生成された前記HDLコードが一つ以上のブロックモジュールを前記データパスとして含み、トップモジュールを前記コントロールユニットとして含むbasic-block-by-basic-block生成方法、または
    生成された前記HDLコードが前記データパス及び前記コントロールユニットを全て含む一つのモジュールを含むfunction-by-function生成方法の中のいずれか一つであることを特徴とする請求項33に記載の高水準言語コードのHDLコードへの変換システム 。
  36. 前記HDLコードのハードウェア関数の前記データパスは、前記HDLバックエンドのマシン記述ファイルによって前記低水準IRコードから直接生成され、
    前記HDLコードのハードウェア関数のコントロールユニットは、前記HDLコードジェネレーターによって前記低水準IRコードの複数のベーシックブロックらの間のコントロール依存性に基づいて生成され、
    前記データパス及び前記コントロールユニットは、有限状態機械(FSM)の形態であることを特徴とする請求項33に記載の高水準言語コードのHDLコードへの変換システム 。
  37. 前記basic-block-by-basic-block生成方法の場合、
    前記ブロックモジュールは、連続的な低水準IRコードインストラクションのシーケンスから生成された有限状態機械のセット(set)であって、
    前記有限状態機械のステート(state)分割は、前記低水準IRコードインストラクションの遅延推定値及びデータ/コントロール依存性に基づいてなって、
    前記ブロックモジュールは、前記低水準IRコードのベーシックブロックと同一機能を遂行し、
    前記トップモジュールは、前記ブロックモジュールを活性化/非活性化さて、前記ブロックモジュールの実行順序を定めることを特徴とする請求項35に記載の高水準言語コードのHDLコードへの変換システム 。
  38. 前記basic-block-by-basic-block生成方法の場合、
    前記トップモジュールが一回に一つまたはその以上のブロックモジュールが動作するように、前記一つ以上のブロックモジュールの中の一つまたはその以上のブロックモジュールに入力を割り当てて活性化させた後、活性化された前記一つまたはその以上のブロックモジュールの実行が終わるまで待ち、
    活性化された前記一つまたはその以上のブロックモジュールは、割り当てられた入力をもって自分のコードを実行し、自分のレジスタセットに出力を保存(buffer)した後、前記トップモジュールに制御フロー出力(Control Flow Outcome)と一緒にレジスタセットに保存された前記出力を提供(return)し、
    前記トップモジュールは、前記制御フロー出力に基づいて前記一つ以上のブロックモジュールの中で次に実行されたブロックモジュールを決定することを特徴とする請求項35に記載の高水準言語コードのHDLコードへの変換システム。
  39. 前記function-by-function生成方法の場合、
    前記高水準言語コードのサブルーチン/関数に該当する生成された前記HDLコードの前記データパス及び前記コントロールユニットは、一つのモジュールに含まれ、有限状態機械と具現(implement)され、
    前記データパスは、前記有限状態機械の出力ロジック(output logic)を生成し、前記コントロールユニットは、前記有限状態機械のステート変移(transition)を制御し、
    前記データパスは、前記高水準言語コードのサブルーチン/関数の全てのベーシックブロックの低水準IRコードインストラクションの連続的シーケンスから生成され、
    前記有限状態機械のステート(state)分割は、前記低水準IRコードインストラクションの遅延推定値及びデータ/コントロール依存性に基づいてなることを特徴とする請求項35に記載の高水準言語コードのHDLコードへの変換システム 。
  40. HLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステムにおいて、
    前記HLL-to-HDL変換機はフロントエンド及びミドルエンドとHDLバックエンドとを含み、
    前記フロントエンド及びミドルエンドは前記高水準言語コードのコンパイルに活用されるメインコンパイラのフロントエンド及びミドルエンドと同一であり、
    前記 HDLバックエンドは:
    HDLシンタックスとセマンティクスに従うシンタックスを有し、ターゲットアセンブリコード(target assembly code)生成と同一方式で低水準IRコードをHDLコードにマッピングする変換機;及び
    前記メインコンパイラのフロントエンド及びミドルエンドによって前記高水準言語コードから前記ターゲットアセンブリコード生成の直前に変換された低水準IRコードから前記HDLコードを生成するHDLジェネレーター(generator)を含むことを特徴とするHLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステム。
  41. 前記HLL-to-HDL変換機によって前記高水準言語コードのサブルーチン/関数から生成された前記HDLコードは、データパス及びコントロールユニットを含み、
    前記データパス及び前記コントロールユニットは、有限状態機械の形態で具現されることを特徴とする請求項40に記載のHLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステム。
  42. basic-block-by-basic-block生成方法の場合、前記HDLコードは、前記高水準言語コードのサブルーチン/関数から生成された一つまたはその以上のブロックモジュールを前記データパスとして含み、トップモジュールをコントロールユニットとして含み、
    function-by-function生成方法の場合、前記HDLコードは、データパス及び前記コントロールユニットの両者を全て含む一つのモジュールを含むことを特徴とする請求項41に記載のHLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステム。
  43. 前記basic-block-by-basic-block生成方法の場合、前記データパスは、一つまたはその以上のブロックモジュールを含み、前記ブロックモジュールは、ベーシックブロックの低水準IRコードインストラクションから生成される有限状態機械のセットであって、
    前記function-by-function生成方法の場合、前記データパスは、前記高水準言語コードのサブルーチン/関数の全てのベーシックブロックの低水準IRコードインストラクションから生成される有限状態機械のセットであって、
    前記二つの方法全てにおいて、前記有限状態機械のステート(state)分割は、前記低水準IRコードインストラクションの遅延推定値及びデータ依存性に基づいてなることを特徴とする請求項42に記載のHLL-to-HDL変換機を用いて高水準言語コードをHDLコードに変換するシステム。
JP2011537361A 2008-11-21 2009-11-19 高水準言語コードをhdlコードに変換する方法及びシステム Expired - Fee Related JP5568566B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
KR10-2008-0116417 2008-11-21
KR20080116417 2008-11-21
KR1020090109753A KR101082797B1 (ko) 2008-11-21 2009-11-13 고수준 언어 코드를 hdl 코드로 변환하는 방법 및 시스템
KR10-2009-0109753 2009-11-13
PCT/KR2009/006833 WO2010058981A2 (ko) 2008-11-21 2009-11-19 고수준 언어 코드를 hdl 코드로 변환하는 방법 및 시스템

Publications (2)

Publication Number Publication Date
JP2012509537A JP2012509537A (ja) 2012-04-19
JP5568566B2 true JP5568566B2 (ja) 2014-08-06

Family

ID=42197561

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011537361A Expired - Fee Related JP5568566B2 (ja) 2008-11-21 2009-11-19 高水準言語コードをhdlコードに変換する方法及びシステム

Country Status (5)

Country Link
US (1) US8336036B2 (ja)
EP (1) EP2369476B1 (ja)
JP (1) JP5568566B2 (ja)
KR (2) KR101082797B1 (ja)
WO (1) WO2010058981A2 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5729983B2 (ja) * 2010-11-25 2015-06-03 キヤノン株式会社 情報処理装置、情報処理方法およびプログラム
EP2718859A1 (en) * 2011-06-08 2014-04-16 Hyperion Core, Inc. Tool-level and hardware-level code optimization and respective hardware modification
US9043766B2 (en) * 2011-12-16 2015-05-26 Facebook, Inc. Language translation using preprocessor macros
US8650525B2 (en) * 2012-06-22 2014-02-11 Altera Corporation Integrated circuit compilation
CN105518622B (zh) 2013-09-26 2019-08-27 英特尔公司 验证动态二进制转换器中转换的来宾代码的方法和设备
CN103455362A (zh) * 2013-09-27 2013-12-18 西安电子科技大学 一种硬件语言自动转换系统
JP6176389B2 (ja) * 2014-03-19 2017-08-09 日本電気株式会社 ソースコード生成装置、ソースコード生成方法、及び、記録媒体
KR101678480B1 (ko) * 2015-07-08 2016-11-22 주식회사 유비콤테크놀로지 R 언어 기반 빅데이터 처리용 fpga 시스템 및 방법
US10180850B1 (en) * 2015-11-03 2019-01-15 Xilinx, Inc. Emulating applications that use hardware acceleration
US20170168792A1 (en) * 2015-12-15 2017-06-15 Futurewei Technologies, Inc. Space and time aware organization and isolation of components in real time systems
KR101952328B1 (ko) 2017-04-14 2019-02-26 박태영 프로그래밍 언어간 변환 방법
US10452452B2 (en) 2017-04-17 2019-10-22 Wave Computing, Inc. Reconfigurable processor fabric implementation using satisfiability analysis
US11546162B2 (en) 2017-11-09 2023-01-03 Nchain Licensing Ag Systems and methods for ensuring correct execution of computer program using a mediator computer system
WO2019092543A1 (en) 2017-11-09 2019-05-16 nChain Holdings Limited System for securing verification key from alteration and verifying validity of a proof of correctness
GB201720946D0 (en) 2017-12-15 2018-01-31 Nchain Holdings Ltd Computer-implemented system and method
CN111466095B (zh) 2017-12-13 2024-05-14 区块链控股有限公司 安全共享加密材料的系统和方法
KR101849648B1 (ko) * 2017-12-27 2018-04-17 박동우 건축 설계 모델 제공 방법 및 시스템
CN112400162B (zh) * 2018-07-19 2024-06-21 日立安斯泰莫株式会社 模拟装置及其方法、以及ecu装置
KR102263371B1 (ko) 2018-10-30 2021-06-11 한국전자통신연구원 신경망 모델 변환 방법 및 이를 위한 장치
US11347486B2 (en) 2020-03-27 2022-05-31 Advanced Micro Devices, Inc. Compiler-initiated tile replacement to enable hardware acceleration resources
US11553618B2 (en) 2020-08-26 2023-01-10 PassiveLogic, Inc. Methods and systems of building automation state load and user preference via network systems activity
CN114707444B (zh) * 2022-02-09 2023-04-28 芯华章科技股份有限公司 编译验证系统的方法、电子设备及存储介质
CN117787153B (zh) * 2023-12-26 2025-01-03 摩尔线程智能科技(北京)股份有限公司 一种硬件设计验证方法、装置和存储介质
CN119883282B (zh) * 2025-03-24 2026-04-07 北京开源芯片研究院 代码处理方法、装置、设备及可读存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6316334A (ja) * 1986-07-08 1988-01-23 Nec Corp 利用者が任意に定義した機械語のインライン展開方式
US5933642A (en) * 1995-04-17 1999-08-03 Ricoh Corporation Compiling system and method for reconfigurable computing
US6751583B1 (en) * 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
US6701501B2 (en) * 2000-10-16 2004-03-02 Simon Joshua Waters Structured algorithmic programming language approach to system design
US20040143813A1 (en) * 2001-05-30 2004-07-22 Kentaro Hanma System development supporting apparatus, system development supporting method, and computer-readable recorded medium
JP3803561B2 (ja) * 2001-06-29 2006-08-02 松下電器産業株式会社 論理回路設計方法
JP2003114914A (ja) * 2001-10-04 2003-04-18 Sharp Corp ソフトウェア/ハードウェア協調設計方法
KR100488084B1 (ko) * 2002-12-07 2005-05-06 한국전자통신연구원 마이크로 컨트롤러 소프트 아이피 내장용 롬 소프트아이피의 생성 방법 및 이 방법을 실행시키기 위한프로그램을 기록한 기록매체
US7260798B2 (en) * 2003-12-29 2007-08-21 Mentor Graphics Corporation Compilation of remote procedure calls between a timed HDL model on a reconfigurable hardware platform and an untimed model on a sequential computing platform
JP2006011840A (ja) * 2004-06-25 2006-01-12 Mitsubishi Electric Corp 組み込みシステム
JP4473656B2 (ja) * 2004-06-30 2010-06-02 株式会社東芝 紙葉類取り出し装置

Also Published As

Publication number Publication date
WO2010058981A2 (ko) 2010-05-27
JP2012509537A (ja) 2012-04-19
EP2369476A4 (en) 2012-08-22
KR101082797B1 (ko) 2011-11-14
KR20110093965A (ko) 2011-08-19
US20100131933A1 (en) 2010-05-27
KR20100057495A (ko) 2010-05-31
US8336036B2 (en) 2012-12-18
EP2369476B1 (en) 2016-01-27
KR101481453B1 (ko) 2015-01-21
EP2369476A2 (en) 2011-09-28
WO2010058981A3 (ko) 2010-09-23

Similar Documents

Publication Publication Date Title
KR101082797B1 (ko) 고수준 언어 코드를 hdl 코드로 변환하는 방법 및 시스템
US8448150B2 (en) System and method for translating high-level programming language code into hardware description language code
US12136000B2 (en) Programming flow for multi-processor system
US7941791B2 (en) Programming environment for heterogeneous processor resource integration
JP3835754B2 (ja) 集積回路の設計方法及びそれによって設計された集積回路
US9898292B2 (en) Hardware instruction generation unit for specialized processors
US7926046B2 (en) Compiler method for extracting and accelerator template program
Owaida et al. Synthesis of platform architectures from OpenCL programs
US20050193359A1 (en) Method and apparatus for designing circuits using high-level synthesis
US20190171449A1 (en) Tool-level and hardware-level code optimization and respective hardware modification
AU2003279772A1 (en) System and method for conveting control flow graph representations to control dataflow graph representations
Jo et al. SOFF: An OpenCL high-level synthesis framework for FPGAs
Xu et al. HECTOR: A multi-level intermediate representation for hardware synthesis methodologies
JP2005508029A (ja) リコンフィギュアラブルアーキテクチャのためのプログラム変換方法
Kaouane et al. SysCellC: Systemc on cell
US20080120497A1 (en) Automated configuration of a processing system using decoupled memory access and computation
Ruben LLVM‐based software pipelining for customizable exposed datapath pro‐cessors
Meier et al. MIPS-to-Verilog, Hardware Compilation for the eMIPS Processor
Koch Adaptive computing systems and their design tools
Diniz et al. Code transformations for embedded reconfigurable computing architectures
Döbrich Performance Improvement of Adaptive Processors
From White Paper Automated Generation of Hardware Accelerators With Direct Memory Access From ANSI/ISO Standard C Functions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120723

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140430

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140502

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: 20140527

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140623

R150 Certificate of patent or registration of utility model

Ref document number: 5568566

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees