JP5147801B2 - ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム - Google Patents

ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム Download PDF

Info

Publication number
JP5147801B2
JP5147801B2 JP2009200456A JP2009200456A JP5147801B2 JP 5147801 B2 JP5147801 B2 JP 5147801B2 JP 2009200456 A JP2009200456 A JP 2009200456A JP 2009200456 A JP2009200456 A JP 2009200456A JP 5147801 B2 JP5147801 B2 JP 5147801B2
Authority
JP
Japan
Prior art keywords
hardware
communication
calculation
calculation formula
phase
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
JP2009200456A
Other languages
English (en)
Other versions
JP2011053805A (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.)
Sharp Corp
Original Assignee
Sharp Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sharp Corp filed Critical Sharp Corp
Priority to JP2009200456A priority Critical patent/JP5147801B2/ja
Publication of JP2011053805A publication Critical patent/JP2011053805A/ja
Application granted granted Critical
Publication of JP5147801B2 publication Critical patent/JP5147801B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラムに関し、特に、ハードウェアの動作を検証できる汎用プログラミング記述を生成する装置及び方法、並びにこの方法をコンピュータにより行うための制御プログラムに関するものである。
システムLSIのハードウェア部分を設計するため、従来はRTL(レジスタ・トランスファ・レベル)での設計技術が用いられてきた。しかし大規模化、複雑化するシステムを設計するためには膨大な時間と労力が必要となることから、効率的に設計作業を進めるため高位合成技術が用いられるようになってきた。高位合成技術とは、ハードウェアの構造に関する情報は含まず、処理の動作のみを記述した動作記述から、RTL(レジスタ・トランスファ・レベル)の論理回路を自動生成する技術である。
高位合成の手法としては、例えば、特許文献1で提案されているような方法がある。この方法は、ハードウェアの動作を表すために従来からハードウェアの設計言語として用いられてきたHDL(Hardware Description Language)言語に比べ抽象度の高い言語、例えばC言語やC++言語などを用いて書かれた動作記述を解析し、設計仕様で与えられるクロック周波数で動作が可能なようにハードウェア動作をスケジューリングし、必要に応じて演算器やレジスタのアロケーションを行い、FSM(Finite State Machine:有限状態機械)で構成される制御回路と、演算などを行うデータパス回路とをHDL言語として出力するものである。
ところで、このように高位合成技術などによって得られたHDL言語で表現された回路は、設計仕様どおりに動作するかを検証する必要がある。このため、従来の検証方法ではハードウェアの検証にHDLシミュレータを用いていた。この検証方法は、HDLシミュレータにテストパターンを入力し、シミュレーションして得られる出力が期待する値かどうかを検証するものである。
しかしハードウェアの動作が複雑になり、より多くの、また長いテストパターンを必要とする場合、従来のようにHDLシミュレータを用いた検証には多大な時間と労力が必要となる。
そこで、この検証に要する時間を短縮する目的で、特許文献2や特許文献3などでは、高位合成技術を用いたハードウェアのクロックサイクル精度の動作モデルの生成方法が提案されている。
これらの技術を用いると、従来のHDLシミュレータのように、信号変化のイベント単位で行われる計算に比べ、レジスタの値をクロックサイクル単位で計算するだけでよく、シミュレーションに必要な計算量を大幅に削減できる。
例えば、特許文献3には、C言語などによるハードウェアの動作記述からCDFG(コントロール・データ・フロー・グラフ)を生成し、ハードウェアの設計仕様で要求される動作周波数でハードウェアが動作可能なようにハードウェア動作をスケジューリングし、CDFGに含まれるノードをステート毎に割り振り、各ノードが持つ動作情報を用いて動作モデルを生成し、CDFGの枝情報を用いて各ノードの動作モデルを計算する順序付けを行い、レジスタへの入力値を求めるための計算式を作成する技術が開示されている。
ここで、CDFGのノードとは、ハードウェアで実現されるべき演算動作、例えば加算、減算、乗算、除算などを表したもので、各ノードは演算の実行順序などから前後関係を持ち、有向な枝で結ばれている。例えば、図3は、図2で示すようなハードウェアの動作記述を高位合成して得られるCDFGの例を示している。この例で示すCDFG300のノードには、入力aとbを乗算するノード301、入力cとdを乗算するノード302、および各乗算ノードの結果を加算するノード303がある。上記特許文献3では、このようにしてCDFGから作成されたRTL論理回路におけるレジスタへの入力値の計算式をクロックサイクル単位で計算することで、ハードウェアのシミュレーションをHDLシミュレータに比べて高速に行う手法を提案している。
特開平5−101141号公報 特開2004−348606号公報 特開2006−139729号公報
ところで、特許文献3の手法では、ハードウェアに含まれるレジスタへの入力値の計算式をクロックサイクル精度で計算し、シミュレーションを行う。また、入力値の計算が行われるレジスタは、高位合成の過程でスケジューリングされたCDFGの各ステートに含まれるレジスタである。そして、計算するステートを順番に進めていくことでハードウェアのクロックサイクル精度のシミュレーションが実現できる。
ところが、一般的にハードウェアは、複数の並列に動作する機能ブロックで構成されることが多い。特許文献3の手法を用いて複数の機能ブロックのサイクル精度の動作モデルを生成した場合、各機能ブロックの計算を行う順番は特に決められておらず、以下のような問題が生ずる場合がある。
[課題 1]
まず、第1の課題について説明する。
データを授受するために、また機能ブロック間で動作の同期を取るために、機能ブロック間で通信動作を行う場合がある。
図4は、2つの並列に動作する機能ブロックの動作(1つのステートに対応する動作)を記述した例である。
図4に示す記述にある”par”は、続く括弧{}で囲まれた動作が並列に行われることを意味する。”send”は通信を表す関数で、データを送信する機能を持つ。第1引数には通信に用いる通信路の名前を指定し、第2引数には通信するデータを指定する。また、”receive”も通信を表す関数で、データを受信する機能を持つ。第1引数には通信に用いる通信路の名前を指定する。
図5は、図4で示すハードウェアの動作を、ブロック図として表したものである。このブロック図では、2つの機能ブロック、つまり機能ブロックA501と機能ブロックB502があり、通信路channelを用いてデータの通信を行う回路が示されている。この通信では、機能ブロックAにインスタンスされている記憶素子registerAの値が、通信路channelで機能ブロックBにインスタンスされている記憶素子registerBに送信される。
図6は、図5で示す各機能ブロックのCDFGの例を示している。
図6(a)で示すように、例えば機能ブロックAでは、stateA_0からstateA_5で示すステートで回路動作が順番に変遷していく。また図6(b)で示すように、機能ブロックBでも同様に、stateB_0からstateB_5で示すステートで順番に回路動作が変遷していく。ここでは、機能ブロックA501は、ステートstateA_3でchannelを用いた送信(send)動作601がスケジューリングされており、また一方の機能ブロックB502は、ステートstateB_3でchannelからの受信(receive)動作602がスケジューリングされているものとする。
図7は、機能ブロックA501および機能ブロックB502の各ステートで回路動作が変遷していく様子を示している。
なお、本明細書中においては、図7、図9、図10、図30、図31における丸付き数字1〜5は、クロックサイクル(C1)〜(C5)を示している。
図7に示すクロックサイクル(C3)のとき、機能ブロックA501のステートはstateA_3であり、機能ブロックB502のステートはstateB_3であるとすると、クロックサイクル(C3)で該両機能ブロックA及びB間でデータの授受が行われる。
図8は、図6で示す回路のクロックサイクル精度の検証用モデルを、特許文献3で示す手法を用いて汎用プログラミング言語のC言語で生成した例である。
図8に示す例では、通信路channelを変数chanで表し、かつ機能ブロックA501のregisterAを変数regAで表し、また機能ブロックB502のregisterBを変数regBで表している。また、各機能ブロックの各ステートの動作を関数として表している。例えば機能ブロックAのステートstateA_0の動作を関数stA_0で表している。
図6で示すように、機能ブロックA501のステートstateA_3で、通信路channelを用いた送信動作がスケジューリングされているので、関数stA_3では、channelを表す変数chanに、registerAを表す変数regAの値を代入する。また一方で、機能ブロックB502においては、ステートstateB_3で通信路channelからの受信動作がスケジューリングされているので、関数stB_3では、channelを表す変数chanの値を、registerBを表す変数regBに代入している。
図8において、関数stA_0、stA_1、stA_2、stA_4、stA_5、およびstB_0、stB_1、stB_2、stB_4、stB_5の中身は省略している。
次に、機能ブロックAと機能ブロックBのステートを表す関数(以下、計算式ともいう。)を順番に計算するシミュレータを作成する。このシミュレータを用いて回路のサイクル精度のシミュレーションを行う。特許文献3などによると、シミュレータにおいて、機能ブロックA及びBのステートを表す関数を計算する際、計算を行う順番、つまりいずれの機能ブロックのものから計算するかは特に決められていない。
図9は、機能ブロックAのステートの計算式をまず計算し、次に機能ブロックBのステートの計算式を計算するようなシミュレータの例を示している。
図9に示すシミュレータでは、図7で示すクロックのタイミング(C1)〜(C5)で各ステートの動作が計算されるものとする。図9に示す例では、クロックのタイミング(C3)で機能ブロックAのステートstateA_3を表す関数stA_3を実行し、続いて機能ブロックBのステートstateB_3を表す関数stB_3を実行したのち、機能ブロックBのregisterBを表す変数regBの値をC言語の標準入出力ライブラリ関数であるprintfを用いて標準出力にダンプする。registerBの値を調べることで、通信路channelで正しくデータが通信できたかどうか判断することができる。
図10は、図9に示すシミュレータの例に対して、機能ブロックBから計算を始める場合のシミュレータの例を示している。
図9に示すシミュレータの例と同様にstateB_3、およびstateA_3の計算が終了した時点でregBの値をダンプする。図9、及び図10で示すシミュレータを用いてシミュレーションすると、それぞれのシミュレータでは、ダンプされる値が異なる。
つまり、図9で示すシミュレータでは、機能ブロックAのregisterAの値が正しく通信される。一方、図10で示すシミュレータでは、registerAの値が正しく通信されない。それでは、図10で示すシミュレータで正しく通信できない理由を考察すると、図8で示す各ステートの計算式(ステートを示す関数)において、関数stB_3をまず計算し、続いて関数stA_3を計算するので、関数stA_3において変数chanに変数regAの値が代入される前に、関数stB_3において変数regBの値に変数chanの値を代入しているからである。つまり、機能ブロックの計算を行う順番(つまり、各ステートの関数の計算を機能ブロックA及びBのいずれからはじめるか)によっては、回路の動作がサイクル精度で正しくシミュレーションできない場合がある。
[課題 2]
次に第2の課題について説明する。
複数の通信路を用い、複数の機能ブロック間で通信を行う場合がある。
図11は、2つの並列に動作する機能ブロック間で、複数の通信路を用いて通信を行う動作を記述した例を示している。
図11に示す動作記述にある”par”は、続く括弧{}で囲まれた動作が並列に動作することを意味する。”par”に続く括弧{}の中には、更に括弧{}で囲まれた2つのブロックがある。この2つのブロックが並列に動作する。各ブロック中の回路動作はシーケンシャルに行われる。図4に示す動作記述の例と同様に、”send”は通信を表す関数で、データを送信する機能を持つ。第1引数には通信に用いる通信路の名前を指定し、第2引数には通信するデータを指定する。また、”receive”も通信を表す関数で、データを受信する機能を持つ。第1引数には通信に用いる通信路の名前を指定する。”logic_A1”、”logic_A2”、”logic_B1”、”logic_B2”の各関数は何らかの演算動作を表しており、ハードウェアでは組み合わせロジックとして高位合成されるものとする。また、”tmpA1”、”tmpA2”、”tmpB1”、”tmpB2”は、これらの関数の第1引数である。
図12は、図11で示すハードウェアの動作を、その回路を示すブロック図として表したものである。2つの機能ブロックA1201と機能ブロックB1202があり、5個の通信路channel1、channel2、channel3、channel4、channel5を用いてデータの通信を行う回路のブロック図を示している。この通信では、機能ブロックAにインスタンスされている記憶素子registerAから出力された値を、5個の通信路で通信し、また各々の通信路channel2、channel4、channel1、channel3で通信された値”tmpA1”、”tmpA2”、”tmpB1”、”tmpB2”を組み合わせロジックA1、A2、B1、B2で演算し、演算された値を機能ブロックBにインスタンスされている記憶素子registerBに入力する。
図13は、図11で示す各機能ブロックのCDFGの例を示している。図13で示すように、例えば機能ブロックAではstateA_0からstateA_5で示すステートで順番に回路動作が変遷していく。また機能ブロックBでも同様にstateB_0からstateB_5で示すステートで順番に回路動作が変遷していく。
ここでは、機能ブロックAは、ステートstateA_3で、channel1を用いた送信(send)動作がスケジューリングされており、かつchannel2を用いて受信(receive)動作を行い、受信した値を組み合わせロジック A11205を用いて演算し、演算した結果をchannel3を用いて送信する動作がスケジューリングされており、かつchannel4を用いて受信動作を行い、受信した値を組み合わせロジック A21206を用いて演算し、演算した結果をchannel5を用いて送信する動作がスケジューリングされているものとする。
また、一方の機能ブロックBは、ステートstateB_3でchannel1からの受信動作を行い、受信した値を組み合わせロジック B11207を用いて演算し、演算した結果をchannel2を用いて送信する送信動作がスケジューリングされており、かつchannel3を用いて受信動作を行い、受信した値を組み合わせロジック B21208を用いて演算し、演算した結果をchannel4を用いて送信する動作がスケジューリングされており、かつchannel5を用いた受信動作がスケジューリングされているものとする。
stateA_3およびstateB_3にスケジューリングされている送信動作、受信動作、そして組み合わせロジックを用いた演算は同一クロックサイクル中で計算される。
図14は、図11で示す回路のクロックサイクル精度の検証用モデルを、特許文献3で示す手法を用いて、汎用プログラミング言語のC言語で生成した例である。図14では、それぞれの通信路をC言語の変数で次のように表している。
・ channel1 → chan1
・ channel2 → chan2
・ channel3 → chan3
・ channel4 → chan4
・ channel5 → chan5
また、機能ブロックAのregisterAを変数regAで表し、また機能ブロックBのregisterBを変数regBで表している。更に、各機能ブロックの各ステートの動作を関数として表している。ただし図14で示す例においては、ステートstateA_3の動作を表す関数stA_3と、stateB_3の動作を表す関数stB_3以外の関数、つまりstA_0、stA_1、stA_2、stA_4、stA_5、およびstB_0、stB_1、stB_2、stB_4、stB_5の関数は省略している。また図14に示す動作モデルの例において、図12で示す各組み合わせロジックの動作を個々の関数で表している。組み合わせロジックA11205の演算を実行するための関数をlogic_A1とし、他の組み合わせロジック1206、1207、1208も同様に関数logic_A2、logic_B1、logic_B2として表している。各組み合わせロジックの演算内容については省略するが、各組み合わせロジック間で演算内容は異なるものとする。
図13で示すように、機能ブロックA1201のステートstateA_3で、通信路channel1を用いた送信動作がスケジューリングされているので、channel1を表す変数chan1にregisterAを表す変数regAの値を代入する。また、channel2から受信した値を組み合わせロジックA1で演算し、channel3に送信する動作がスケジューリングされているので、関数logic_A1を用いて変数chan2の値を演算し、chan3に代入している。また、channel4から受信した値を組み合わせロジックA2で演算し、channel5に送信する動作もスケジューリングされているので、関数logic_A2を用いて変数chan4の値を演算し、chan5に代入している。
また一方で、機能ブロックBにおいては、ステートstateB_3でchannel1から受信した値を組み合わせロジックB1で演算し、channel2に送信する動作がスケジューリングされているので、関数logic_B1を用いて変数chan1の値を演算し、chan2に代入している。また、channel3から受信した値を組み合わせロジックB2で演算し、channel4に送信する動作がスケジューリングされているので、関数logic_B2を用いて変数chan3の値を演算し、chan4に代入している。更に、channel5から受信した値をregisterBに保存するので、channel5を表す変数chan5の値をregisterBを表す変数regBに代入している。
次に、機能ブロックAと機能ブロックBのステートを表す関数を順番に計算するシミュレータを作成する。このシミュレータを用いて回路のサイクル精度のシミュレーションを行う。特許文献3などによると、シミュレータで機能ブロックの計算を行う順番は特に決められていない。図5に示す回路と同様に、図7に示すクロックサイクルC1〜C5のタイミングで各ステートが変遷しているとすると、図12に示す回路も図9、および図10で示すシミュレータでシミュレーションが行える。図12に示す回路を、図9および図10で示すシミュレータを用いてシミュレーションすると、それぞれのシミュレーションでダンプされる値が異なる。しかも、双方のシミュレータともに誤った値がダンプされる。
図9で示すシミュレータでは、関数stA_3において、組み合わせロジックA1の演算に変数chan2の値を用いる。しかし、変数chan2の値は関数stB_3の計算を実行しないと正しく求まらない(図14参照)。同様に図10で示すシミュレータでは、関数stB_3において、組み合わせロジックB1の演算に変数chan1の値を用いるが、変数chan1の値は関数stA_3の計算を実行しないと正しく求まらない(図14参照)。
つまり、機能ブロックの計算を行う順番(各ステートを表す関数の計算を機能ブロックA及びBのいずれのものから行うか)によらず、常に回路の動作が正しくサイクル精度でシミュレーションできない。
本発明は、上記のような問題点を解決するためになされたもので、ハードウェアを汎用プログラミング言語で表現した記述として、機能ブロックの計算する順番によらず、サイクル精度で正確に検証する動作モデルを生成することができるハードウェア検証用プログラミング記述生成装置、及びハードウェア検証用プログラミング記述生成方法、並びにこの方法をコンピュータにより行うための制御プログラムを得ることを目的とする。
本発明に係るハードウェア検証用プログラミング記述生成装置は、ハードウェアの動作を検証可能な汎用プログラミング記述による動作モデルを生成する装置であって、ハードウェアの構造に関する情報を含まず、回路動作のみが記述された並列動作の記述を含むハードウェアの動作記述から、該ハードウェアを並列に動作し、かつ通信動作が行われる複数の機能ブロックに分割し、分割された機能ブロック毎に動作記述を解析して得られる動作情報から、該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、ハードウェア仕様として要求される動作周波数で、生成したコントロールデータフローグラフをスケジューリングして各ステートに回路動作を割り振るスケジューリング手段と、該複数の機能ブロックの各々における通信動作を含むステートでのハードウェアの動作を表す計算式を、通信動作を基準として、送信動作が行われるまでの動作の計算式、および受信動作が行われてからの動作の計算式を含む、該ステートを構成する2以上のフェーズで計算される複数の計算式に分割して生成する計算式生成手段と、ハードウェアを汎用プログラミング言語で表現した記述による、該分割した2以上のフェーズで計算される計算式に基づいてサイクル精度で該ハードウェアを検証する動作モデルとして、該ステートの動作モデルを分割した2以上のフェーズの動作モデルを生成する動作モデル生成手段とを有し、該動作モデル生成手段は、該2以上のフェーズの動作モデルを、該2以上のフェーズで計算される計算式のうちで、他の計算式に影響を与える計算式が、他の計算式に影響を与えていない計算式よりも先に計算されるように生成するものであり、そのことにより上記目的が達成される。
本発明は、上記ハードウェア検証用プログラミング記述生成装置において、前記動作モデル生成手段は、前記通信動作を基準として分割した計算式を用い、最初に送信動作の計算式を計算するフェーズと、次に受信動作の計算式を計算するフェーズとの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成するものであることが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成装置において、前記動作モデル生成手段は、前記通信動作を基準として分割した計算式を用い、2つ以上の機能ブロックが存在する場合に、全ての機能ブロックにおける送信動作の計算式を計算するフェーズと、次に全ての機能ブロックにおける受信動作の計算式を計算するフェーズとの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成するものであることが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成装置において、前記動作モデル生成手段は、前記通信動作を基準として分割して得られた2以上の計算式のうちの1つを、2つ以上の機能ブロックが存在し、かつ2つ以上の通信路を用い、かつ通信路で通信する値が他の通信に依存している場合、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズとの計3フェーズに分けて計算し、ハードウェアをサイクル精度で検証する動作モデルを生成するものであることが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成装置において、前記動作モデル生成手段は、前記2フェーズ目の計算において、任意の通信路の計算式を計算する際に、該通信路が依存している通信路の計算を先に行うような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成するものであることが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成装置において、前記動作モデル生成手段は、前記2フェーズ目の計算において、通信路の計算式を計算した結果が3フェーズ目の計算において用いられるような通信路を抽出し、抽出された通信路の計算式から計算を開始するような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成するものであることが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成装置において、前記動作モデル生成手段は、前記複数の通信路の計算式を計算する処理で、通信路の計算式が計算済みかどうかを示すフラグを用い、1フェーズ目の計算において、全ての通信路についてのフラグを未計算の状態に設定し、2フェーズ目の計算において、通信路の計算式が計算された後、フラグを計算済みの状態に設定することで、ハードウェアをサイクル精度で検証する動作モデルを生成するものであることが好ましい。
本発明に係るハードウェア検証用プログラミング記述生成方法は、コンピュータによりハードウェアの動作を検証可能な汎用プログラミング記述による動作モデルを生成する方法であって、該コンピュータにおけるコントロールデータフローグラフ生成手段が、ハードウェアの構造に関する情報を含まず、回路動作のみが記述された並列動作の記述を含むハードウェアの動作記述から、該ハードウェアを並列に動作し、かつ通信動作が行われる複数の機能ブロックに分割し、分割された機能ブロック毎に動作記述を解析して得られる動作情報から、該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、該コンピュータにおけるスケジューリング手段が、ハードウェア仕様として要求される動作周波数で、生成したコントロールデータフローグラフをスケジューリングして各ステートに回路動作を割り振るスケジューリングステップと、該コンピュータにおける計算式生成手段が、該複数の機能ブロックの各々における通信動作を含むステートでのハードウェアの動作を表す計算式を、通信動作を基準として、送信動作が行われるまでの動作の計算式、および受信動作が行われてからの動作の計算式を含む、該ステートを構成する2以上のフェーズで計算される複数の計算式に分割して生成する計算式生成ステップと、該コンピュータにおける動作モデル生成手段が、該ハードウェアを汎用プログラミング言語で表現した記述による該分割した2以上のフェーズで計算される計算式に基づいてサイクル精度で該ハードウェアを検証する動作モデルとして、該ステートの動作モデルを分割した2以上のフェーズの動作モデルを生成する動作モデル生成ステップとを有し、該動作モデル生成ステップでは、該動作モデル生成手段が、該2以上のフェーズの動作モデルを、該2以上のフェーズで計算される計算式のうちで、他の計算式に影響を与える計算式が、他の計算式の影響を与えていない計算式よりも先に計算されるように生成するものであり、そのことにより上記目的が達成される。
本発明は、上記ハードウェア検証用プログラミング記述生成方法において、前記動作モデル生成ステップは、前記動作モデル生成手段が、前記通信動作を基準として分割した計算式を用い、最初に送信動作の計算式を計算するフェーズと、次に受信動作の計算式を計算するフェーズの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有することが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成方法において、前記動作モデル生成ステップは、前記動作モデル生成手段が、前記通信動作を基準として分割した計算式を用い、2つ以上の機能ブロックが存在する場合に、全ての機能ブロックにおける送信動作の計算式を計算するフェーズと、次に全ての機能ブロックにおける受信動作の計算式を計算するフェーズの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有することが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成方法において、前記動作モデル生成ステップは、前記動作モデル生成手段が、前記通信動作を基準として分割して得られた2以上の計算式のうちの1つを、2つ以上の機能ブロックが存在し、かつ2つ以上の通信路を用い、かつ通信路で通信する値が他の通信に依存している場合、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズの計3フェーズに分けて計算し、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ことが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成方法において、前記動作モデル生成ステップは、前記動作モデル生成手段が、前記2フェーズ目の計算において、任意の通信路の計算式を計算する際に、該通信路が依存している通信路の計算を先に行うような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有するものであることが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成方法において、前記動作モデル生成ステップは、前記動作モデル生成手段が、前記2フェーズ目の計算において、通信路の計算式を計算した結果が3フェーズ目の計算において用いられるような通信路を抽出し、抽出された通信路の計算式から計算を開始するような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有することが好ましい。
本発明は、上記ハードウェア検証用プログラミング記述生成方法において、前記動作モデル生成ステップは、前記動作モデル生成手段が、複数の通信路の計算式を計算する処理で、通信路の計算式が計算済みかどうかを示すフラグを用い、1フェーズ目の計算において、全ての通信路についてのフラグを未計算の状態に設定し、2フェーズ目の計算において、通信路の計算式が計算された後、フラグを計算済みの状態に設定することで、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有することが好ましい。
本発明に係る制御プログラムは、ハードウェアの動作を検証可能な汎用プログラミング記述による動作モデルを生成する方法における各ステップの処理をコンピュータにより行うための制御プログラムであって、前記各ステップの処理は、上述したハードウェア検証用プログラミング記述生成方法における各処理ステップであり、そのことにより上記目的が達成される。
以下、本発明の作用について説明する。
本発明においては、ハードウェア検証用プログラミング記述生成装置において、ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、該ハードウェアを機能ブロックに分割し、分割された機能ブロック毎にコントロールデータフローグラフを生成し、ハードウェア仕様として要求される動作周波数でコントロールデータフローグラフをスケジューリングして各ステートに回路動作を割り振し、通信動作を含むステートに対応するハードウェアの動作を表す計算式を、通信動作を基準として、送信動作までの計算式、および受信動作からの計算式を含む2以上の計算式に分割して生成し、このような2以上の計算式から、該ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成するので、上記課題1が解決される。
つまり、シミュレータが動作モデルをこれを表す計算式に基づいて検証する際、シミュレータは、個々の機能ブロックにおける通信動作を含むステートの回路動作の計算を、通信動作の前後で分けて行うこととなる。これにより、通信の結果変動する値を、通信の前の経路動作の計算に用いることがなくなり、データを授受するために、また機能ブロック間で動作の同期を取るために、機能ブロック間で通信動作を行う場合でも、機能ブロックの計算を行う順番に(各ステートの回路動作をいずれの機能ブロックから行うかに)よらずに、正しく回路の動作をサイクル精度でシミュレーションすることができる。
また、ハードウェア検証用プログラミング記述生成装置において、2つ以上の機能ブロックが存在し、かつ2つ以上の通信路を用い、かつ通信路で通信する値が他の通信に依存している場合、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズの計3フェーズの計算が行われるよう、ハードウェアをサイクル精度で検証する動作モデルを生成するので、そのことにより上記課題2が解決される。つまり、複数の通信路を用い、複数の機能ブロック間で通信を行う場合でも、機能ブロックの計算を行う順番によらず、常に回路の動作が正しくサイクル精度でシミュレーションできる。
以上のように本発明によれば、ハードウェアを汎用プログラミング言語で表現した記述として、機能ブロックの計算する順番によらず、サイクル精度で正確に検証する動作モデルを生成することができるという効果がある。
図1は、本発明の実施形態に係るハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステムの基本処理を説明する図である。 図2は、ハードウェアの動作記述の例を示す図である。 図3は、図2に示すハードウェアの動作記述を高位合成して得られるCDFGの例を示す図である。 図4は、2つの並列動作を持つハードウェアの動作記述の例を示す図である。 図5は、図4に示すハードウェアを示すブロック図である。 図6は、図4に示すハードウェアの動作記述を高位合成して得られる各機能ブロックのCDFGを示す図である。 図7は、図4に示すハードウェアのタイミングチャートの例を示す図である。 図8は、図4に示すハードウェアの従来のサイクル精度の動作モデルの例を示す図である。 図9は、図4に示すハードウェアの従来のサイクル精度のシミュレータの例を示す図である。 図10は、図9に示すシミュレータの別の従来例を示す図である。 図11は、2つの並列動作を持つハードウェアの動作記述の例を示す図である。 図12は、図11に示すハードウェアを示すブロック図である。 図13は、図11に示すハードウェアの動作記述を高位合成して得られる各機能ブロックのCDFGを示す図である。 図14は、図11に示すハードウェアの従来のサイクル精度の動作モデルの例を示す図である。 図15は、本発明の実施形態によるハードウェア検証用プログラミング記述生成装置を説明する図であり、送信ノードの抽出、受信ノードの抽出、および通信の依存関係を調査するためのアルゴリズムを示している。 図16は、図4に示すハードウェアから本発明の手法を用いて生成した、機能ブロックAに対応する第1及び第2フェーズ目の動作モデルを示す図である。 図17は、図4に示すハードウェアから本発明の手法を用いて生成した、機能ブロックBに対応する第1及び第2フェーズ目の動作モデルを示す図である。 図18は、図4に示すハードウェアに対応する、本発明の手法を用いたサイクル精度のシミュレータの例を示す図である。 図19は、図4に示すハードウェアに対応する、本発明の手法を用いたサイクル精度のシミュレータとして、図18に示すシミュレータとは別の例を示す図である。 図20は、図11に示すハードウェアの通信の依存関係を表で示す図である。 図21は、通信の情報を保存するデータ構造の例を示す図である。 図22は、図21に示すデータ構造の配列を示す図である。 図23は、図11に示すハードウェアから本発明の手法を用いて生成した、機能ブロックA及びBの第1フェーズ目の動作モデルを示す図である。 図24は、図11に示すハードウェアの通信動作を表した、本発明による検証モデルの例を示す図である。 図25は、図11に示すハードウェアから本発明の手法を用いて生成した、機能ブロックA及びBの第2フェーズ目の動作モデルを示す図である。 図26は、通信の情報を保存するデータ構造の例を示す図である。 図27は、図11に示すハードウェアの通信動作を表した、本発明による動作モデルの例を示す図である。 図28は、図11に示すハードウェアから本発明の手法を用いて生成した、機能ブロックA及びBの第2フェーズ目の動作モデルを示す図である。 図29は、図11に示すハードウェアから本発明の手法を用いて生成した、機能ブロックA及びBの第3フェーズ目の動作モデルを示す図である。 図30は、図11に示すハードウェアに対応する、本発明の手法を用いたサイクル精度のシミュレータの例を示す図である。 図31は、図11に示すハードウェアに対応する、本発明の手法を用いたサイクル精度のシミュレータの例として、図30に示すシミュレータとは別の例を示す図である。
以下、図面を用いて本発明の実施の形態を説明する。
図1は、本発明の実施形態によるハードウェア検証用プログラミング記述生成装置を説明する図であり、ハードウェアをサイクル精度で検証可能なプログラミング記述を生成するための、高位合成の手段を具備する装置の例を示している。
なお、本実施形態で述べるハードウェア検証用プログラミング記述の高位合成においては、回路をその機能単位でブロックに分割した形で動作を記述でき、各機能ブロックを並列動作可能なハードウェアの動作記述を可能とする。また本実施形態における、ハードウェアをサイクル精度で検証可能なプログラミング記述は、汎用プログラミング言語のC言語によるものとする。なお他の言語でも同様に記述できる。
本発明の実施形態に係るハードウェア検証用プログラミング記述生成装置として機能するコンピュータシステム100は、モニタ装置1、キーボードなどの入力装置2、計算機本体3を含み、計算機本体3は、CPU(中央演算処理ユニット)31、メモリなどの可読記憶媒体32、および磁気ディスクなどの可読記憶媒体33を備えている。磁気ディスクなどの可読記憶媒体33には、本発明の、ハードウェアをサイクル精度で検証可能なプログラミング記述を高位合成するためのハードウェア高位合成プログラム4が含まれる。
このハードウェア高位合成プログラム4によりCPU31には以下の手段が構築される。
・ ハードウェアの動作記述を構文解析・字句解析する手段(構文解析・字句解析手段)401
・ ハードウェアの動作記述を、機能ブロック単位で並列動作するハードウェアの回路ブロック(機能ブロック)に分割する手段(機能ブロック分割手段)402
・ 各機能ブロックに対して、CDFG(コントロール・データフロー・グラフ)を生成する手段(CDFG生成手段)403
・ 各機能ブロックに対応する、ハードウェアに与えられた設計仕様の動作周波数の制約を満たすためにCDFGのノードをスケジューリングし、ノードをステートに割り振る手段(スケジューリング・ステート割り振り手段)404
・ 各機能ブロックにおける、手段404でスケジューリングされたステートのノードのうち、通信における送信動作を表すノードを抽出する手段(送信ノード抽出手段)405
・ 各機能ブロックにおける、手段404でスケジューリングされたステートのノードのうち、通信における受信動作を表すノードを抽出する手段(受信ノード抽出手段)406
・ 各機能ブロックにおける、手段405で抽出された送信動作を表すノードのうち、送信するデータが他の通信から影響を受けているか、また手段406で抽出された受信動作を表すノードのうち、受信したデータが他の通信に影響を与えるかを調査する手段(通信依存調査手段)407
・ 各機能ブロックに対して、手段407で調査した結果、他の通信に依存している送信動作がある場合、該通信を識別する情報と、該通信が依存している通信を識別する情報と、該通信の計算式と、該計算式の未実行・実行済みを判別するためのフラグとを含むデータ構造を作成し、該データ構造を登録するためのリストを作成し、リストにデータ構造を登録、削除するなどの制御記述を生成する手段(通信リスト制御記述生成手段)408
・ 各機能ブロックに対して、手段408で生成した制御記述を用いて、通信の計算式を計算する順番を制御する記述を生成する手段(計算順序制御記述生成手段)409
・ 各機能ブロックに対して、通信動作を含むステートの計算を、通信動作を基準として複数の計算フェーズに分割し、各計算フェーズに対応する分割された計算を順番に実行することで、ハードウェアをサイクル精度で検証できる動作モデルを、プログラミング言語で表現した記述として生成する手段(動作モデル記述生成手段)410
ここで、手段401、手段402,手段403、および手段404については、特許文献3で述べられている手法を用いることとする。
つまり、構文解析・字句解析部401は、図4に示すようなハードウェアの動作記述を解析して論理回路を構成する。ブロック分割部402は、構文解析・字句解析部401で得られた論理回路を並列動作の記述に従って図5に示すような複数の機能ブロックに分割する。
さらに、CDFG生成部403は、例えば図5に示す各機能ブロックに関するCDFGを作成する。このCDFGは、ハードウェアの動作がノードとノード間を接続する枝とを用いて表現されたものである。ノードはハードウェア中で動作する演算などを示し、ノード間の枝はデータの流れを示している。あるノードから出力されたデータは、そのノードに接続されている枝を通り、接続先のノードの入力として用いられる。
さらに、スケジューリング・ステート割り振り手段404は、CDFGの各ノードについてハードウェアに与えられた動作周波数で回路が動作可能なようにスケジューリングを行う。図6(a)及び(b)は、図5に示す各機能ブロックA及びBに対応するCDFGにスケジューリングを施したものを示している。
以下、図5に示す2つの機能ブロックA及びBの間で、1つの通信路を用いて通信を行うハードウェアの、サイクル精度で検証可能な動作モデルを、プログラミング言語で表現した記述として生成する具体的な処理を実施例1として説明する。
また、2つの機能ブロック間で、依存関係のある複数の通信路を用いて通信を行うハードウェアの、サイクル精度で検証可能な動作モデルを、プログラミング言語で表現した記述として生成する具体的な処理を実施例2として説明する。
(実施例1)
実施例1では、図4で示すような回路動作に対して高位合成を行い、図5で示すようなブロック構成のハードウェアを、サイクル精度で検証可能な動作モデルを生成することを考える。
図4に示す回路動作を、図1で示すハードウェア高位合成プログラム4で高位合成すると、図1のCDFG生成手段403、およびスケジューリング・ステート割り振り手段404を経て、図6で示すようなスケジューリングされたCDFGが、機能ブロックAのCDFG(図6(a))及び機能ブロックBのCDFG(図6(b))として得られる。
次に各機能ブロックについて、送信ノード、および受信ノードを抽出する。また抽出する際に、送信ノード、受信ノードが他の通信に依存しているかどうか調査する。
図15は、送信ノード抽出手段405、受信ノード抽出手段406、および通信の依存調査手段407のアルゴリズムを示したものである。アルゴリズムの詳細は次のとおりである。
s1:抽出開始
送信ノード、および受信ノードを抽出する処理(抽出処理)を開始する。
s2:抽出するステートを選択
機能ブロックの複数のステートから任意のステートを選択する。
s3:全ステートでの抽出完了?
機能ブロックの全てのステートで抽出処理が終了したか判定する。
終了していない場合は、s4に進む。
終了している場合は、s14に進む。
s4:ステートに含まれるノードを収集
CDFGデータベースd1から抽出対象ステートに含まれる全てのノード情報を収集する。
s5:調査するノードを選択
s4で収集したノードから任意のノードを選択する。
s6:全ノードの調査完了?
ステートの全てのノードで調査処理が終了したか判定する。
終了していない場合は、s7に進む。
終了している場合は、s2に進む。
s7:ノード情報を調査
ノードの動作情報を調査する。
例えば、ノードの動作情報は、送信ノードあるいは受信ノードであることを示す情報、通信の依存関係を示す情報を含んでいる。
s8:送信ノード?
ノードの動作情報が送信を表すノードであるか判定する。
送信ノードである場合、s10に進む。
送信ノードでない場合、s9に進む。
s9:受信ノード?
ノードの動作情報が受信を表すノードであるか判定する。
受信ノードである場合、s12に進む。
受信ノードでない場合、s5に進む。
s10:通信の依存関係を調査
送信するデータが、同一ステップ中に存在する他の通信ノードから影響を受けているかどうか、依存関係を調査する。依存関係は、CDFGのノードは有向性のある枝で接続しているので、枝に沿ってノードをたどることで調査できる。
例えば、図13で示すようなCDFGの場合、送信ノード1304の接続をたどっていくと、ノード1303に接続されており、更にたどると、受信ノード1302に接続されている。つまり、送信ノード1304は、受信ノード1302から影響を受けていることが分かる。
s11:送信ノードのデータベースに保存
s10で調査した依存関係の有無を含め、送信ノードの動作情報を、送信ノードを集めたデータベースd2に保存する。
s12:通信の依存関係を調査
受信したデータが、同一ステップ中に存在する他の通信ノードに影響を与えているかどうか、依存関係を調査する。依存関係は、CDFGのノードは有向性のある枝で接続しているので、枝に沿ってノードをたどることで調査できる。
例えば、図13で示すようなCDFGの場合、受信ノード1305の接続をたどっていくと、ノード1306に接続されており、更にたどると、送信ノード1307に接続されている。つまり、受信ノード1305は、送信ノード1307に影響を与えていることが分かる。
s13:受信ノードのデータベースに保存
s12で調査した依存関係の有無を含め、受信ノードの動作情報を、受信ノードを集めたデータベースd3に保存する。
s14:抽出終了
このアルゴリズムを図6のCDFGに当てはめると、機能ブロックAにおいては、s8の処理で送信ノードにノード601が該当すると判断され、データベースd2に登録される。また、一方の機能ブロックBにおいては、s9の処理で受信ノードにノード602が該当すると判断され、データベースd3に登録される。
2つの機能ブロックA及びB間で、1つの通信路を用いて通信を行うハードウェアの場合、図1に示す、通信のリストを制御する記述の生成手段408と、計算順序を制御する記述の生成手段409は用いない。これらの手段は複数の通信路を用いた通信で必要となるので、後述の実施例2で説明する。
次に、抽出した送信ノードのデータベースd2と、受信ノードのデータベースd3の情報を用いて、送信動作までの計算式と、受信動作からの計算式とから、ステートの動作をサイクル精度で検証できる動作モデルを生成する。
まず、機能ブロックAのステートstateA_3の動作モデルを作成する。図6の機能ブロックAのステートstateA_3に含まれるノード601が、送信ノードとしてデータベースd2に登録されているので、stateA_3における送信動作までの計算を行うフェーズは、図16に示すようなC言語の記述として生成する。
関数stA_3_1stPhaseは、stateA_3の送信動作までの計算を行うフェーズの動作モデルである。ここではregisterAを表す変数regAの値を、通信路を表す変数chanに代入している。一方の関数stA_3_2ndPhaseは、stateA_3の受信動作からの計算を行うフェーズの動作モデルであるが、このステートでは受信動作が無いため、関数の中身は空である。
次に、機能ブロックBのステートstateB_3の動作モデルを作成する。図6の機能ブロックBのステートstateB_3に含まれるノード602が、受信ノードとしてデータベースd3に登録されているので、stateB_3における受信動作からの計算を行うフェーズは、図17に示すようなC言語の記述として生成する。関数stB_3_2ndPhaseは、stateB_3の受信動作からの計算を行うフェーズの動作モデルである。ここでは通信路channnelを表す変数chanの値を、registerBを表す変数regBに代入している。一方の関数stB_3_1stPhaseは、stateB_3の送信動作までの計算を行うフェーズの動作モデルであるが、このステートでは送信動作が無いため、関数の中身は空である。以後の説明では、送信動作までの計算を行うフェーズを第1フェーズ目として表現し、受信動作からの計算を行うフェーズを第2フェーズ目として表現する。
2つの計算フェーズで構成された動作モデルを用いたシミュレータを作成し、シミュレーションを走らせ、動作が正しく計算されるか確認する。
図18で示すシミュレータは、機能ブロックAのステートの計算式をまず計算し、次に機能ブロックBのステートの計算式を計算するようなシミュレータの例である。
図18のシミュレータでは、図7で示すクロックのタイミングC1〜C5で各ステートの動作が計算されるものとする。図18の例では、機能ブロックAのステートstateA_3の第1フェーズ目の関数stA_3_1stPhaseを計算し、続いて機能ブロックBのステートstateB_3の第1フェーズ目の関数stB_3_1stPhaseを計算する。次に機能ブロックAの第2フェーズ目の関数stA_3_2ndPhaseを計算し、機能ブロックBの第2フェーズ目の関数stB_3_2ndPhaseを計算する。
機能ブロックAのステートstateA_3と機能ブロックBのstateB_3の計算を完了した時点で、機能ブロックBのregisterBを表す変数regBの値をC言語の標準入出力ライブラリ関数であるprintfを用いて標準出力にダンプする。registerBの値を調べることで、通信路channelで正しくデータが通信できたかどうか判断することができる。
図19は、図18で示すシミュレータに対して、機能ブロックBから計算を始める場合のシミュレータの例を示している。図18の例と同様にstateB_3、およびstateA_3の計算が終了した時点でregBの値をダンプする。
図18、及び図19で示すシミュレータを用いて、図5に示す機能ブロックA及びBのタイミングC3のステートの動作をシミュレーションすると、ダンプされる値は同じである。どちらの計算でも、変数chanに変数regAの値を代入し終えてから、変数regBに変数chanの値を代入している。つまり、どちらのシミュレータでもregisterAの値が、正しくregisterBに送信されている。
以上のことから、通信動作を含むステートにおいて、該ステートのハードウェアの動作を表す計算式を、通信動作を基準として、送信動作までの計算式、および受信動作からの計算式の2つの計算式に分割して生成し、かつ送信動作までの計算式を計算するフェーズと、次に受信動作からの計算式を計算するフェーズの計2フェーズの計算を順番に行うことで、機能ブロックの計算する順番によらず正確にサイクル精度でシミュレーションが可能となる。
(実施例2)
本実施例2では、図11で示すような回路動作に対して高位合成を行い、図12で示すようなブロック構成のハードウェアを、サイクル精度で検証可能な動作モデルを生成することを考える。
図11で示すような回路動作を、図1で示すハードウェア高位合成プログラム4で高位合成すると、図1のCDFG生成手段403、およびスケジューリング・ステート割り振り手段404を経て、図13(a)、(b)で示すようなスケジューリングされたCDFGが得られる。
次に各機能ブロックについて、送信ノード、および受信ノードを抽出する。また抽出する際に、送信ノード、受信ノードが他の通信に依存しているかどうか調査する。送信ノード、受信ノードの抽出、および通信の依存関係の調査手段については、上記実施例1で、図15を用いて説明したアルゴリズムを用いる。
本実施例2では、図15に示すアルゴリズムの詳細な説明は省略する。
図15に示すアルゴリズムを図13に示すCDFGに当てはめると、機能ブロックAにおいては、ステップs8の処理で送信ノードにノード1301、1304、および1307が該当すると判断され、データベースd2に登録される。またステップs9の処理で受信ノードにノード1302、および1305が該当すると判断され、データベースd3に登録される。
一方の機能ブロックBにおいては、ステップs8の処理で送信ノードにノード1310、および1313が該当すると判断され、データベースd2に登録される。またステップs9の処理で受信ノードにノード1308、1311、および1314が該当すると判断され、データベースd3に登録される。更に通信の依存関係を調査する。
図20は、データベースd2とd3に登録されているノード情報について、通信の依存関係を、CDFGのノードと枝の情報から調査して得られた結果を表している。通信動作の番号(M1〜M10)は説明のために付けた番号で、他に意味はない。ブロックの列は、該通信動作が含まれる機能ブロックを表している。通信路の列は、通信動作が用いる通信路を識別するためのものである。影響を受ける通信の列は、該通信が影響を受ける通信路を識別するためのもので、影響を与える通信の列は、該通信が影響を与える通信路を識別するためのものである。
図20に示す情報をもとに、図13のCDFGにおいて通信動作が行われる機能ブロックAのステートstateA_3、および機能ブロックBのステートstateB_3のサイクル精度の動作モデルを作成する。
動作モデルは、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または通信する値が他の通信路に影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズの計3フェーズの計算で構成される。
以降の説明では、最初のフェーズを第1フェーズ目、次のフェーズを第2フェーズ目、最後のフェーズを第3フェーズ目と表現して説明する。第1フェーズ目に含まれる通信としては、図20に示す表から、通信の種類が送信(send)であり、かつ影響を受ける通信が無いものは、通信動作M1のみである。
次に第2フェーズ目に含まれる通信としては、図20に示す表から、通信の種類が送信(send)であり、かつ影響を受ける通信があるものは、通信動作M3、M5、M7、M9の4つであり、通信の種類が受信(receive)であり、かつ影響を与える通信があるものは、通信動作M2、M4、M6、M8の4つである。
最後の第3フェーズ目に含まれる通信としては、図20に示す表から、通信の種類が受信(receive)であり、かつ影響を与える通信が無いものは、通信動作M10のみである。第2フェーズ目の通信について、通信を識別するための情報と、該通信が依存している通信を識別する情報と、該通信の計算式などの情報を格納するためのデータ構造を作成する。
図21は、他の通信に依存している通信動作について、各種情報を格納するためのデータ構造をC言語の構造体を用いて表現した例である。該構造体の中では、通信を識別するための情報としてdestinationという変数を用いている。また通信が依存している通信を識別するための情報として、sourceという変数を用いている。更に通信動作を表す関数を指し示すポインタとして、関数ポインタfunctionを用いている。
続いて、このデータ構造を登録するためのリストを作成する。本実施形態の実施例2では、配列として表現した場合を説明する。
図22は、図21のデータ構造を配列として実装した例であり、図23に示すように4個の要素を持つ配列としている。
それでは各フェーズに含まれる通信動作の計算について、例を用いて説明する。
〔第1フェーズ目の通信動作の計算〕
図23は、図12に示す機能ブロックAのステートstateA_3と、図12に示す機能ブロックBのステートstateB_3の第1フェーズ目の計算を関数で表した動作モデルを示している。関数stA_3_1stPhaseでは、通信動作M1の通信を表現するために、通信路channel1を表す変数chan1に、registerAを表す変数regAの値を代入している。また、第2フェーズ目の計算で用いるデータ構造を図21で示す構造体を用い、各メンバ変数とメンバ関数を設定し、図22で示すデータ構造のリストに登録している。
図23に示す構造体に設定している値で、c2、c3、c4、c5は通信路を識別するためのものである。これらは、C言語のenumなどを用いて表現できる。また、function_c2toc3、function_c4toc5、function_c1toc2、function_c3toc4は通信動作を計算するための関数である。
図24は、通信動作を計算するための関数の例であり、図20に示す表にある通信動作M2、M3、M4、M5、M6、M7、M8、およびM9について表している。通信の種類が送信(send)であり、かつ影響を受ける通信である通信動作M3、M5、M7、M9と、通信種類が受信(receive)であり、かつ影響を与える通信である通信動作M2、M4、M6、M8については、相互に影響を及ぼす送信と受信をペアにすることができる。
例えば、通信動作M3に着目すると、この通信は通信路channel3を用いた送信である。通信路channel3に影響を与える通信動作としては通信動作M2がある。通信動作M2とM3をペアにし、通信動作M2で受信したデータをもとに通信動作M3で送信するという一連の動作を関数で表す。
図24で表す関数function_c2toc3が、通信動作M2とM3の一連の動作を表した関数に該当する。残りの通信動作については、通信動作M4とM5をペアにし、また通信動作M6とM7をペアにし、また通信動作M8とM9をペアにし、それぞれの通信動作を関数で表す。通信動作M4とM5のペアに該当する関数は、function_c4toc5であり、通信動作M6とM7のペアに該当する関数は、function_c1toc2であり、通信動作M8とM9のペアに該当する関数は、function_c3toc4である。
これらの関数では、図21のデータ構造と、図22のデータ構造の配列を用い、通信動作が依存する通信動作を先に演算するようにしている。
例えば、通信の関数function_c2toc3について説明する。この関数については、通信路channel2で受信した値を組み合わせロジックA1で演算し、演算した結果を通信路channel3に送信する動作を表している。この関数では、まず図22に示す配列から各データ構造を調べ、通信を識別する情報、つまりデータ構造のメンバ変数destinationがchannel2であるデータ構造を見つける。図23で示している配列の設定によると、メンバ変数destinationがchannel2であるデータ構造は、配列の3番目の要素であるtransaction[2]となる。所望のデータ構造が見つかれば、そのデータ構造が持つ関数へのポインタを表すメンバ変数functionで示される関数を先に実行する。配列の3番目の要素であるtransaction[2]のメンバ変数functionで示される関数は、図23で示している設定によると、関数function_c1toc2となる。よって関数function_c1toc2を先に実行する。続いて、通信の関数function_c2toc3の計算、つまり組み合わせロジックA1を用いた演算を行う。
また図23において、関数stB_3_1stPhaseでは第1フェーズ目に該当する通信動作は無い。第2フェーズ目の計算で用いるデータ構造体を図21で示す構造体を用い、機能ブロックAと同様に各メンバ変数とメンバ関数を設定する。
〔第2フェーズ目の通信動作の計算〕
図25は、第2フェーズ目の計算を関数で表した動作モデルの例を示している。この例では、通信路の計算式を計算した結果が、3フェーズ目の計算において用いられるような通信路について、計算を行っている。第3フェーズ目で計算される通信動作はM10である。通信動作M10の通信路はchannel5であり、通信路channel5に対して送信動作を行う通信を表した関数は、図24において、function_c4toc5である。よってfunction_c4toc5の計算を行う。第1フェーズ目の説明で述べたように、図24に示す関数では、通信の依存関係に沿って、依存関係がある通信の計算を先に進めていく。具体的には、次の順番で計算される。
1.function_c1toc2
2.function_c2toc3
3.function_c3toc4
4.function_c4toc5
また、第2フェーズ目の通信動作の計算において他の手順で計算を進めても良い。図22に示すデータ構造に、通信路の計算式が計算済みかどうかを示すフラグを追加し、第1フェーズ目の通信動作の計算時点において該フラグを未計算の状態に設定し、第2フェーズ目の通信動作の計算において、通信路の計算式が計算された後、フラグを計算済みの状態に設定することで、重複して同じ計算を行わないようにすることができる。
図26は、図22に示すデータ構造に通信路の計算式が計算済みかどうかを示すフラグを追加したデータ構造の例である。メンバ変数finishは、例えば、通信路の計算式が未計算のときは’0’であるとし、また計算済みの場合は’1’であるとすることで、計算が未実行なのかどうかを判別することができる。このフラグは第1フェーズ目で未計算の状態に設定する。
図27は、図26に示すデータ構造を用いて第2フェーズ目の通信動作を表した関数である。図24で説明した関数と比較すると、変数finishを用いて、通信が依存する通信の計算式が未実行なのか実行済みなのかを判定し、未実行である場合にのみ、依存する通信の関数、つまり計算を実行するようにしている。更に各通信において、計算を実行したあとに変数finishを実行済みの状態に設定している。
図28は、第2フェーズ目の計算を図27に示す関数を用いて行う場合の動作モデルの例である。図22で示したデータ構造の配列について、順番にデータ構造が示す通信動作の関数を実行する。順番に実行しても、計算の未実行・実行済みを表すフラグによって、重複して計算が行われることはない。このフラグが無い場合、データ構造の配列を順番に実行すると、通信動作が重複して計算され、誤った値が算出される。フラグが無い場合の通信動作の関数が実行される順番は次のようになる。
順番1.図22に示す配列の0番目の要素には、function_c2toc3が入っているので、該関数を実行する。
順番2.function_c2toc3はfunction_c1toc2に依存しているので、先にfunction_c1toc2が計算される。function_c1toc2は他の通信に依存していないので、function_c1toc2の計算式であるchan2 = logic_B1(chan1)の計算が実行される。
順番3.次にfunction_c2toc3の計算式chan3 = logic_A1(chan2)が計算される。
順番4.図22に示す配列の1番目の要素には、function_c4toc5が入っているので、該関数を実行する。
順番5.function_c4toc5はfunction_c3toc4に依存しているので、先にfunction_c3toc4が計算される。
順番6.function_c3toc4はfunction_c2toc3に依存しているので、先にfunction_c2toc3が計算される。
順番7.function_c2toc3はfunction_c1toc2に依存しているので、先にfunction_c1toc2が計算される。function_c1toc2は他の通信に依存していないので、function_c1toc2の計算式であるchan2 = logic_B1(chan1)の計算が実行される。
順番7の計算において、計算式は順番2で既に実行されているので、重複した計算が行われる。例えばlogic_B1が加算を表すものであれば、この関数が複数回実行されることで、誤って加算された結果が算出される。
〔第3フェーズ目の計算〕
図29は機能ブロックAのステートstateA_3と、機能ブロックBのステートstateB_3の第3フェーズ目の計算を関数で表した動作モデルである。
関数stA_3_3rdPhaseでは、該当する通信動作はない。よって関数の中身は空である。
関数stB_3_3rdPhaseでは、図20に示す表の通信動作M10の通信を表現する。通信路channel5を表す変数chan5の値を、registerBを表す変数regBに代入している。
3つの計算フェーズで構成された動作モデルを用いたシミュレータを作成し、シミュレーションを走らせ、動作が正しく計算されるか確認する。
図30で示すシミュレータは、機能ブロックAのステートの計算式をまず計算し、次に機能ブロックBのステートの計算式を計算するよう構成されたシミュレータの例である。
図30に示すシミュレータは、図23に示す第1フェーズ目の計算を関数で表した動作モデル、図25あるいは図28に示す第2フェーズ目の計算を関数で表した動作モデル、及び図29第3フェーズ目の計算を関数で表した動作モデルにより構成されており、このシミュレータでは、図7で示すクロックのタイミングC1〜C5で各ステートの動作が計算されるものとする。図30に示す例では、機能ブロックAのステートstateA_3の第1フェーズ目の関数stA_3_1stPhaseを計算し、次に機能ブロックBのステートstateB_3の第1フェーズ目の関数stB_3_1stPhaseを計算する。
続いて、第2フェーズ目の関数stAB_3_2ndPhaseを計算する。最後に機能ブロックAのステートstateA_3の第3フェーズ目の関数stA_3_3rdPhaesを計算し、次に機能ブロックBの第3フェーズ目の関数stB_3_3rdPhaseを計算する。
機能ブロックAのステートstateA_3と機能ブロックBのstateB_3の計算を完了した時点で、機能ブロックBのregisterBを表す変数regBの値をC言語の標準入出力ライブラリ関数であるprintfを用いて標準出力にダンプする。registerBの値を調べることで、全ての通信路で正しくデータが通信できたかどうか判断することができる。
図31は、図30に示す例に対して、機能ブロックBから計算を始める場合のシミュレータの例を示している。
図30に示す例と同様にstateB_3、およびstateA_3の計算が終了した時点でregBの値をダンプする。図30、及び図31で示すシミュレータを用いてシミュレーションすると、ダンプされる値は同じである。どちらの計算でも、第1フェーズ目で変数chan1に変数regAの値を代入し、第2フェーズ目で通信の依存関係に沿って通信動作が正しく計算され、第3フェーズ目で変数regBに変数chan5の値を代入している。つまり、どちらのシミュレータでもregisterAの値が、正しくregisterBに送信されている。
以上のことから、2つ以上の機能ブロックが存在し、かつ2つ以上の通信路を用い、かつ通信路で通信する値が他の通信に依存している場合、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズの計3フェーズの計算を行い、2フェーズ目の計算において、任意の通信路の計算式を計算する際に、該通信路が依存している通信路の計算を先に行うような順番で計算を進めることで、機能ブロックの計算する順番によらず正確にサイクル精度でシミュレーションが可能となる。
以上のように、本発明の好ましい実施形態を用いて本発明を例示してきたが、本発明は、この実施形態に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。
本発明は、ハードウェア検証用プログラミング記述を生成する装置および方法、並びにこの方法をコンピュータにより行うための制御プログラムの分野において、ハードウェアを汎用プログラミング言語で表現した記述として、機能ブロックの計算する順番によらず、サイクル精度で正確に検証する動作モデルを生成することができる装置および方法、並びにこの方法をコンピュータにより行うための制御プログラムを提供することができる。
1 モニタ装置
2 キーボードなどの入力装置
3 計算機本体
4 ハードウェア高位合成プログラム
31 制御部(CPU)
32 メモリなどの可読記録媒体
33 磁気ディスクなどの可読記録媒体
100 ハードウェア検証用プログラミング記述生成装置としてのコンピュータシステム
401 構文解析・字句解析手段
402 機能ブロック分割手段
403 CDFG生成手段
404 スケジューリング・ステート割り振り手段
405 送信ノード抽出手段
406 受信ノード抽出手段
407 通信依存調査手段
408 通信リスト制御記述生成手段
409 計算順序制御記述生成手段
410 動作モデル記述生成手段

Claims (15)

  1. ハードウェアの動作を検証可能な汎用プログラミング記述による動作モデルを生成する装置であって、
    ハードウェアの構造に関する情報を含まず、回路動作のみが記述された並列動作の記述を含むハードウェアの動作記述から、該ハードウェアを並列に動作し、かつ通信動作が行われる複数の機能ブロックに分割し、分割された機能ブロック毎に動作記述を解析して得られる動作情報から、該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、
    ハードウェア仕様として要求される動作周波数で、生成したコントロールデータフローグラフをスケジューリングして各ステートに回路動作を割り振るスケジューリング手段と、
    該複数の機能ブロックの各々における通信動作を含むステートでのハードウェアの動作を表す計算式を、通信動作を基準として、送信動作が行われるまでの動作の計算式、および受信動作が行われてからの動作の計算式を含む、該ステートを構成する2以上のフェーズで計算される複数の計算式に分割して生成する計算式生成手段と、
    ハードウェアを汎用プログラミング言語で表現した記述による、該分割した2以上のフェーズで計算される計算式に基づいてサイクル精度で該ハードウェアを検証する動作モデルとして、該ステートの動作モデルを分割した2以上のフェーズの動作モデルを生成する動作モデル生成手段と
    を有し、
    該動作モデル生成手段は、該2以上のフェーズの動作モデルを、該2以上のフェーズで計算される計算式のうちで、他の計算式に影響を与える計算式が、他の計算式に影響を与えていない計算式よりも先に計算されるように生成する、ハードウェア検証用プログラミング記述生成装置。
  2. 請求項1に記載のハードウェア検証用プログラミング記述生成装置において、
    前記動作モデル生成手段は、
    前記通信動作を基準として分割した計算式を用い、最初に送信動作の計算式を計算するフェーズと、次に受信動作の計算式を計算するフェーズとの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成する、ハードウェア検証用プログラミング記述生成装置。
  3. 請求項1に記載のハードウェア検証用プログラミング記述生成装置において、
    前記動作モデル生成手段は、
    前記通信動作を基準として分割した計算式を用い、2つ以上の機能ブロックが存在する場合に、全ての機能ブロックにおける送信動作の計算式を計算するフェーズと、次に全ての機能ブロックにおける受信動作の計算式を計算するフェーズとの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成する、ハードウェア検証用プログラミング記述生成装置。
  4. 請求項1に記載のハードウェア検証用プログラミング記述生成装置において、
    前記動作モデル生成手段は、
    前記通信動作を基準として分割して得られた2以上の計算式のうちの1つを、
    2つ以上の機能ブロックが存在し、かつ2つ以上の通信路を用い、かつ通信路で通信する値が他の通信に依存している場合、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズとの計3フェーズに分けて計算し、ハードウェアをサイクル精度で検証する動作モデルを生成する、ハードウェア検証用プログラミング記述生成装置。
  5. 請求項4に記載のハードウェア検証用プログラミング記述生成装置において、
    前記動作モデル生成手段は、
    前記2フェーズ目の計算において、任意の通信路の計算式を計算する際に、該通信路が依存している通信路の計算を先に行うような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成する、ハードウェア検証用プログラミング記述生成装置。
  6. 請求項4に記載のハードウェア検証用プログラミング記述生成装置において、
    前記動作モデル生成手段は、
    前記2フェーズ目の計算において、通信路の計算式を計算した結果が3フェーズ目の計算において用いられるような通信路を抽出し、抽出された通信路の計算式から計算を開始するような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成する、ハードウェア検証用プログラミング記述生成装置。
  7. 請求項4に記載のハードウェア検証用プログラミング記述生成装置において、
    前記動作モデル生成手段は、
    前記複数の通信路の計算式を計算する処理で、通信路の計算式が計算済みかどうかを示すフラグを用い、1フェーズ目の計算において、全ての通信路についてのフラグを未計算の状態に設定し、2フェーズ目の計算において、通信路の計算式が計算された後、フラグを計算済みの状態に設定することで、ハードウェアをサイクル精度で検証する動作モデルを生成する、ハードウェア検証用プログラミング記述生成装置。
  8. コンピュータによりハードウェアの動作を検証可能な汎用プログラミング記述による動作モデルを生成する方法であって、
    該コンピュータにおけるコントロールデータフローグラフ生成手段が、ハードウェアの構造に関する情報を含まず、回路動作のみが記述された並列動作の記述を含むハードウェアの動作記述から、該ハードウェアを並列に動作し、かつ通信動作が行われる複数の機能ブロックに分割し、分割された機能ブロック毎に動作記述を解析して得られる動作情報から、該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、
    該コンピュータにおけるスケジューリング手段が、ハードウェア仕様として要求される動作周波数で、生成したコントロールデータフローグラフをスケジューリングして各ステートに回路動作を割り振るスケジューリングステップと、
    該コンピュータにおける計算式生成手段が、該複数の機能ブロックの各々における通信動作を含むステートでのハードウェアの動作を表す計算式を、通信動作を基準として、送信動作が行われるまでの動作の計算式、および受信動作が行われてからの動作の計算式を含む、該ステートを構成する2以上のフェーズで計算される複数の計算式に分割して生成する計算式生成ステップと、
    該コンピュータにおける動作モデル生成手段が、該ハードウェアを汎用プログラミング言語で表現した記述による該分割した2以上のフェーズで計算される計算式に基づいてサイクル精度で該ハードウェアを検証する動作モデルとして、該ステートの動作モデルを分割した2以上のフェーズの動作モデルを生成する動作モデル生成ステップとを有し、
    該動作モデル生成ステップでは、該動作モデル生成手段が、該2以上のフェーズの動作モデルを、該2以上のフェーズで計算される計算式のうちで、他の計算式に影響を与える計算式が、他の計算式の影響を与えていない計算式よりも先に計算されるように生成する、ハードウェア検証用プログラミング記述生成方法。
  9. 請求項8に記載のハードウェア検証用プログラミング記述生成方法において、
    前記動作モデル生成ステップは、
    前記動作モデル生成手段が、前記通信動作を基準として分割した計算式を用い、最初に送信動作の計算式を計算するフェーズと、次に受信動作の計算式を計算するフェーズの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ハードウェア検証用プログラミング記述生成方法。
  10. 請求項8に記載のハードウェア検証用プログラミング記述生成方法において、
    前記動作モデル生成ステップは、
    前記動作モデル生成手段が、前記通信動作を基準として分割した計算式を用い、2つ以上の機能ブロックが存在する場合に、全ての機能ブロックにおける送信動作の計算式を計算するフェーズと、次に全ての機能ブロックにおける受信動作の計算式を計算するフェーズの計2フェーズの計算を行い、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ハードウェア検証用プログラミング記述生成方法。
  11. 請求項8に記載のハードウェア検証用プログラミング記述生成方法において、
    前記動作モデル生成ステップは、
    前記動作モデル生成手段が、
    前記通信動作を基準として分割して得られた2以上の計算式のうちの1つを、
    2つ以上の機能ブロックが存在し、かつ2つ以上の通信路を用い、かつ通信路で通信する値が他の通信に依存している場合、通信する値が他の通信路から影響を受けない送信動作の計算式を計算するフェーズと、次に、通信する値が他の通信路から影響を受けている、または影響を与えている通信動作の計算式を計算するフェーズと、最後に全ての機能ブロックにおいて、受信する値が他の通信路に影響を与えていない受信動作の計算式を計算するフェーズの計3フェーズに分けて計算し、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ハードウェア検証用プログラミング記述生成方法。
  12. 請求項11に記載のハードウェア検証用プログラミング記述生成方法において、
    前記動作モデル生成ステップは、
    前記動作モデル生成手段が、前記2フェーズ目の計算において、任意の通信路の計算式を計算する際に、該通信路が依存している通信路の計算を先に行うような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ハードウェア検証用プログラミング記述生成方法。
  13. 請求項11に記載のハードウェア検証用プログラミング記述生成方法において、
    前記動作モデル生成ステップは、
    前記動作モデル生成手段が、前記2フェーズ目の計算において、通信路の計算式を計算した結果が3フェーズ目の計算において用いられるような通信路を抽出し、抽出された通信路の計算式から計算を開始するような順番で計算を進めることで、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ハードウェア検証用プログラミング記述生成方法。
  14. 請求項11に記載のハードウェア検証用プログラミング記述生成方法において、
    前記動作モデル生成ステップは、
    前記動作モデル生成手段が、複数の通信路の計算式を計算する処理で、通信路の計算式が計算済みかどうかを示すフラグを用い、1フェーズ目の計算において、全ての通信路についてのフラグを未計算の状態に設定し、2フェーズ目の計算において、通信路の計算式が計算された後、フラグを計算済みの状態に設定することで、ハードウェアをサイクル精度で検証する動作モデルを生成する処理ステップを有する、ハードウェア検証用プログラミング記述生成方法。
  15. ハードウェアの動作を検証可能な汎用プログラミング記述による動作モデルを生成する方法における各ステップの処理をコンピュータにより行うための制御プログラムであって、
    前記各ステップの処理は、請求項8から請求項14にいずれかに記載のハードウェア検証用プログラミング記述生成方法における各処理ステップである、制御プログラム。
JP2009200456A 2009-08-31 2009-08-31 ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム Expired - Fee Related JP5147801B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009200456A JP5147801B2 (ja) 2009-08-31 2009-08-31 ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009200456A JP5147801B2 (ja) 2009-08-31 2009-08-31 ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム

Publications (2)

Publication Number Publication Date
JP2011053805A JP2011053805A (ja) 2011-03-17
JP5147801B2 true JP5147801B2 (ja) 2013-02-20

Family

ID=43942766

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009200456A Expired - Fee Related JP5147801B2 (ja) 2009-08-31 2009-08-31 ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム

Country Status (1)

Country Link
JP (1) JP5147801B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102286050B1 (ko) * 2017-06-23 2021-08-03 현대자동차주식회사 차량 네트워크에서 진단 오류 방지를 위한 방법 및 장치
US10981578B2 (en) * 2018-08-02 2021-04-20 GM Global Technology Operations LLC System and method for hardware verification in an automotive vehicle

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006139729A (ja) * 2004-11-15 2006-06-01 Sharp Corp ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体

Also Published As

Publication number Publication date
JP2011053805A (ja) 2011-03-17

Similar Documents

Publication Publication Date Title
US9335977B2 (en) Optimization of a data flow program based on access pattern information
JP4028107B2 (ja) 分解及び分割によるハードウェアの検証並びに表現方法
US6026226A (en) Local compilation in context within a design hierarchy
US20030208730A1 (en) Method for verifying properties of a circuit model
US20020152061A1 (en) Data processing system and design system
WO2004084027A2 (en) Mixed-level hdl/high-level co-simulation of a circuit design
KR20220148913A (ko) 초기 단계 회로 설계에서 기계 학습 기반 메트릭 예측
Karfa et al. Verification of datapath and controller generation phase in high-level synthesis of digital circuits
US11126408B2 (en) Incremental code generation method
US7813912B1 (en) Profiling a hardware system generated by compiling a high level language onto a programmable logic device
US9223910B1 (en) Performance and memory efficient modeling of HDL ports for simulation
US9619598B2 (en) Input space reduction for verification test set generation
JP5147801B2 (ja) ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム
US7606694B1 (en) Framework for cycle accurate simulation
JP4293562B2 (ja) ハードウェア検証用プログラミング記述生成装置、高位合成装置、ハードウェア検証用プログラミング記述生成方法、ハードウェア検証用プログラム生成方法、制御プログラムおよび可読記録媒体
JP5328447B2 (ja) 高位合成装置および高位合成方法、半導体集積回路の製造方法、制御プログラム、可読記憶媒体
JP5162531B2 (ja) シミュレーション支援方法、シミュレーション支援プログラムを記憶した記憶媒体およびシミュレーション支援装置
US6968523B2 (en) Design method of logic circuit using data flow graph
Roy et al. Tool integration for automated synthesis of distributed embedded controllers
Yang et al. Validating scheduling transformation for behavioral synthesis
Densmore et al. Microarchitecture development via metropolis successive platform refinement
JP3171182B2 (ja) 機能合成方法,機能合成装置およびその記録媒体
JP2020160650A (ja) 高位合成方法、高位合成装置、及び高位合成システム
Balarin et al. High Level Synthesis
JPH0916642A (ja) データ処理装置のアーキテクチャ評価方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110824

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120828

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121015

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121127

R150 Certificate of patent or registration of utility model

Ref document number: 5147801

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151207

Year of fee payment: 3

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D04

LAPS Cancellation because of no payment of annual fees