JP2017524180A - 高位合成を用いて高効率のエントロピーデコーダを実装するための方法 - Google Patents

高位合成を用いて高効率のエントロピーデコーダを実装するための方法 Download PDF

Info

Publication number
JP2017524180A
JP2017524180A JP2016575563A JP2016575563A JP2017524180A JP 2017524180 A JP2017524180 A JP 2017524180A JP 2016575563 A JP2016575563 A JP 2016575563A JP 2016575563 A JP2016575563 A JP 2016575563A JP 2017524180 A JP2017524180 A JP 2017524180A
Authority
JP
Japan
Prior art keywords
integrated circuit
output
input
source code
memory location
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.)
Granted
Application number
JP2016575563A
Other languages
English (en)
Other versions
JP6345814B2 (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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2017524180A publication Critical patent/JP2017524180A/ja
Application granted granted Critical
Publication of JP6345814B2 publication Critical patent/JP6345814B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist

Landscapes

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

Abstract

コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体。コンピュータ実行可能プログラムコードはコンピュータシステムにおいて実行されるときにコンピュータシステムに以下の工程を実行させる。集積回路の素子を定義する第1プログラムモデルを含むソースコードの一部を受信する工程。ソースコードの前記一部に基づき第1レジスタ転送レベル(RTL)記述を生成する工程。第1RTL記述に基づきライブラリコンポーネントを定義する工程。集積回路を定義する第2プログラムモデルを含むソースコードを受信する工程。第1プログラムモデルに対応するソースコードの前記一部をライブラリコンポーネントに置き換える工程。ソースコードに基づき第2RTL記述を生成する工程を含む。

Description

本発明は、高位合成を用いて高効率のエントロピーデコーダを実装するための方法に関する。
高位合成ツールは、高水準ソースコード(たとえば、C、C++)からレジスタ転送レベル(RTL)(たとえば、VHDL/ヴェリログ(verilоg)/システムヴェリログ(systemVerilоg))コードを生成することが可能である。高位合成では、遅くエラーが発生しやすいプロセスであるRTL書換を行うことに代えて、変更を高水準ソースコードに行うことができるため、ハードウェアのテストおよび変更の効率が高くなる。算術コーディング(算術符号化)は近年の動画圧縮規格(たとえば、VP8/VP9/HEVC/H264)において複雑な要素である場合があり、ハードウェアアクセラレータがRTLに実装される場合、算術コーディングのデバッグ/テストを行うことは時間を要する作業となり得る。この問題に対処するために、高位合成が用いられる。しかしながら、算術コーディングはデータ依存性が高い場合があり、非線形アルゴリズム高位合成ツールは高水準ソースコードからRTLコードを生成しようと試みる際に問題を有し得る。
米国特許第8402400号明細書
結果として、ハードウェアアクセラレータの高位合成は、算術コーディングを合成する際の不具合が原因で機能しなくなることが多い。これらの不具合によって、ハードウェアアクセラレータの設計について過度にデバッグ/テストが行われることになる。類似の複雑なシステムも、システム合成中に部分要素が繰り返し機能しなくなる場合、過度なデバッグ/テストが実行されることになるという同様の欠点を有する。
本開示は、ハードウェア定義に対応するソースコード素子を、ハードウェア定義を含むシステムに関するソースコードを合成する前に、システムソースコードから合成したレジスタ転送レベル(RTL)定義に置き換えることに関する。
一般的な態様では、コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体が開示される。コンピュータ実行可能プログラムコードは、コンピュータシステムにおいて実行されるときに前記コンピュータシステムに以下の工程を実行させる。実行される工程としては、集積回路の素子を定義する第1プログラムモデルを含むソースコードの一部を受信する工程と、前記ソースコードの前記一部に基づき第1レジスタ転送レベル(RTL)記述を生成する第1生成工程とがある。さらに前記第1RTL記述に基づきライブラリコンポーネントを定義する工程と、前記集積回路を定義する第2プログラムモデルを含む前記ソースコードを受信する工程とがある。さらに前記第1プログラムモデルに対応する前記ソースコードの前記一部を前記ライブラリコンポーネントに置き換える工程と、前記ソースコードに基づき第2RTL記述を生成する第2生成工程とを含む。前記ライブラリコンポーネントは、前記集積回路の前記素子に関連付けられている入力インターフェースであって、少なくとも1つの入力変数を第1メモリ位置に対してマッピングするように構成されている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースであって、少なくとも1つの出力変数を第2メモリ位置に対してマッピングするように構成されている出力インターフェースとを含む。
別の一般的な態様では、集積回路のレジスタ転送レベル(RTL)記述を生成するように構成されている高位合成(HLS)ツールが開示される。HLSツールは、前記集積回路の素子を定義する第1RTL記述に基づきライブラリコンポーネントを定義するように構成されているライブラリ処理モジュールを備える。ライブラリ処理モジュールは、集積回路の素子に関連付けられている入力インターフェースであって、少なくとも1つの入力変数を第1メモリ位置に対してマッピングするように構成されている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースであって、少なくとも1つの出力変数を第2メモリ位置に対してマッピングするように構成されている出力インターフェースと、を有する。前記HLSツールは合成モジュールを備え、合成モジュールは、第1プログラムモデルに対応して前記集積回路を定義するソースコードの一部を。前記ライブラリコンポーネントに置き換え、前記ソースコードに基づき前記集積回路の前記RTL記述を生成するように構成されている。
さらに別の一般的な態様では、高位合成(HLS)ツールを用いて集積回路を設計するための方法が開示される。前記方法は、合成ツールモジュールを用いて、前記集積回路の素子を定義するように構成されている第1レジスタ転送レベル(RTL)記述に基づきライブラリコンポーネントを定義する工程と、前記合成ツールモジュールを用いて、第1プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換える工程であって、前記ソースコードは前記集積回路を定義する工程と、前記合成ツールモジュールを用いて、前記ソースコードに基づき前記集積回路を表す第2RTL記述を生成する生成工程であって、前記第2RTL記述の生成において、第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて第1メモリ位置への出力を書き込む生成工程とを備える。
複数の実施形態は、以下の特徴のうち1以上を含み得る。たとえば、前記第1プログラムモデルはマルチプレクサ論理を含む状態機械を定義し得る。前記第1プログラムモデルは算術デコーダを定義し得る。前記第1生成工程は、高水準言語による前記ソースコードの前記一部に基づき前記第1プログラムモデルのシミュレーションを行う第1シミュレーション工程と、前記第1RTL記述に基づき前記第1プログラムモデルのシミュレーションを行う第2シミュレーション工程と、前記第1シミュレーション工程の出力を前記第2シミュレーション工程の出力と比較する工程と、を含み得る。前記第1生成工程は、前記第1RTL記述を、前記集積回路の前記素子と前記集積回路とのうち少なくとも1つの設計仕様と比較する工程を含む。前記入力インターフェースと前記出力インターフェースとは、高水準プログラミング言語によって定義されるハードウェアインターフェースである。
たとえば、前記第2生成工程において、前記ライブラリコンポーネントは受信された入力と同じクロックサイクルにおいて出力を生成し得る。前記第2生成工程において、前記ライブラリコンポーネントは前記第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第1メモリ位置への出力を書き込み得る。前記第2生成工程において、前記ライブラリコンポーネントは第2プログラムの合成に基づく入力を受信し、前記入力に基づき時間非依存型出力を生成し得る。
たとえば、前記入力インターフェースと前記出力インターフェースとは、高水準プログラミング言語によって定義されるハードウェアインターフェースであり得る。前記合成モジュールは、前記ライブラリコンポーネントのインターフェースを行う際、前記生成において受信された入力と同じクロックサイクルにおいて出力を生成するようにさらに構成され得る。前記合成モジュールは、前記ライブラリコンポーネントのインターフェースを行う際、第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて第1メモリ位置への出力を書き込むようにさらに構成され得る。
少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャート。 少なくとも一例の実施形態による算術デコーダシステムを示すブロック図。 少なくとも一例の実施形態による算術デコーダシステムを示すブロック図。 少なくとも一例の実施形態による算術デコーダシステムを示すブロック図。 少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャート。 少なくとも一例の実施形態によるシステムを示すブロック図。 本明細書に記載される技術を実装するために用いられるコンピュータデバイスとモバイルコンピュータデバイスとを示す概略図。
例示的実施形態は様々な修正形態と他の形式とを含んでもよいが、それらの実施形態は図面に例示されるものであって、明細書内では詳細に記載されないであろう。しかしながら、例示的実施形態を記載される特定の形式に限定する意図はなく、むしろ、例示的実施形態は特許請求の範囲内である全ての修正形態、均等物、および代替物を包含するものと理解される。
さらに、図面は、ある例示的実施形態で用いられる方法および/または構造の一般的な特徴を図示することと、以下に示される明細書を補足することを意図している。しかしながら、これらの図面は原寸に比例しておらず、任意の所与の実施形態の正確な構造的または性能的特徴を正確に反映しない可能性もあり、例示的実施形態によって包含される値または特性の範囲を定義または限定するものとして解釈されるべきではない。たとえば、構造的要素は、明確性のために縮小または誇張される場合がある。様々な図面における類似または同一の参照符号の使用は、類似または同一の要素または特徴の存在を示唆することを意図している。
図1は、少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャートである。図1に関して説明される工程は、装置(例えば、図5および図6に示されるようなもの)に関連付けられているメモリ(たとえば、少なくとも1つのメモリ510および/または604)に記憶されるソフトウェアコードを実行することによって実施されてもよいし、該装置に関連付けられている少なくとも1つのプロセッサ(たとえば、1つのプロセッサ505および/または602)によって実行されてもよい。しかしながら、他の実施形態(たとえば、特定用途のプロセッサとして具体化されるシステム)も想定される。下記工程は、プロセッサによって実行されるものとして説明されるが、必ずしも同じプロセッサによって実行されなくてもよい。言い換えると、少なくとも1つのプロセッサは図1に関する下記工程を実行してもよい。
さらに、下記工程はデコーダまたはエントロピーデコーダの一例の実施形態に関して記載され得る。しかしながら、例示的実施形態はこれに限定されない。たとえば、記載される技術は、任意の集積回路またはASIC(特定用途向け集積回路)に関する記述/設計を合成するために用いられてもよい。したがって、本明細書に記載される技術は、デコーダだけでなくエンコーダを設計するのに用いられてもよい。合成とは、デジタルシステムを動作仕様から該動作を実装するように構成されている構造に変換するプロセスであってもよい。動作仕様は、より高水準のソースコード(たとえば、C、C++)を用いて開発されてもよい。該構造は、ハードウェア(たとえば、レジスタ)とレジスタ間のデータフローとを定義するレジスタ転送レベル(RTL)記述であってもよい。一方、ソフトウェアコードをコンパイルすることには、ソースコード(たとえば、C、C++)記述をターゲットプロセッサ(たとえば、X86)上で動作するアセンブリコードにコンパイルするコンパイラが用いられる。
図1に示すように、工程S105において、ソフトウェアコードの一部は、該ソフトウェアコードを合成する前に隔離されている。ソフトウェアコードを隔離することは、特定の機能または一群の機能を実行するソフトウェアコードを識別することと、該機能または一群の機能を用いるソフトウェアシステムから該コードを除去することとを含んでもよい。たとえば、ソフトウェアコードの一部は、複雑な合成、あるいは処理集約型の合成に関連付けられてもよい。言い換えると、ソフトウェアコードの一部は、コーディングエラーが生じやすくてもよいし、合成を行うのに時間がかかってもよい。ソフトウェアコードの一部は、それ自体が、集積回路またはASICに関連付けられているモデルを定義してもよい。あるいは、ソフトウェアコードの一部は、それ自体が、集積回路またはASICの素子および/またはサブコンポーネントに関連付けられているモデルを定義してもよい。
したがって、ソフトウェアコードの一部を隔離することによって、開発者および/またはハードウェア設計者がソフトウェアコードの隔離部分に対して1または複数の合成ツールを用いることができるようになる可能性がある。したがって、工程S110において、ソフトウェアコードの隔離部分が合成される。一例の実施形態では、ソフトウェアコードの隔離部分は(たとえば、メモリから)合成ツールによって読み出されてもよい。その後、合成ツールはソフトウェアコードの隔離部分を合成するために用いられてもよい。ソフトウェアコードの隔離部分を合成することは、ソフトウェアコードの隔離部分によって定義される集積回路のレジスタ転送レベル(RTL)記述を生成することを含んでもよい。
工程S115において、ソフトウェアコードの合成隔離部分とソフトウェアコードとの間におけるインターフェースが開発される。たとえば、インターフェースは、入出力(I/О)インターフェースであってもよい。言い換えると、インターフェースは、入力(たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など)を受信するように構成されてもよい。インターフェースは、出力(たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など)を通信するように構成されてもよい。インターフェースは、ソフトウェアインターフェース(たとえば、メモリの読み書き)および/またはハードウェアインターフェース(たとえば、ピンレイアウトまたはバスインターコネクション)であってもよい。
工程S120において、ソフトウェアコードは、隔離部分を含めて、合成隔離部分が時間非依存型入力および/または時間非依存型出力コンポーネントとして構成されるように合成される。たとえば、ソフトウェアコードの合成隔離部分は、合成ツールを用いることでソフトウェアコードと統合されてもよい。統合は、ソフトウェアコードの隔離部分をソフトウェアコードの合成隔離部分と置き換えることを含んでもよい。統合は、インターフェースおよび/またはソフトウェアコードが(たとえば合成ツールを用いて)ソフトウェアコードとソフトウェアコードの合成隔離部分との間における通信を行うことが可能になるように構成することを含んでもよい。一例の実施形態において、ソフトウェアコードがソフトウェアコードの合成隔離部分と通信を行う場合、ソフトウェアコードはインターフェースを用いる。したがって、通信は時間非依存型であってもよい(たとえば、1クロックサイクル内で行われる)。言い換えると、出力は、入力が受信される(および読み出される)のと同じクロックサイクルにおいて生成される(および書き込まれる)。
したがって、例示的実施形態では、開発者が、動作仕様の複雑な要素(たとえば、アルゴリズム)の合成およびトラブルシュートを行い、その後、動作仕様の複雑な要素をRTL定義と置き換えられるようになる。RTL定義は、動作仕様の合成中に入力を受信するのと同じクロックサイクルにおいて、結果を返すものである。したがって、開発者は、複雑な要素が所望の通りに機能すると認識しているシステム動作に集中することができる。
図2、図3A、および図3Bは、少なくとも一例の実施形態による算術デコーダシステムのブロック図を示す。図2に示すように、算術デコーダ205は、状態機械マルチプレクサ(mux)論理210と、エンジン215と、ストリームバッファリングシフタ220とを備える。
状態機械マルチプレクサ論理210は、少なくとも1つの入力値に基づき少なくとも1つの出力値を選択するように構成されている。一例の実施形態では、状態機械マルチプレクサ論理210は、状態機械または有限状態機械(FSM)として実装されてもよい。したがって、出力値は現在状態と入力値とに基づき決定されてもよい。クロックをトリガーすると、FSMは出力値を含む新しい状態に切り替わる。FSMはソフトウェアまたはハードウェアに実装されてもよい。たとえば、FSMはマイクロプロセッサに関する一組の命令として実装されてもよい。たとえば、FSM回路は、以前の状態を保持するように構成されているいくつかのフリップフロップと、入力を受信するように構成されているいくつかのデコード論理ゲートとから構成されてもよい。出力値または信号は、以前の状態とフリップフロップがクロックされる際の入力との両方に依存してもよい。FSMは、FSMが特定の状態にあって特定の入力を受信するたびに出力状態信号が同じである、という点で固定されてもよい。
エンジン215は、映像伸長を実行するように構成されている。たとえば、エンジン215は、映像伸長を実行するよう詳細に構成されているプロセッサであってもよい。エンジン215は、ピクチャ層から下部に伸長を実行してもよい。たとえば、エンジン215は、ピクチャ層、スライス層、マクロブロック層、およびブロック層の伸長を実行してもよい。言い換えると、エンジンは、フレーム毎に復号(伸長)を行うようプログラミングされてもよいし、ピクチャ層において開始する可変長復号、逆ジグザグ、逆量子化、ならびに逆離散コサイン変換、およびフレーム再構成(動きベクトル補償)を1つのピクチャの最後までブロック毎に実行するようプログラミングされてもよい。エンジン215は、状態機械マルチプレクサ論理210に対する入力として用いられる復号化されたビンを生成するように構成されている。
ストリームバッファリングシフタ220は、エンジン215にロードされるコードストリームのキャッシュであるように構成されている。たとえば、ストリームバッファリングシフタ220は、状態機械マルチプレクサ論理210から受信される復号/伸長されたコードストリームを記憶してもよい。ストリームバッファリングシフタ220の出力は、算術デコーダ205の出力であってもよい。
図3Aに示すように、状態機械マルチプレクサ論理210は、複数の状態機械305(状態1、状態2、状態3、および状態4として図示)をさらに備える。上述の通り、複数の状態機械305の各々は、以前の状態と状態機械マルチプレクサ論理210がクロックされる際の入力との両方に依存する出力状態または信号を含んでもよい。複数の状態機械は、RTL記述を用いてモデリングされてもよい。したがって、複数の状態機械305は高水準ソースコード(たとえば、C、C++)から高位合成(HLS)ツール(商用のCatapult−C(Calypto)、 AccelFPGA、(AccelChip)、SystemC Compiler(Synopsys)、およびGAUT、SPARK、Cathedralなど)を用いて合成されてもよい。
HLSツールは、設計者とシステム制約とに基づきアーキテクチャについてのRTL記述を生成する。RTL記述は、ハンドコーディングされた設計(たとえば、RTLにおいて直接コーディングを行う)と比べて信頼できるものである(たとえば、エラーが発生しない)。言い換えると、HLSツールは、レジスタ転送レベルのハンドコーディングと比較して、設計時間を速めることができる。高位合成は、ハードウェア領域に置換されるソフトウェアコンパイルと類似し得る。ソース仕様は、複雑なハードウェアコンポーネントのアルゴリズム動作をモデリングする高水準言語(たとえば、Matlab、C、C++など)で書かれている。自動精密化プロセスによって、記述された動作を対象となる制約に依存する指定の技術対象上にマッピングさせることが可能になる。
したがって、状態機械305は、高水準言語で書かれているソースコードの合成の結果(たとえば、RTL記述)であってもよい。たとえば、ループおよび/またはケース文を用いるアルゴリズムは、複数の状態機械305へと合成されてもよい。上述の制約のうち1つは、状態機械が特定の状態にあって特定の入力を受信する場合に、出力状態信号が複数の状態機械305の各々について同じである、というものであってもよい。さらに、アーキテクチャは1以上のフリップフロップを含んでもよい。
条件文の場合、HLSは該条件文の各分岐によって記述される複数の回路の全部および/または一部を生成してもよい。したがって、ソフトウェア条件文のランタイム実行は、2つの実行可能な結果(たとえば、状態)間の選択を含む。HLSツールがソースコードをRTL記述に合成する場合、多数の分岐が生成される可能性がある。分岐が機能しなくなると、合成も機能しなくなる可能性がある。さらに、HLSツールは、必ずしも最善の/最適な結果をもたらす(たとえば、最適な分岐に続く)とは限らない。さらに、複数の状態機械305はFSMに対応していてもよい。したがって、複数の分岐が該FSM内の状態に対応していなくてもよい。したがって、ソースコードはトラブルシュートが行われる必要があってもよく、および/または、新しい合成を開始する前に削除された非最適な結果であってもよい。さらに、非線形アルゴリズムは、HLSツールが非線形アルゴリズムを線形(あるいは略線形)定義にフィッティングするよう試みるため、更なる複雑性を提示する。
したがって、例示的実施形態では、複数の状態機械305は別々に合成されてもよい。図3Bに示すように、算術デコーダ205において、状態機械マルチプレクサ論理210は有限状態機械ライブラリコンポーネント310に置き換えられる。有限状態機械ライブラリコンポーネント310は、状態機械マルチプレクサ論理210を表すソースコードの隔離合成のRTL定義に基づいてもよい。有限状態機械ライブラリコンポーネント310は、関連する入力ハードウェアインターフェースを含んでもよい。入力ハードウェアインターフェースは、高水準プログラミング言語によって定義されてもよい。有限状態機械ライブラリコンポーネント310は、関連する出力ハードウェアインターフェースを含んでもよい。出力ハードウェアインターフェースは、高水準プログラミング言語によって定義されてもよい。入出力ハードウェアインターフェースは、ICまたはASICのバスおよび/またはピン位置に関連付けられてもよい。入出力ハードウェアインターフェースは、算術デコーダ205に関連付けられているソースコードの合成中、HLSツールによるICまたはASICのRTL記述の生成において受信された入力と同じクロックサイクルにより出力を生成するように構成されてもよい。
これに代えて、またはこれに加えて、有限状態機械ライブラリコンポーネント310は、関連するソフトウェア入力インターフェースを含んでもよい。ソフトウェア入力インターフェースは、少なくとも1つの入力変数を1つのメモリ位置(たとえば、レジスタ565)に対してマッピングするように構成されてもよい。有限状態機械ライブラリコンポーネント310は、関連するソフトウェア出力インターフェースを含んでもよく、ソフトウェア出力インターフェースは、少なくとも1つの入力変数をメモリ位置に対してマッピングするように構成されている。入出力ソフトウェアインターフェースは、レジスタ位置および/またはメモリ位置に対してのポインタに関連付けられてもよいし、対応する読み書き方法を有していてもよい。入出力ソフトウェアインターフェースは、HLSツールを用いてICまたはASICのRTL記述の生成において受信された入力と同じクロックサイクルにおいて出力を生成するように構成されてもよい。言い換えると、入出力ソフトウェアインターフェースは、HLSツールが算術デコーダ205に関連付けられているソースコードを合成しているときに別のメモリ位置(たとえば、レジスタ570)から入力を読み取るのと同じクロックサイクルにおいて、メモリ位置に対して出力を書き込むように構成されてもよい。
図4は、少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャートである。図4に関して説明される工程は、装置(例えば、図5および図6に示されるようなもの)に関連付けられているメモリ(たとえば、少なくとも1つのメモリ510および/または604)に記憶されるソフトウェアコードを実行することによって実施されてもよいし、該装置に関連付けられている少なくとも1つのプロセッサ(たとえば、1つのプロセッサ505および/または602)によって実行されてもよい。しかしながら、他の実施形態(たとえば、特定用途のプロセッサとして具体化されるシステム)も想定される。下記工程は、プロセッサによって実行されるものとして説明されるが、必ずしも同じプロセッサによって実行されなくてもよい。言い換えると、少なくとも1つのプロセッサは図4に関する下記工程を実行してもよい。
さらに、下記工程はデコーダまたはエントロピーデコーダの一例の実施形態に関して記載され得る。しかしながら、例示的実施形態はこれに限定されない。たとえば、記載される技術は、任意の集積回路またはASIC(特定用途向け集積回路)に関する記述/設計を合成するために用いられてもよい。
図4に示すように、工程S405において、集積回路の素子を定義する第1プログラムモデルを含むソースコードの一部が受信される。たとえば、HLSツールは、FSMを表すコードの一部をメモリ位置から読み取ってもよい。HLSツールは、算術デコーダ205に関連付けられている状態機械マルチプレクサ論理210を表すコードを読み取ってもよい。あるいは、HLSツールは、算術デコーダ205に関連付けられているソースコードの全てを読み取ってもよいし、状態機械マルチプレクサ論理210に関連付けられているソースコードを算術デコーダ205から分離/隔離させてもよい。
工程S410において、ソースコードの一部は第1レジスタ転送レベル(RTL)記述に合成される。ソースコードの一部を合成することは、ソースコードの一部によって定義される集積回路のレジスタ転送レベル(RTL)記述を生成することを含んでもよい。たとえば、ソースコードの一部のRTL記述は、より大きい集積回路の素子(たとえば、ビデオレコーダ)である場合もあるし、そうではない場合もあるエントロピーデコーダの素子を定義してもよい。一例の実施形態において、ソフトウェアコードの隔離部分のRTL記述は、算術デコーダおよび/または該算術デコーダの素子またはサブコンポーネント(たとえば、状態機械)を定義してもよい。
たとえば、HLSツールは、FSMを表すコードの読取部分を合成してもよい。ソースコードの一部を合成することは、たとえば、チップサイズ、速度、クロックレートなどに関する最終RTL記述を最適化することを含んでもよい。ソースコードを合成することは、たとえば多数の状態を同一または初期状態にマッピングすることによって最終RTLコードを修正することを含んでもよい。マッピングは、規格(たとえば、ビデオエンコーディング規格)に関する設計者の知識に基づき得る。
一例の実施形態において、第1RTL記述は集積回路の素子と該集積回路とのうちの少なくとも一方の設計仕様と比較される。一例の実施形態において、RTL記述にはテストまたはベンチテストが行われる。RTL記述をテストすることは、高水準言語によるソースコードの一部に基づきプログラムモデル(たとえば、FSMを表す)について第1シミュレーションを行うことと、第1RTL記述に基づきプログラムモデルについて第2シミュレーションを行うことと、第1シミュレーションの出力を第2シミュレーションの出力と比較することとを含んでもよい。
工程S415において、第1RTL記述に基づくライブラリコンポーネントが定義される。たとえば、FSMを表すコードの合成部分は、既存のライブラリに追加される可能性もあるし、新しいコードライブラリの初期の要素として用いられる可能性もある。インターフェースは、ライブラリコンポーネントと関連付けられてもよい。たとえば、インターフェースは、入出力(I/O)インターフェースであってもよい。言い換えると、インターフェースは、入力(たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など)を受信するように構成されてもよい。インターフェースは、出力(たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など)を通信するように構成されてもよい。インターフェースは、ソフトウェアインターフェース(たとえば、メモリ読み書き)および/またはハードウェアインターフェース(たとえば、ピンレイアウトまたはバスインターコネクション)であってもよい。ライブラリコンポーネントは、有限状態機械ライブラリコンポーネント310であってもよい。
工程S420において、集積回路を定義する1または複数の第2プログラムモデルを含むソースコードが受信される。たとえば、HLSツールは、算術デコーダ205に関連付けられているソースコードの全てを読み取ってもよい。
工程S425において、第1プログラムモデルを含むソースコードの一部がライブラリコンポーネントに置き換えられる。たとえば、HLSツールは、状態機械マルチプレクサ論理210に関連付けられているソースコードを有限状態機械ライブラリコンポーネント310に置き換えてもよい。ソースコードを置き換えることは、ライブラリコンポーネントに関連付けられているインターフェースをソースコードとリンクさせることを含んでもよい。たとえば、有限状態機械ライブラリコンポーネント310に関連付けられているI/Oインターフェースは、HLSツールにおいて算術デコーダ205に関連付けられているソースコードとリンクされてもよい。
工程S430において、ソースコードが第2RTL記述に合成される。たとえば、HLSツールは、有限状態機械ライブラリコンポーネント310を含む算術デコーダ205に関連付けられているソースコードを合成してもよい。一例の実施形態では、ソースコードの第2RTL記述への合成において、有限状態機械ライブラリコンポーネント310は、I/Oインターフェースを介して受信された入力と同じクロックサイクルにおいて出力を生成してもよい。たとえば、有限状態機械ライブラリコンポーネント310は、第2メモリ位置から入力を読み取るのと同じクロックサイクルにおいて第1メモリ位置に対して出力を書き込んでもよい。
図5は、少なくとも一例の実施形態によるシステムを示すブロック図である。図5に示すように、システム(または装置)500は、少なくとも1つのプロセッサ505と少なくとも1つのメモリ510とを備える。少なくとも1つのプロセッサ505と少なくとも1つのメモリ510とは、バス515を介して通信可能に結合される。システム500は、たとえば、コンピューティングデバイス(たとえば、クラウドコンピューティングデバイスまたはサーバ)の要素であってもよい。
図5の例において、システム500は少なくとも1つのコンピューティングデバイスであってもよく、本明細書に記載される方法を実行するように構成されている実質的に任意のコンピューティングデバイスを表すものと理解される。そのようなものとして、システム500は、本明細書に記載される技術または該技術の異なるバージョンもしくは将来のバージョンを実装するように用いられ得る様々な標準コンポーネントを含むものと理解される。たとえば、システム500は、少なくとも1つのプロセッサ505(たとえば、シリコンベースのプロセッサ)に加えて、少なくとも1つのメモリ510(非一時的なコンピュータ可読記憶媒体)をそれぞれ有するものとして図示されている。
したがって、認められるように、少なくとも1つのプロセッサ505は、少なくとも1つのメモリ510上に記憶される命令を実行するように用いられ、それによって、本明細書に記載される様々な機能および特徴、または、追加あるいは代替機能および特徴を実装するようにしてもよい。もちろん、少なくとも1つのプロセッサ505と少なくとも1つのメモリ510とは、他の様々な用途で用いられてもよい。特に、少なくとも1つのメモリ510は、本明細書に記載されるモジュールのうち任意の1つを実装するように用いられ得る様々な種類のメモリと関連するハードウェアおよびソフトウェアとの例を表すと理解される、と認められる。下記のシステムおよび/または方法は、データおよび/または記憶要素を含んでもよい。データおよび/または記憶要素(たとえば、データベーステーブル)は、たとえば、少なくとも1つのメモリ510に記憶される。
図5に示すように、少なくとも1つのメモリ510は、合成ツールモジュール520と、ソースコードブロック550と、RTL記述ブロック560とを備える。合成ツールモジュール520は、レキシカル(lex)モジュール525と、合成モジュール530と、最適化モジュール535と、ライブラリ処理モジュール540と、照合モジュール545とを備える。
合成ツールモジュール520は、高水準プログラミング言語(たとえば、C、C++など)で書かれているソースコードを合成するように構成されてもよい。合成ツールモジュール520は、上述のHLSツールであってもよい。合成ツールモジュール520は、上述の機能/工程のうち1以上を実行するように構成されてもよい。たとえば、合成ツールモジュール520は、集積回路の素子を定義するように構成されている第1レジスタ転送レベル(RTL)に基づきライブラリコンポーネントを定義し、第1プログラムモデルに対応するソースコードの一部をライブラリコンポーネントに置き換えるように構成されてもよく、該ソースコードは該集積回路を定義する。
ソースコードブロック550は、高水準プログラミング言語(たとえば、C、C++など)によるソースコード(またはその一部)を記憶するように構成されてもよい。ソースコードは、1つの集積回路(たとえば、ソースコード部555として)、1つの集積回路全体(たとえば、ASIC)、および/または、複数の集積回路の素子を定義してもよい。ソースコードは、たとえば、規格(ビデオコーデック規格など)についてのプログラムモデルに基づいてもよい。RTL記述ブロック560は、上記で詳述されたソフトウェアインターフェースのレジスタ565および570のシミュレーションを行うように構成されているメモリを含む合成ソースコードのRTL記述を記憶するように構成されてもよい。
レキシカルモジュール525は、入力として(たとえば文字列として)ソースコードを受信し、一連のシンボル(トークン)を生成するように構成されてもよい。トークンとは、集合的な意味を有する文字列(単語または句読点)である。レキシカルモジュール525は、コメントと、ブランク、タブおよび改行文字の形式による空白とを削除してもよい。レキシカルモジュール525は、合成モジュール530からのエラーメッセージをソースコードと相関させてもよい(たとえば、行数を記録する)。エラーが発見される場合、レキシカルモジュール525は処理を停止してもよい。したがって、例示的実施形態では、ハードウェアの複雑な要素について第1合成を行うこと(たとえば、動画圧縮コーデックの要素としての算術コーディング)によって、ハードウェアの複雑な要素についてのソースコードに関連付けられているレキシカルエラーの任意のデバッグが可能になる。
合成モジュール530は、高水準プログラミング言語(たとえば、C、C++など)ソースコードに基づきレジスタ転送レベル(RTL)定義を生成するように構成されてもよい。最適化モジュール535は、最適化を最終ICのサイズ(たとえば、小さければ小さいほど良い)またはレイアウト(たとえば、標準チップに取り付けるための)について行うように構成されてもよい。最適化モジュール535は、温度分布を最適化するように構成されてもよい。たとえば、発熱コンポーネントがレイアウトにおいて広がり得る。最適化モジュール535は、メモリの空き容量を最適化するように構成されてもよい。たとえば、追加メモリがRTL定義に追加されてもよい。最適化は、RTL定義のハンドコーディングを行うことを含んでもよい。
ライブラリ処理モジュール540は、ソースコード合成中にソースコードとリンクされる可能性のある少なくとも1つのライブラリコンポーネントを記憶するように構成されてもよい。各ライブラリコンポーネントは、関連するインターフェースを含んでもよい。たとえば、インターフェースは、上記で詳述された入出力(I/O)インターフェースであってもよい。照合モジュール545は、合成RTL定義の動作を照合するように構成されてもよい。一例の実施形態において、合成RTL定義の操作を照合することは、テストまたはベンチテストを行うことを含んでもよい。RTL記述をテストすることは、高水準言語によるソースコードまたはソースコードの一部を表すプログラムモデルについて第1シミュレーションを行うことと、RTL記述に基づきプログラムモデルについて第2シミュレーションを行うことと、第1シミュレーションの出力を第2シミュレーションの出力と比較することとを含んでもよい。
認められるであろうように、図5に示されるシステム500は、図6に関して以下に記載される一般的なコンピュータデバイス600および/または一般的なモバイルコンピュータデバイス650の要素および/または拡張機能として実装されてもよい。これに代えて、またはこれに加えて、図5に示されるシステム500は、一般的なコンピュータデバイス600および/または一般的なモバイルコンピュータデバイス650に関して以下に記載される特徴のいくつかあるいは全てを有する一般的なコンピュータデバイス600および/または一般的なモバイルコンピュータデバイス650とは別体のシステムにより実装されてもよい。これに代えて、またはこれに加えて、一般的なコンピュータデバイス600および/または一般的なモバイルコンピュータデバイス650とは別体のシステム内にある図5に示されるシステム500は、一般的なコンピュータデバイス600および/または一般的なモバイルコンピュータデバイス650のコンポーネント(たとえば、ビデオデコーダ)を設計および/または開発するために用いられてもよい。
図6は、本明細書に記載される技術を実装するために用いられるコンピュータデバイスとモバイルコンピュータデバイスとを示す概略図である。図6は、本明細書に記載される技術とともに用いられ得る一般的なコンピュータデバイス600と一般的なモバイルコンピュータデバイス650との例である。コンピューティングデバイス600は、様々な形式のデジタルコンピュータ(ラップトップ、デスクトップ、ワークステーション、携帯情報端末(PDA)、サーバ、ブレードサーバ、メインフレーム、他の適当なコンピュータなど)を表すことを意図している。コンピューティングデバイス650は、様々な形式のモバイルデバイス(携帯情報端末、携帯電話、スマートフォン、他の類似するコンピューティングデバイスなど)を表すことを意図している。本明細書に示すコンポーネントと、それらの接続および関係と、それらの機能とは例示に限ることを意図しており、本文書内で記載および/または請求される発明の実施形態を限定することを意図していない。
コンピューティングデバイス600は、プロセッサ602と、メモリ604と、記憶装置606と、メモリ604および高速拡張ポート610に接続される高速インターフェース608と、低速バス614および記憶装置606に接続される低速インターフェース612とを備える。各コンポーネント602,604,606,608,610,612は様々なバスを用いて相互接続され、共通のマザーボード上に、または、他の方法によって適宜取り付けられ得る。プロセッサ602は、外部入出力装置(たとえば、高速インターフェース608に結合されるディスプレイ616)上のGUIに対してグラフィック情報を表示するためにメモリ604または記憶装置606に記憶される命令を含むコンピューティングデバイス600内で実行される命令を処理することができる。他の実施形態では、複数のメモリと各種のメモリとともに、複数のプロセッサおよび/または複数のバスが適宜用いられ得る。さらに、複数のコンピューティングデバイス600が接続されてもよく、各デバイスは(たとえば、サーババンク、一群のブレードサーバ、または、マルチプロセッサシステムとして)必要な動作の一部を提供し得る。
メモリ604は、コンピューティングデバイス600内に情報を記憶する。一実施形態において、メモリ604は1以上の揮発性記憶装置である。別の実施形態において、メモリ604は1以上の不揮発性記憶装置である。さらに、メモリ604は、他の形式のコンピュータ可読媒体(たとえば、磁気または光ディスク)であり得る。
記憶装置606は、コンピューティングデバイス600に対して大容量記憶を提供することができる。一実施形態において、記憶装置606は、コンピュータ可読媒体(たとえば、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置、フラッシュメモリ、または他の類似する固体記憶装置、記憶エリアネットワークまたは他の構成中の装置を含む一連の装置)であるか、それらを含み得る。コンピュータプログラム製品は、情報担体により有形に具体化される。さらに、コンピュータプログラム製品は、該コンピュータプログラム製品が実行されるとき1以上の方法(たとえば、上述の方法)を行う命令を含み得る。情報担体は、コンピュータまたは機械可読媒体(たとえば、メモリ604、記憶装置606、プロセッサ602上のメモリ)である。
高速コントローラ608はコンピューティングデバイス600に対して帯域幅集約型操作を管理し、低速コントローラ612は低帯域幅集約型操作を管理する。このような機能の割り当ては例示のみである。一実施形態において、高速コントローラ608は(たとえば、グラフィックプロセッサまたはアクセラレータを介して)メモリ604と、ディスプレイ616と、様々な拡張カード(図示せず)を受け入れ得る高速拡張ポート610とに結合される。該実施形態において、低速コントローラ612は、記憶装置606と低速拡張ポート614とに結合されている。様々な通信ポート(たとえば、USB、Bluetooth(登録商標)、Ethernet(登録商標)、wireness Ethernet(登録商標))を含み得る低速拡張ポートは、1以上の入出力装置(たとえば、キーボード、ポインティングデバイス、スキャナ、またはネットワーキングデバイス(たとえば、スイッチまたはルータ))に、たとえばネットワークアダプタを介して結合され得る。
図示するように、コンピューティングデバイス600は複数の異なる形式にて実装され得る。たとえば、コンピューティングデバイス600は、標準サーバ620として、または、そのようなサーバの一群により複数回、実装され得る。さらに、コンピューティングデバイス600は、ラックサーバシステム624の一部として実装され得る。さらに、コンピューティングデバイス600は、パーソナルコンピュータ(たとえば、ラップトップコンピュータ622)に実装され得る。あるいは、コンピューティングデバイス600からのコンポーネントは図示しないモバイルデバイス(たとえば、デバイス650)内の他のコンポーネントと組み合わされてもよい。そのような装置の各々は1以上のコンピューティングデバイス600,650を含んでもよく、システム全体が互いに通信し合う複数のコンピューティングデバイス600,650から構成されてもよい。
コンピューティングデバイス650は、プロセッサ652と、メモリ664と、入出力装置(たとえば、ディスプレイ654)と、通信インターフェース666と、トランシーバ668とを、他のコンポーネントに加えて備える。さらに、デバイス650は、追加記憶を提供するための記憶装置(マイクロドライブまたは他の装置など)が設けられ得る。コンポーネント650,652,664,654,666,668の各々は様々なバスを使って相互接続され、該コンポーネントのうちいくつかは、共通のマザーボード上に、または、他の方法によって適宜搭載され得る。
プロセッサ652は、メモリ664に記憶される命令を含むコンピューティングデバイス650内の命令を実行することができる。プロセッサは、個別および複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実装され得る。プロセッサは、たとえば、デバイス650の他のコンポーネントの調整(ユーザインターフェースの制御、デバイス650によって動作するアプリケーション、デバイス650によるワイヤレス通信など)を提供し得る。
プロセッサ652は、制御インターフェース658とディスプレイ654に結合されたディスプレイインターフェース656とを介して、ユーザと通信し得る。ディスプレイ654は、たとえばTFT LCD(Thin−Film−Transistor Liquid Crystal Display)、OLED(Organic Light Emitting Diode)ディスプレイ、または他の適切なディスプレイ技術であり得る。ディスプレイインターフェース656は、グラフィック情報と他の情報とをユーザに対して提示するディスプレイ654を駆動する適切な回路を備え得る。制御インターフェース658は、ユーザからコマンドを受け取り、それをプロセッサ652に送るために変換する。さらに、外部インターフェース662は、プロセッサ652と通信することで、他の装置とデバイス650との近距離通信を可能にするために提供され得る。外部インターフェース662は、たとえば、いくつかの実施形態において有線通信を、他の実施形態において無線通信を提供してもよく、複数のインターフェースが使用され得る。
メモリ664は、コンピューティングデバイス650内の情報を記憶する。メモリ664は、1以上のコンピュータ可読媒体、1以上の揮発性記憶装置、または1以上の不揮発性記憶装置として実装される可能性がある。さらに、拡張メモリ674が提供され、たとえば、SIMM(Single In Line Memory Module)カードインターフェースを含み得る拡張インターフェース672を介して、デバイス650に接続される。このような拡張メモリ674は、デバイス650のための追加記憶スペースを供給してもよく、デバイス650のためのアプリケーションまたは他の情報を記憶してもよい。具体的には、拡張メモリ674は、上述のプロセスを実行または補足する命令を含む場合があり、セキュアな情報を含む場合がある。したがって、たとえば、拡張メモリ674は、デバイス650のセキュリティモジュールとして提供されてもよく、デバイス650のセキュアな使用を許可する命令を用いてプログラミングされてもよい。さらに、セキュアなアプリケーションは、追加情報とともにSIMMカードを介して(たとえば、識別情報をハッキング不可能な方法でSIMMカード上に配置して)提供され得る。
メモリは、下記の通り、たとえばフラッシュメモリおよび/またはNVRAMメモリを含み得る。一実施形態において、コンピュータプログラム製品は、情報担体により有形に具体化される。コンピュータプログラム製品は、該コンピュータプログラムが実行されるとき1以上の方法(たとえば、上述の方法)を行う命令を含む。情報担体は、コンピュータまたは機械可読媒体(たとえば、トランシーバ668または外部インターフェース662を介して受信され得るメモリ664、拡張メモリ674、プロセッサ652上のメモリ)である。
デバイス650は、必要に応じて、デジタルシグナル処理回路を含み得る通信インターフェース666を介して無線で通信し得る。通信インターフェース666は、様々な様式またはプロトコル(たとえば、GSM(登録商標)ボイスコール、SMS、EMS、またはMMSメッセージ、CDMA、TDMA、PDC、WCDMA(登録商標)、CDMA2000、またはGPRS)のもと、通信を提供し得る。このような通信は、たとえばラジオ周波数トランシーバ668を介して発生し得る。さらに、狭域通信(たとえば、Bluetooth(登録商標)、WiFi(登録商標)、または他のそのような図示しないトランシーバを用いる通信)が発生し得る。さらに、GPS(Global Positioning System)レシーバーモジュール670は、デバイス650上で動作しているアプリケーションによって適宜使用され得るデバイス650に、ナビゲーションおよび位置に関係する追加の無線データを提供し得る。
さらに、デバイス650は、ユーザから発言情報を受信して該情報を使用可能なデジタル情報に変換し得る音声コーデック660を用いて、音声で通信し得る。同様に、音声コーデック660は、たとえば、デバイス650の受話器でスピーカーを介してユーザ用に可聴音を生成し得る。そのような音は、音声通話からの音、記録される音(たとえば、音声メッセージ、音楽ファイルなど)、デバイス650で動作しているアプリケーションによって生成される音を含み得る。
図示するように、コンピューティングデバイス650は、様々な形式で実装され得る。たとえば、コンピューティングデバイス650は、携帯電話680として実装され得る。さらに、コンピューティングデバイス650は、スマートフォン682、携帯情報端末、または他の類似するモバイルデバイスの一部として実装され得る。
上述の例示的実施形態のうちいくつかは、フローチャートとして示されるプロセスまたは方法として記載される。フローチャートは順次プロセスとして動作を記載するが、該動作のうちの多くは、並列的に、同時に、または一斉に実行されてもよい。さらに、動作の順番は並び替えられてもよい。プロセスは、操作が完了するときに終了されてもよいが、図に含まれない追加工程を有してもよい。プロセスは、方法、機能、手順、サブルーチン、サブプログラムなどに対応してもよい。
上記方法は、その一部がフローチャートによって図示されるが、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組み合わせによって実装されてもよい。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードにおいて実装される場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、機械またはコンピュータ可読媒体(たとえば、記憶媒体)に記憶されてもよい。1または複数のプロセッサは、必要なタスクを実行してもよい。
本明細書に記載される具体的な構造的および機能的詳細は、単に例示的実施形態を記載するための典型である。しかしながら、例示的実施形態は、多くの別の形式で具体化されるべきであって、本明細書に示される実施形態にのみ限定するものとして解釈されるべきではない。
第1、第2などの用語は本明細書において様々な要素を記載するために用いられ得るが、これらの要素はこれらの用語によって限定されるべきではない、と理解されるであろう。これらの用語は、ある要素を別の要素と区別するためにのみ用いられる。たとえば、例示的実施形態の範囲を逸脱することなく、第1要素は第2要素と称される可能性があるし、同様に第2要素は第1要素と称される可能性がある。本明細書で用いられるように、用語「および/または」は、1以上の関連する列挙項目のうち任意および全ての組み合わせを含む。
要素が別の要素に「接続される(connected)」または「結合される(coupled)」と称される場合、その要素はその別の要素に直接的に接続または結合される可能性もあるし、介在する要素が存在している場合もある、と理解されるであろう。一方、要素が別の要素と「直接的に接続される(directly connected)」または「直接的に結合される(directly coupled)」と称される場合、介在する要素は存在しない。要素間の関係を記載するために用いられる他の用語も同様に解釈されるべきである(たとえば、「間に(between)」と「直接的に間に(directly between)」、「隣接する(adjacent)」と「直接的に隣接する(directly adjacent)」など)。
本明細書で用いられる用語は、特定の実施形態のみを記載するためのものであって、例示的実施形態に限定することを意図していない。本明細書で用いられるように、文脈が別途明らかに示唆しない限り、単数形「a」、「an」、および「the」は複数形も含むことを意図している。用語「comprises」、「comprising」、「includes」、および/または「including」は、本明細書で用いられる場合、記載される特徴、要件、工程、操作、要素、および/またはコンポーネントの存在を指定するが、1以上の他の特徴、要件、工程、操作、要素、コンポーネント、および/または、それらの群の存在または追加を阻害するものではない、とさらに理解されるであろう。
さらに、いくつかの別の実施形態では、記載される機能/作用は、図面に示される順番通りに起きなくてもよい、ということに留意すべきである。たとえば、連続して示される2つの図面は、含まれる機能/作用に応じて同時に実行されてもよいし、反対の順番で実行されてもよい。
別途定義されない限り、本明細書で用いられる全ての用語(技術および科学用語を含む)は、例示的実施形態が属する技術の当業者によって通常理解されるのと同じ意味を有する。用語(たとえば、通常用いられる辞書に定義されるもの)は、関連技術の文脈における意味と一致した意味を有すると解釈されるべきであって、明細書内で明示的に定義されない限り、理想的なまたは過度に公式的な意味で解釈されるものではない、とさらに理解されるであろう。
上記の例示的実施形態と対応する詳細な説明との一部は、ソフトウェア、または、コンピュータメモリ内のデータビットに関するアルゴリズムと記号表現との観点から提示されている。これらの記載および表現は、ある当業者が他の当業者に仕事の要点を効率的に伝達するためのものである。アルゴリズムは、その用語が本明細書で用いられるように、および、その用語が一般的に用いられるように、望まれる結果を導く工程の首尾一貫とした配列と考えられる。該工程は、物理量の物理的操作を必要とするものである。通常これらの量は、必ずという訳ではないが、記憶され、転送され、組み合わされ、比較され、あるいは操作されることが可能である光、電気および磁気信号の形式をとる。これらの信号は、時折、主に通常用いられるという理由から、ビット、値、要素、記号、文字、用語、数などと称されると都合が良いということが判明している。
上述の実施形態において、プログラムモジュールまたは機能的プロセスとして実装される動作の作用と記号表現とへの参照(たとえば、フローチャートの形式で)は、特定のタスクを実行または特定の抽象データタイプを実装し、既存の構造的要素における既存のハードウェアを用いて記載および/または実装される可能性のあるルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。そのような実在のハードウェアは、1以上の中央処理装置(CPU)、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路、フィールドプログラマブルゲートアレイ(FPGA)コンピュータなどを含んでもよい。
しかしながら、これらの用語および類似する用語のうち全てが、適切な物理量に関連付けられるべきであって、これらの量に適応される単なる便宜的な表示であることを、念頭に置くべきである。特に別途記載のない限り、あるいは、上記議論から明白な通り、「処理(processing)」、「コンピューティング(computing)」、「計算(calculating)」、「決定(determining)」、「表示(displaying)」などの用語は、コンピュータシステムのレジスタおよびメモリ内の物理、電子量として表されるデータを操作し、そのデータをコンピュータシステムのメモリおよびレジスタまたは他のそういった情報記憶、伝送、あるいはディスプレイデバイス内の物理量として同様に表されるデータに転換するコンピュータシステムまたは類似する電子コンピューティングデバイスの作用およびプロセスを指す。
さらに、例示的実施形態のソフトウェア実装態様は、典型的には非一時的なプログラム記憶媒体のある形式で符号化されるか、または、ある種類の伝送媒体に実装されるということにも留意すべきである。プログラム記憶媒体は、磁気(たとえば、フロッピー(登録商標)ディスクまたはハードドライブ)または光(コンパクトディスク読み出し専用メモリ、すなわち「CD−ROM」)であってもよいし、読み出し専用またはランダムアクセスであってもよい。同様に、伝送媒体は、ツイストワイヤペア、同軸ケーブル、光ファイバ、または当該技術において公知である他の適切な伝送媒体であってもよい。例示的実施形態は、任意の所与の実施形態のこれらの態様によって限定されない。
最後に、添付した特許請求の範囲は本明細書に記載される特徴の特定の組み合わせを提示しているが、本開示の範囲は以下に特許請求される特定の組み合わせに限定されず、特定の組み合わせが添付している現在の特許請求の範囲内で具体的に列挙されているか否かを問わず、本明細書に記載される特徴または実施形態の任意の組み合わせを包含するよう拡張する、ということにも留意すべきである。

Claims (19)

  1. コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体であって、前記コンピュータ実行可能プログラムコードは、コンピュータシステムにおいて実行されるときに前記コンピュータシステムに、
    集積回路の素子を定義する第1プログラムモデルを含むソースコードの一部を受信する工程と、
    前記ソースコードの前記一部に基づき、第1レジスタ転送レベル(RTL)記述を生成する第1生成工程と、
    前記第1RTL記述に基づきライブラリコンポーネントを定義する定義工程であって、前記ライブラリコンポーネントは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを有し、前記入力インターフェースは少なくとも1つの入力変数を第1メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも1つの出力変数を第2メモリ位置に対してマッピングするように構成されている、前記ライブラリコンポーネントの前記定義工程と、
    前記集積回路を定義する第2プログラムモデルを含む前記ソースコードを受信する工程と、
    前記第1プログラムモデルに対応する前記ソースコードの前記一部を、前記ライブラリコンポーネントに置き換える工程と、
    前記ソースコードに基づき第2RTL記述を生成する第2生成工程と
    を実行させる、非一時的なコンピュータ可読記憶媒体。
  2. 前記第1プログラムモデルは、マルチプレクサ論理を含む状態機械を定義する、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  3. 前記第1プログラムモデルは、算術デコーダを定義する、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  4. 前記第1RTL記述を生成する前記第1生成工程は、
    高水準言語によって前記ソースコードの前記一部に基づき、前記第1プログラムモデルのシミュレーションを行う第1シミュレーション工程と、
    前記第1RTL記述に基づき前記第1プログラムモデルのシミュレーションを行う第2シミュレーション工程と、
    前記第1シミュレーション工程の出力を、前記第2シミュレーション工程の出力と比較する工程と
    を含む、請求項1記載の非一時的なコンピュータ可読記憶媒体。
  5. 前記第1RTL記述を生成する前記第1生成工程は、
    前記第1RTL記述を、前記集積回路の前記素子と、前記集積回路とのうちの少なくとも1つの設計仕様と比較する工程を含む、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  6. 前記入力インターフェースと前記出力インターフェースとは、高水準プログラミング言語によって定義されるハードウェアインターフェースである、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  7. 前記第2RTL記述を生成する前記第2生成工程において、
    前記ライブラリコンポーネントは、受信された入力と同じクロックサイクルにおいて出力を生成する、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  8. 前記第2RTL記述を生成する前記第2生成工程において、
    前記ライブラリコンポーネントは、前記第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第1メモリ位置への出力を書き込む、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  9. 前記第2RTL記述を生成する前記第2生成工程において、
    前記ライブラリコンポーネントは、前記第2プログラムモデルの合成に基づく入力を受信し、前記入力に基づき時間非依存型出力を生成する、
    請求項1記載の非一時的なコンピュータ可読記憶媒体。
  10. コンピュータ可読記憶媒体に記憶され、プロセッサによって実行される高位合成(HLS)ツールであって、HLSツールは集積回路のレジスタ転送レベル(RTL)記述を生成するように構成され、前記HLSツールは、
    前記集積回路の素子を定義するRTL記述に基づき、ライブラリコンポーネントを定義するように構成されているライブラリ処理モジュールであって、前記ライブラリ処理モジュールは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを含み、前記入力インターフェースは少なくとも1つの入力変数を第1メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも1つの出力変数を第2メモリ位置に対してマッピングするように構成されている、前記ライブラリ処理モジュールと、
    第1プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換えることと、前記ソースコードに基づき前記集積回路の前記RTL記述を生成することとを行うように構成されている合成モジュールであって、前記ソースコードは前記集積回路を定義する、前記合成モジュールと
    を備える、HLSツール。
  11. 前記入力インターフェースと前記出力インターフェースとは、高水準言語によって定義されるハードウェアインターフェースである、
    請求項10記載のHLSツール。
  12. 前記合成モジュールはさらに、
    前記ライブラリコンポーネントとのインターフェースを行う際に、前記集積回路の前記RTL記述の生成において受信された入力と同じクロックサイクルにおいて出力を生成するように構成されている、
    請求項10記載のHLSツール。
  13. 前記合成モジュールはさらに、
    前記ライブラリコンポーネントとのインターフェースを行う際に、前記第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第1メモリ位置への出力を書き込むように構成されている、
    請求項10記載のHLSツール。
  14. 高位合成(HLS)ツールを用いて集積回路を設計する、集積回路の設計方法であって、前記設計方法は、
    合成ツールモジュールを用いて第1レジスタ転送レベル(RTL)記述に基づきライブラリコンポーネントを定義する定義工程であって、前記第1RTL記述は前記集積回路の素子を定義するように構成されている、前記定義工程と、
    前記合成ツールモジュールを用いて、第1プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換える置換工程であって、前記ソースコードは前記集積回路を定義する、前記置換工程と、
    前記合成ツールモジュールを用いて、前記ソースコードに基づき、前記集積回路を表す第2RTL記述を生成する生成工程であって、前記第2RTL記述の生成において、第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて第1メモリ位置への出力が書き込まれる、前記生成工程と
    を備える、集積回路の設計方法。
  15. 前記第1プログラムモデルは、マルチプレクサ論理を含む状態機械を定義する、
    請求項14記載の集積回路の設計方法。
  16. 前記第1プログラムモデルは、算術デコーダを定義する、
    請求項14記載の集積回路の設計方法。
  17. 前記設計方法はさらに、
    前記集積回路の前記素子に関連付けられている入力ハードウェアインターフェースを定義する工程と、
    前記集積回路の前記素子に関連付けられている出力ハードウェアインターフェースを定義する工程と
    を備え、
    前記入力ハードウェアインターフェースは、少なくとも1つの入力変数を前記第1メモリ位置に対してマッピングするように構成され、
    前記出力ハードウェアインターフェースは、少なくとも1つの出力変数を前記第2メモリ位置に対してマッピングするように構成される、
    請求項14記載の集積回路の設計方法。
  18. 前記第2RTL記述の前記生成工程は、
    前記ライブラリコンポーネントとのインターフェースを行う際に、前記第2メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第1メモリ位置への出力を書き込む工程を含む、
    請求項14記載の集積回路の設計方法。
  19. 前記設計方法はさらに、
    前記集積回路の前記素子に関連付けられている入力ハードウェアインターフェースを定義する工程と、
    前記集積回路の前記素子に関連付けられている出力ハードウェアインターフェースを定義する工程と
    を備え、前記入力ハードウェアインターフェースと前記出力ハードウェアインターフェースとは高水準言語によって定義される、
    請求項14記載の集積回路の設計方法。
JP2016575563A 2014-06-27 2015-07-06 高位合成を用いて高効率のエントロピーデコーダを実装するための方法、hlsツール、および記憶媒体 Active JP6345814B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/317,860 US9075945B1 (en) 2014-06-27 2014-06-27 Method for implementing efficient entropy decoder by using high level synthesis
PCT/US2015/039224 WO2015200930A1 (en) 2014-06-27 2015-07-06 Method for implementing efficient entropy decoder by using high level synthesis

Publications (2)

Publication Number Publication Date
JP2017524180A true JP2017524180A (ja) 2017-08-24
JP6345814B2 JP6345814B2 (ja) 2018-06-20

Family

ID=53492011

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016575563A Active JP6345814B2 (ja) 2014-06-27 2015-07-06 高位合成を用いて高効率のエントロピーデコーダを実装するための方法、hlsツール、および記憶媒体

Country Status (7)

Country Link
US (1) US9075945B1 (ja)
EP (1) EP3162077A4 (ja)
JP (1) JP6345814B2 (ja)
KR (1) KR101834896B1 (ja)
CN (1) CN106507698B (ja)
DE (1) DE202015009978U1 (ja)
WO (1) WO2015200930A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169513B2 (en) * 2016-05-06 2019-01-01 Baidu Usa Llc Method and system for designing FPGA based on hardware requirements defined in source code
US10997296B2 (en) * 2017-03-22 2021-05-04 Oracle International Corporation System and method for restoration of a trusted system firmware state
CN107179932A (zh) * 2017-05-26 2017-09-19 福建师范大学 基于fpga高层次综合指令的优化方法及其系统
US10628142B2 (en) * 2017-07-20 2020-04-21 Texas Instruments Incorporated Loop break
CN109582511B (zh) * 2017-09-29 2022-11-15 龙芯中科技术股份有限公司 控制器的生成方法、装置及存储介质
CN107704248A (zh) * 2017-10-30 2018-02-16 北京华为数字技术有限公司 一种检测方法及设备
US20240012639A1 (en) * 2020-08-28 2024-01-11 Siemens Industry Software Inc. Method of programming a software module associated with a firmware unit of a device

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011065376A (ja) * 2009-09-16 2011-03-31 Hitachi Information & Communication Engineering Ltd 集積回路設計方法及びプログラム
US8402400B1 (en) * 2007-11-23 2013-03-19 Altera Corporation Method and apparatus for implementing a processor interface block with an electronic design automation tool

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3852741B2 (ja) 2000-10-31 2006-12-06 シャープ株式会社 高位合成方法および高位合成装置
US7302670B2 (en) * 2000-12-21 2007-11-27 Bryan Darrell Bowyer Interactive interface resource allocation in a behavioral synthesis tool
US7203912B2 (en) * 2004-07-21 2007-04-10 Rajat Moona Compiling memory dereferencing instructions from software to hardware in an electronic design
US7743352B2 (en) 2006-03-22 2010-06-22 Nec Laboratories America, Inc. Computer implemented method of high-level synthesis for the efficient verification of computer software
US7665059B2 (en) * 2006-06-07 2010-02-16 Bluespec, Inc. System and method for designing multiple clock domain circuits
US20080201671A1 (en) * 2007-02-16 2008-08-21 Atrenta, Inc. Method for generating timing exceptions
US7904850B2 (en) * 2007-11-30 2011-03-08 Cebatech System and method for converting software to a register transfer (RTL) design
JP2009157440A (ja) 2007-12-25 2009-07-16 Toshiba Corp 高位合成装置、高位合成システム、及び高位合成方法
JP2009217720A (ja) * 2008-03-12 2009-09-24 Toshiba Corp プログラム生成装置およびプログラム生成方法
US8185851B2 (en) 2009-08-12 2012-05-22 Taiwan Semiconductor Manufacturing Company, Ltd. Memory building blocks and memory design using automatic design tools
US8386749B2 (en) * 2010-03-16 2013-02-26 Advanced Micro Devices, Inc. Address mapping in virtualized processing system
US20130021350A1 (en) * 2011-07-19 2013-01-24 Advanced Micro Devices, Inc. Apparatus and method for decoding using coefficient compression
US9338510B2 (en) * 2011-07-31 2016-05-10 Google Inc. Systems and methods for presenting home screen shortcuts
US9473752B2 (en) * 2011-11-30 2016-10-18 Qualcomm Incorporated Activation of parameter sets for multiview video coding (MVC) compatible three-dimensional video coding (3DVC)
JP5910108B2 (ja) 2012-01-25 2016-04-27 株式会社ソシオネクスト 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8402400B1 (en) * 2007-11-23 2013-03-19 Altera Corporation Method and apparatus for implementing a processor interface block with an electronic design automation tool
JP2011065376A (ja) * 2009-09-16 2011-03-31 Hitachi Information & Communication Engineering Ltd 集積回路設計方法及びプログラム

Also Published As

Publication number Publication date
KR20170093702A (ko) 2017-08-16
JP6345814B2 (ja) 2018-06-20
EP3162077A1 (en) 2017-05-03
KR101834896B1 (ko) 2018-03-08
CN106507698A (zh) 2017-03-15
US9075945B1 (en) 2015-07-07
EP3162077A4 (en) 2018-01-24
DE202015009978U1 (de) 2022-06-01
WO2015200930A1 (en) 2015-12-30
CN106507698B (zh) 2019-07-23

Similar Documents

Publication Publication Date Title
JP6345814B2 (ja) 高位合成を用いて高効率のエントロピーデコーダを実装するための方法、hlsツール、および記憶媒体
JP2022036889A (ja) チップを検証する方法、装置、電子デバイス、コンピュータ可読記憶媒体及びコンピュータプログラム
US10180850B1 (en) Emulating applications that use hardware acceleration
CN112632880B (zh) 用于逻辑系统设计的编译方法、电子设备及存储介质
US20070129924A1 (en) Partitioning of tasks for execution by a VLIW hardware acceleration system
CN113835945A (zh) 芯片的测试方法、装置、设备及系统
CN112287569A (zh) 用于仿真逻辑系统设计的方法、电子设备及存储介质
US20130024178A1 (en) Playback methodology for verification components
US9690681B1 (en) Method and system for automatically generating executable system-level tests
US10303833B1 (en) Parallelizing timing-based operations for circuit designs
US10192013B1 (en) Test logic at register transfer level in an integrated circuit design
CN109426503B (zh) 提供仿真激励的方法及装置
CN114662430B (zh) 待测设计的回归测试方法、设备及存储介质
US11733295B2 (en) Methods and systems for identifying flaws and bugs in integrated circuits, for example, microprocessors
US10095822B1 (en) Memory built-in self-test logic in an integrated circuit design
CN115828805A (zh) 分割逻辑系统设计的方法、设备及存储介质
US10409624B1 (en) Data array compaction in an emulation system
US9519746B1 (en) Addressing early mode slack fails by book decomposition
KR102325612B1 (ko) 시뮬레이터를 구현하는 방법, 장치, 기기 및 매체
CN113806431A (zh) 一种传输仿真数据的方法、电子系统及存储介质
US11106846B1 (en) Systems and methods for emulation data array compaction
CN104915352B (zh) 一种验证MapReduce环境下处理数据正确性的方法和装置
JP2013020425A (ja) オープンソースソフトウェアを利用したハードウェア・ソフトウェア協調検証方法
US10289786B1 (en) Circuit design transformation for automatic latency reduction
JP2007018313A (ja) 回路設計プログラム、回路設計装置、回路設計方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180406

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180523

R150 Certificate of patent or registration of utility model

Ref document number: 6345814

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