JP2006139729A - ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体 - Google Patents

ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体 Download PDF

Info

Publication number
JP2006139729A
JP2006139729A JP2004331229A JP2004331229A JP2006139729A JP 2006139729 A JP2006139729 A JP 2006139729A JP 2004331229 A JP2004331229 A JP 2004331229A JP 2004331229 A JP2004331229 A JP 2004331229A JP 2006139729 A JP2006139729 A JP 2006139729A
Authority
JP
Japan
Prior art keywords
node
hardware
programming language
model
model generation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004331229A
Other languages
English (en)
Inventor
Takahiro Morishita
貴弘 森下
Kazuhisa Okada
和久 岡田
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 JP2004331229A priority Critical patent/JP2006139729A/ja
Priority to US11/272,712 priority patent/US20060130029A1/en
Publication of JP2006139729A publication Critical patent/JP2006139729A/ja
Pending legal-status Critical Current

Links

Images

Classifications

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】 安価に、かつ、高速にサイクルアキュレートレベルでハードウェアを検証可能な汎用プログラミング言語で記述された検証用モデルを、従来に比べて少ない計算量で生成する。
【解決手段】 CDFG生成手段109によりハードウェアの動作記述107からCDFGを生成し、スケジューリング手段110によりCDFGをハードウェア仕様として要求される動作周波数でスケジューリングしてステート毎に割り振り、サイクルアキュレートモデル生成手段111によりステート毎にハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成する。CDFGに含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行うことにより、各ステートでシミュレーション可能なモデルを生成することができる。
【選択図】 図1

Description

本発明は、ハードウェアを検証可能な汎用プログラミング言語記述を自動生成するためのハードウェア検証用プログラミング言語モデル生成装置、これを用いたハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、これを用いたハードウェアシミュレーション方法、この方法をコンピュータに実行させるための制御プログラムおよびその制御プログラムが格納されたコンピュータ読み出し可能な可読記憶媒体に関する。
システムLSIの開発において、設計されたハードウェアの動作がシステムLSIに与えられた要求仕様を満たすか否かを検証する必要がある。
従来は、サイクルアキュレートレベルでハードウェアの検証を行うために、HDL(Hardware Description Language)シミュレータが用いられていた。この方法では、HDLシミュレータによって動作速度などのパフォーマンス測定が行われ、与えられた仕様を満たしているか否かが検証される。一般に、HDLシミュレータにおいては、VHDLなど、ハードウェア記述言語で記述された回路動作がシミュレーションされる。HDLシミュレータでは、回路内の信号の変化がクロックサイクルよりも短い時間単位で監視され、その信号変化を接続する信号に伝搬させるというイベント駆動方式によってシミュレーションが行われている。
また、ハードウェア記述言語で記述されたハードウェアと、汎用プログラミング記述言語で記述されたソフトウェアとを協調させて検証する場合には、ハードウェアはHDLシミュレータを用いデバッグされ、ソフトウェアはソフトデバッガなどでデバッグされる。また、例えば特許文献1には、汎用プログラミング言語を用いてハードウェアの動作をシミュレーションし、ハードウェアとソフトウェアとの協調検証を行う方法が開示されている。この従来技術では、並列動作するハードウェアがC言語などの汎用プログラミング言語で表現され、これをソフトデバッガによってデバッグすることによって、ハードウェアとソフトウェアとの協調検証の効率化が図られている。
さらに、例えば特許文献2には、高位合成により、ハードウェアで実行される全演算の動作を示す記述を作成し、汎用プログラミング言語による検証モデルを生成することによって、ハードウェアのサイクルアキュレートレベルでの検証を高速に行うことができるという方法が開示されている。この従来技術では、コントロールデータフローグラフがステートに分割されてステート毎の動作情報が抽出され、分割されたコントロールデータフローグラフにハードウェアが割り付けられてデータパス情報が抽出される。動作情報とデータパス情報とから各ステート内で動作する演算器が各動作条件に分割され、演算器がレベル付けされて各演算の動作を実行する順序が決められることによって、サイクルアキュレートレベルで検証可能なモデルが生成される。
なお、サイクルアキュレートレベルとは、ハードウェアの動作について、そのハードウェアの状態をクロックサイクル単位で示すことが可能な精度レベルのことである。例えば、クロックの立ち上がりに同期して動作するハードウェアにおいては、そのクロックの立ち上がりエッジにおけるハードウェア中のレジスタやメモリなどの記憶装置の状態を示すことが可能なレベルのことである。
また、高位合成とは、ハードウェアの構造に関する情報は含まれず、処理の動作のみが記述された動作記述から、RTL(レジスタ・トランスファ・レベル)の論理回路を自動生成する技術であり、例えば特許文献3にその詳細が説明されている。
また、ステートとは、各クロックサイクル毎に実行される動作のことである。
特開平10−149382号公報 特開2001−14356号公報 特開平5−101141号公報
しかしながら、上記従来技術ではそれぞれ、以下のような問題がある。
上記HDLシミュレータによる検証では、イベント駆動方式でシミュレーションが進められるため、シミュレーションの時間単位がクロックサイクルよりも短い。よって、ハードウェアのサイクルアキュレートレベルでの検証を行うためには、冗長かつ無駄な計算が多くなり、効率が悪いという問題がある。また、シミュレーションされる回路の規模が大きいか、またはテストパターンが長くなると、シミュレーションに必要な計算量が非常に多くなり、シミュレーションに時間がかかるという問題がある。さらに、HDLシミュレータは高価であり、システムLSIの開発コストが増えるという問題もある。
また、ハードウェアとソフトウェアとの協調検証を行うために、ハードウェア記述言語で記述されたハードウェアをHDLシミュレータでデバッグし、汎用プログラミング言語で記述されたソフトウェアをソフトデバッガでデバッグする方法では、言語が異なるデバッガを用いるため、検証効率が悪いという問題がある。また、特許文献1に開示されている従来技術では、ハードウェアのアルゴリズムレベルにおける検証は可能であるが、サイクルアキュレートレベルでの検証を行うことはできない。よって、システムに与えられた動作周波数などの要求仕様をハードウェアが満たすか否かを検証することはできない。
さらに、特許文献2に開示されている従来技術では、回路規模が大きくなると、ハードウェアの割り付けおよびデータパス情報の抽出を行うために多大な時間が必要となり、また、動作条件から演算器のレベル付けおよび演算の実行順序を決定するための計算量も多くなるため、検証効率が悪くなるという問題がある。
このように、従来技術では、いずれも、LSI設計・開発におけるTAT(ターン・アラウンド・タイム;問題があった場合に後戻りして処理する時間)が長くなり、また、開発コストが増加するという問題がある。
本発明は、上記従来の問題を解決するもので、安価かつ高速にサイクルアキュレートレベルでハードウェアを検証可能な汎用プログラミング言語で記述された検証用モデルを、従来に比べて少ない計算量で生成することにより、短いTATと低コストでLSI設計・開発に寄与できるハードウェア検証用プログラミング言語モデル生成装置、これを用いたハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、これを用いたハードウェアシミュレーション方法、この方法をコンピュータに実行させるための制御プログラムおよびその制御プログラムが格納されたコンピュータ読み出し可能な可読記憶媒体を提供することを目的とする。
本発明のハードウェア検証用プログラミング言語モデル生成装置は、ハードウェアを検証可能な汎用プログラミング言語モデルを自動生成するハードウェア検証用プログラミング言語モデル生成装置であって、該ハードウェアの動作が表現された動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステート毎に割り振るスケジューリング手段と、該各ステート毎に該コントロールデータフローグラフを用いて、該ハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成するサイクルアキュレートモデル生成手段とを有しており、そのことにより上記目的が達成される。
また、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置におけるサイクルアキュレートモデル生成手段は、前記各ステートでシミュレーション可能なモデルを生成するために、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて該各ノードの動作モデルを生成し、該各ノードの接続情報を用いて該各ノードの動作モデルを計算する際の順序付けを行う動作モデル生成部を有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置におけるサイクルアキュレートモデル生成手段は、あるノードの出力がステートを超えて他のノードへの入力として使用される場合に、該あるノードの出力値をレジスタに保存するための計算式を、該あるノードの出力結果を示すモデルを用いて生成する該レジスタへの入力値計算式生成部を有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置におけるサイクルアキュレートモデル生成手段は、あるノードまたはレジスタの出力が記憶装置への入力として使用される場合に、該あるノードまたはレジスタの出力値を該記憶装置に保存するための計算式を、該あるノードまたはレジスタの出力結果を示すモデルを用いて生成する該記憶装置への入力値計算式生成部を有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置におけるサイクルアキュレートモデル生成手段は、前記ハードウェアの動作モデルを、前記各ステートでシミュレーション可能なモデルとして、汎用プログラミング言語の関数を用いて表現する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置におけるコントロールデータフローグラフ生成手段は、前記ハードウェアの構造に関する記述が含まれず、処理の動作のみが記述された動作記述を解析する構文解析・字句解析部と、該構文解析・字句解析部で解析した並列動作に従って回路のブロック分割を行うブロック分割部と、分割した各ブロック毎に、該ハードウェアによって実行される演算内容がノードで表され、該ノード間のデータの流れが枝で表されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成部とを有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置における各ノードの動作情報は、前記各ノード毎に、少なくとも、該ノードが演算か否か、また、該ノードが演算の場合にどのような種類の演算を行うのか、該ノードが演算でない場合にどのような機能を有するのかを示す演算内容と、階層と、前記ステートの番号とを含む。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成装置における各ノードの接続情報は、該ノードの出力先と入力先とを示す情報を含む。
本発明のコンピュータシステムは、請求項1〜8のいずれかに記載のハードウェア検証用プログラミング言語モデル生成装置と、前記スケジューリング結果として得られるステートの実行順序に従って、前記サイクルアキュレートモデル生成手段によって生成された関数を実行することによって、前記ハードウェアのシミュレーションを行うシミュレーション手段とを有し、そのことにより上記目的が達成される。
本発明のハードウェア検証用プログラミング言語モデル生成方法は、ハードウェアを検証可能な汎用プログラミング言語記述を自動生成するハードウェア検証用プログラミング言語モデル生成方法であって、該ハードウェアの動作が表現された動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステート毎に割り振るスケジューリングステップと、該各ステート毎に該コントロールデータフローグラフを用いて、該ハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成するサイクルアキュレートモデル生成ステップとを有し、そのことにより上記目的が達成される。
また、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成方法におけるサイクルアキュレートモデル生成ステップは、前記各ステートでシミュレーション可能なモデルを生成するために、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて該各ノードの動作モデルを生成し、該各ノードの接続情報を用いて該各ノードの動作モデルを計算する際の順序付けを行う動作モデル生成ステップを有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成方法におけるサイクルアキュレートモデル生成ステップは、あるノードの出力がステートを超えて他のノードへの入力として使用される場合に、該あるノードの出力値をレジスタに保存するための計算式を、該あるノードの出力結果を示すモデルを用いて生成する該レジスタへの入力値計算式生成ステップを有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成方法におけるサイクルアキュレートモデル生成ステップは、あるノードまたはレジスタの出力が記憶装置への入力として使用される場合に、該あるノードまたはレジスタの出力値を該記憶装置に保存するための計算式を、該あるノードまたはレジスタの出力結果を示すモデルを用いて生成する該記憶装置への入力値計算式生成ステップを有する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成方法におけるサイクルアキュレートモデル生成ステップは、前記ハードウェアの動作モデルを、前記各ステートでシミュレーション可能なモデルとして、汎用プログラミング言語の関数を用いて表現する。
さらに、好ましくは、本発明のハードウェア検証用プログラミング言語モデル生成方法におけるコントロールデータフローグラフ生成ステップは、前記ハードウェアの構造に関する記述が含まれず、処理の動作のみが記述された動作記述を解析する構文解析・字句解析ステップと、該構文解析・字句解析ステップで解析した並列動作に従って回路のブロック分割を行うブロック分割ステップと、分割した各ブロック毎に、該ハードウェアによって実行される演算内容がノードで表され、該ノード間のデータの流れが枝で表されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップとを有する。
本発明のハードウェアシュミレーション方法は、請求項10〜15のいずれかに記載の上記ハードウェア検証用プログラミング言語モデル生成方法の各ステップと、前記スケジューリング結果として得られるステートの実行順序に従って、前記サイクルアキュレートモデル生成ステップによって生成された関数を実行することによって、前記ハードウェアのシミュレーションを行うシミュレーションステップとを有し、そのことにより上記目的が達成される。
本発明の制御プログラムは、請求項10〜16のいずれかに記載の上記方法の各ステップをコンピュータによって実行するための処理手順が記述された制御プログラムであって、そのことにより上記目的が達成される。
本発明の可読記憶媒体は、請求項17に記載の制御プログラムが格納されたコンピュータ読み取り可能な媒体であって、そのことにより上記目的が達成される。
上記構成により、以下、本発明の作用を説明する。
本発明にあっては、ハードウェアの動作記述からコントロールデータフローグラフを生成し、そのコントロールデータフローグラフをハードウェア仕様として要求される動作周波数でスケジューリングしてステート毎に割り振る。そして、ステート毎にコントロールデータフローグラフを用いて、ハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成する。
コントロールデータフローグラフに含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行うことによって、各ステートでシミュレーション可能なモデルを生成することができる。また、各ステートでシミュレーション可能なモデルを汎用プログラミング言語の関数を用いて表現し、スケジューリング結果として得られるステートの実行順序に従って、その関数を実行することによって、サイクルアキュレートレベルでハードウェアのシミュレーションを行うことができる。
また、あるノードの出力がステートを超えて他のノードへの入力として使用される場合には、そのノードの出力値をレジスタに保存するための計算式を、そのノードの出力結果を示すモデルを用いて生成することによって、各ステートにおけるレジスタへの入力値の計算を行うことができる。また、ハードウェアへの割り付け処理を行うことによって、フリップフロップなどによって構成されるハードウェア内部のレジスタとして、任意のクロックサイクルにおけるレジスタの状態を観測することができる。
さらに、あるノードまたはレジスタの出力が記憶装置への入力として使用される場合に、そのノードまたはレジスタの出力値を記憶装置に保存するための計算式を、そのノードまたはレジスタの出力結果を示すモデルを用いて生成することによって、各ステートにおけるレジスタまたは記憶装置への入力値の計算を行うことができる。また、ハードウェアへの割り付け処理を行うことによって、フリップフロップなどによって構成されるハードウェア内部のレジスタやメモリなどによって構成されるハードウェア内部の記憶装置として、任意のクロックサイクルにおけるレジスタや記憶装置の状態を観測することができる。
以上により、本発明によれば、ハードウェアのサイクルアキュレートレベルでの検証を、HDLシミュレータによる検証に比べて、高速にかつ安価に行うことが可能となる。また、ハードウェアとソフトウェアとの協調検証を行う場合でも、ハードウェアの検証を汎用プログラミング言語で記述されたモデルを用いて行うことができるため、言語の異なるデバッガを用いることなく、サイクルアキュレートレベルでの検証を効率良く行うことが可能である。
また、本発明によれば、任意のクロックサイクルにおけるハードウェア内部のレジスタや記憶装置の状態を観測することができるため、ハードウェアのデバッグ効率を向上させることができる。
さらに、本発明によれば、コントロールデータフローグラフを用いてモデルを生成するため、高位合成においてスケジューリング以降に行われる処理であるデータパス情報の生成処理が不要となる。したがって、回路規模が大きくなった場合に動作モデルを生成するための計算時間を大幅に削減することができる。
以上のことから、本発明によれば、LSI設計・開発におけるTATを短くすることができると共に、開発コストを削減することができる。
以下に、本発明のハードウェア検証用プログラミング言語モデル生成装置およびこれを用いたハードウェア検証用プログラミング言語モデル生成方法の実施形態をコンピュータシステムに適用した場合について、図面を参照しながら詳細に説明する。
図1は、本発明の実施形態に係るハードウェア検証用プログラミング言語モデル生成装置を実現するためのコンピュータシステムの構成例を示すブロック図である。
図1において、ハードウェア検証用プログラミング言語モデル生成装置として機能するコンピュータシステム100は、出力装置としてのモニタ装置101、キーボードなどの入力装置102および計算機本体103を有しており、計算機本体103には制御手段としてのCPU(中央演算処理ユニット)104、ワークメモリなどの記憶装置105および磁気ディスク(FD)、光ディスク(CD)およびハードディスク(HDD)などの可読記憶媒体(ここではHDD)106を有している。
HDD106には、ハードウェアの動作記述107と、本実施形態のハードウェア検証用プログラミング言語モデル生成装置の動作をコンピュータによって実行するための処理手順が記述されたハードウェア検証用プログラミング言語モデル生成プログラムおよびシュミレーションプログラムなどの制御プログラムからなる高位合成手段108とが格納されている。このプログラムはコンピュータ起動時にHDD106から記憶装置105のワークメモリに読み込まれて、CPU104によって実行されるようになっている。
この高位合成手段108は、高位合成法により、ハードウェアの動作が表現された動作記述を解析した動作情報からハードウェアのコントロールデータフローグラフ(CDFG)を生成するCDFG生成手段109と、ハードウェア仕様として要求される動作周波数でCDFGをスケジューリングしてステート毎に割り振るスケジューリング手段110と、ステート毎にCDFGを用いて、ハードウェアをサイクルアキュレートレベルで検証可能な動作モデルを汎用プログラミング言語で表現した記述として生成するサイクルアキュレートモデル生成手段111とを有している。
また、本発明のコンピュータシステム100は、CPU104が、高位合成手段108に含まれる制御プログラムに基づいて、スケジューリング結果として得られるステートの実行順序に従って、サイクルアキュレートモデル生成手段111によって生成された関数を実行することによって、ハードウェアのシミュレーションを行うシミュレーション手段(図示せず)をさらに有している。
なお、高位合成手法としては、特許文献3に詳細が述べられているため、ここではその詳細な説明は省略する。本実施形態では、高位合成により回路の並列動作を記述できるものとする。また、本実施形態において生成されるハードウェアをサイクルアキュレートレベルで検証可能なモデルは、汎用プログラミング言語のC言語で記述されるものとする。
以下に、上記構成により、本実施形態のハードウェア検証用プログラミング言語モデル生成方法について説明する。
図2は、本実施形態におけるハードウェア検証用プログラミング言語モデル生成方法を説明するためのフロー図である。
図2において、図1のコントロールデータフローグラフ生成手段109は、ハードウェアの動作記述107を解析する構文解析・字句解析部202と、構文解析・字句解析部202で解析した並列動作の記述に従って回路のブロック分割を行うブロック分割部203と、ブロック分割部203で分割した各ブロック毎に、コントロールデータフローグラフ(CDFG)を生成するCDFG生成部204とを有している。
スケジューリング部205は、ハードウェア仕様として与えられる動作周波数でCDFGをスケジューリングしてステート毎に割り振る。図1のスケジューリング手段110はスケジューリング部205を有している。
サイクルアキュレートモデル生成部208は、動作モデル生成部210と、レジスタへの入力値計算式生成部211と、記憶装置への入力値計算式生成部212とを有している。図1のサイクルアキュレートモデル生成手段111はサイクルアキュレートモデル生成部208を有している。
動作モデル生成部210は、CDFGに含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行う。各ノードの動作モデルを計算する際の順序付けとは、各ノードの入力接続先や出力接続先の情報を用いて各ノードをレベル付けし、レベルの小さい順でソートすることである。
レジスタへの入力値計算式生成部211は、あるノードの出力がステートを超えて他のノードへの入力として使用される場合に、そのノードの出力値をレジスタに保存するための計算式を、そのノードの出力結果を示すモデルを用いて生成する。
記憶装置への入力値計算式生成部212は、あるノードまたはレジスタの出力がメモリなどの記憶装置への入力として使用される場合に、そのノードまたはレジスタの出力値を記憶装置に保存するための計算式を、そのノードまたはレジスタの出力結果を示すモデルを用いて生成する。
上記構成により、ハードウェアの動作記述107は、構文解析・字句解析部202によって解析された後、ブロック分割部203によって並列動作の記述に従って回路のブロック分割が行われる。各ブロックにおいて、CDFG生成部204によってCDFGが作成される。CDFGとは、ハードウェアの動作がノードとノード間を接続する枝とを用いて表現されたものである。ノードはハードウェア中で動作する演算などを示し、ノード間の枝はデータの流れを示している。あるノードから出力されたデータは、そのノードに接続されている枝を通り、接続先のノードの入力として用いられる。
スケジューリング部205では、CDFGの各ノードについてハードウェアに与えられた動作周波数で回路が動作可能なようにスケジューリングが行われる。このスケジューリングの結果、CDFGの各ノードについて、演算が処理されるステート情報などの動作情報206と、他ノードとの接続情報207とが生成される。CDFGの各ノードの接続情報207には、ノードの入出力がレジスタに接続されているか否かの情報も含まれている。
この動作情報206と接続情報207を用いて、サイクルアキュレートモデル生成部208によって、ハードウェアをサイクルアキュレートレベルで検証(シミュレーション)可能なモデルを汎用プログラミング言語で表現した記述209が生成される。
さらに、CPU104は、高位合成手段108に含まれる制御プログラムに基づいて、スケジューリング結果として得られるステートの実行順序に従って、サイクルアキュレートモデル生成部208によって生成された記述209(関数)を実行することによって、ハードウェアのシミュレーションを行うことができる。
以下に、サイクルアキュレートモデル生成部208において、各ノードの動作モデル生成部210によってスケジューリングされたCDFGの各ステートにおける演算の動作を表現したモデルを生成し、レジスタへの入力値計算式生成部211によってレジスタへの入力値を求める計算式を生成し、メモリなど記憶装置への入力値計算式生成部212によってメモリなどの記憶装置への入力値を求める計算式を生成する方法について、詳細に説明する。
まず、動作モデル生成部210によって、CDFGに含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行い、あるノードの出力がステートを超えて他のノードへの入力として使用される場合に、レジスタへの入力値計算式生成部211によって、そのノードの出力値をレジスタに保存するための計算式を、そのノードの出力結果を示すモデルを用いて生成する事例について説明する。
図3は、本実施形態のハードウェア検証用プログラミング言語生成方法について、レジスタへの入力値を求めるための計算式を生成する処理手順を説明するためのCDFGの一例を示す図である。
図3において、CDFGは、”A”という演算を行うノード301と、”B”という演算を行うノード302と、”C”という演算を行うノード303と、”D”という演算を行うノード304と、”E”と言う演算を行うノード305と、”F”という演算を行うノード306と、”G”という演算を行うノード307と、内部に条件分岐する真(T)および偽(F)の二つのノードを有するブランチノード308と、そのブランチノード308の内部で条件が真(T)のときに動作するノード309と、偽のときに動作するノード310と、”H”という演算を行うノード311と、”I”という演算を行うノード312とを有している。
これらのノードは、ステートの区切りとして、区切り313と区切り314とで仕切られている。これらの区切りは、ハードウェアの動作クロックの区切りと一致している。ノード301〜303はステートnに含まれ、ノード304〜307はステートn+1に含まれ、ノード308〜312はステートn+2に含まれている。
また、クロックが進んでステートが変わる場合には、ノードの出力結果を保存するためのレジスタが必要となる場合がある。図3中、r1からr8までは、そのレジスタを示している。例えば、ノード301の出力結果はレジスタr1に蓄積され、ステートの区切り313を超えてノード304および305の入力として用いられる。また、ノード302の出力結果はレジスタr2に蓄積され、ステートの区切り313を超えてノード304および305の入力として用いられる。さらに、ノード303の出力結果はレジスタr3に蓄積され、ステートの区切り313を超えてレジスタr6の入力として用いられる。さらに、ノード306の出力結果はレジスタr4に蓄積され、ステートの区切り314を超えてノード311および312のいずれかの入力として用いられる。さらに、ノード307の出力結果はレジスタr5に蓄積され、ステートの区切り314を超えてノード311および312のいずれかの入力として用いられる。さらに、ノード311の出力結果はレジスタr7に蓄積され、ノード312の出力結果はレジスタr8に蓄積される。
図4は、図3の各ノードについて、図2のCDFGの各ノードの動作情報206の一例を示す図である。なお、ノードの動作情報206としては、各ノード毎に、演算の種類、階層、ステート番号および補足情報といった項目が含まれる。また、演算の種類は、そのノードが演算であるか否か、また、演算の場合にはどのような種類の演算を行うのか、一方、演算でない場合にはどのような機能を有するノードであるのかといった情報を示す。
図4に示すように、ノード301、302、303、304、305、306、307、311および312はそれぞれ演算種類”A”、”B”、”C”、”D”、”E”、”F、”G、”H”および”I”をそれぞれ行う各演算ノードである。
また、ノード308、ノード309およびノード310は演算ではなく、内部に階層構造を有するノードである。ノード308は内部にノード309とノード310の二つのノードを有するブランチノード(Branch)である。また、ノード309は内部にノード311を有する真ブロック(True Block)であり、ノード310は内部にノード312を有する偽ブロック(False Block)である。このような階層構造に関する情報も、ノードの動作情報の一つである。
また、各ノードが動作するステートに関する情報も、この動作情報206内に含まれている。例えば、ノード301〜303はステート番号”n”にスケジューリングされており、ノード304〜307はステート番号”n+1”にスケジューリングされており、ノード308〜312はステート番号”n+2”にスケジューリングされている。
さらに、内部で条件分岐を有するノード308などについては、その分岐先を示す補足情報も含まれる。例えば、ノード308には条件分岐によって条件が”真”であればノード309に、条件が”偽”であればノード310に分岐する。
図5は、図3の各ノードについて、図2のCDFGの各ノードの接続情報207の一例を示す図である。なお、このノードの接続情報としては、例えばノードの出力先と入力先とを示す情報とが挙げられる。
図5に示すように、ノード301、302、303、306、307、311および312については、出力の接続先が全てレジスタであるため、レジスタの名前が示された情報となる。
また、ノード304と305については、出力の接続先が別のノードであるため、それぞれ接続先のノード名が示された情報となっている。
さらに、各ノードにおいて、入力の接続先についても、同様に、ノードとレジスタとによって示されている。
例えばノード304および305は二つの入力を有するノードであり、一方の入力1にはレジスタr1の値が入力され、他方の入力2にはレジスタr2の値が入力されている。また、ノード306〜308は一つの入力を有するノードであり、それぞれノード304、305およびレジスタr6の値が入力されている。さらに、ノード311および312は二つの入力を有するノードであり、一方の入力1にはレジスタr4の値が入力され、他方の入力2にはレジスタr5の値が入力されている。
図6は、図3の各ノードについて、図2の各ノードの動作モデル生成部210によって、図4のノードの動作情報206を用いて各ノードの動作モデルを生成する一例を示す図である。
図6において、各ノードの入力値と出力値とを表すために、ノードの番号に入力側は”in”という添え字を付け、出力側は”out”という添え字を付けて示している。例えば、ノード301の入力値を示す場合には”301in”となる。また、入力値が二つある場合には、”in1”と”in2”として示している。
演算を行うノードについては、演算の種類をそれぞれ”A”、”B”、”C”、”D”、”E”、”F”、”G”、”H”および”I”として動作モデルを表現している。
例えば、ノード304の動作モデルは、入力値”304in1”と”304in2”とが演算の種類”D”で演算されるということを示している。具体的に説明すると、例えば演算”D”が足し算の場合、C言語の足し算を行う演算子”+”を用いて、動作モデルは”304out = 304in1 + 304in2”となる。
一方、演算以外のノードについて、例えばノード308では、条件分岐によって、内部のノード309の動作を示すC言語の関数”309()”と、ノード310の動作を示すC言語の関数”310()”のいずれか一方が実行される。この動作モデルをC言語の3項演算子を用いて表現している。また、ノード309では、内部のノード311の動作を示すC言語の関数実行の表現を用いて”311()”と表現している。さらに、ノード310では、内部のノード312の動作を示すC言語の関数実行の表現を用いて”312()”と表現している。
次に、各ノードの動作モデルを計算する順序を決定する方法について説明する。なお、順序の決定は、ステート毎に行われる。計算順序は、図2の各ノードの動作モデル生成部210によって、ノードの接続情報207を用いて各ノードをレベル付けし、レベルの小さい順でソートすることによって決定される。
レベル付けの手順としては、(1)全ノードのレベルを0とし、(2)あるノードの接続情報から、そのノードの出力先のノードを取り出して、(3)取り出されたノードのレベルを、そのノードに入力されるノードのレベルの中で最大値のもの+1とする。上記(2)と(3)の手順をステート中の全ノードに適用することによって、レベル付けが行われる。また、階層を有するノードの場合には、その階層中のノードについて、上記手順によってレベル付けが行われる。
上記手順に従って、各ステートでノードにレベル付けを行って計算順序を決定すると、図3に示す事例では、ステートnにおいて、ノード301、302および303は当該ステート中に出力先となるノードが無いために全て同じレベルとなる。よって、動作モデルの計算はどのノードから行ってもよい。
また、ステートn+1において、ノード304の出力はノード306に接続されているため、ノード304のレベルを”0”とすると、ノード306のレベルは”1”となる。よって、ノード304の動作モデルを計算した後、ノード306の動作モデルを計算する。 同様に、ノード305の出力はノード307に接続されているため、ノード305の動作モデルの計算の後にノード307の動作モデルを計算する。
ステートn+2においては、階層を有するノード308の動作モデルの計算のみを行う。
図7は、図3に示すステートの区切り313を超えるときに、更新されるレジスタへの入力値の計算式の一例を、レジスタへの入力値計算式生成部211によって、図5に示すノードの接続情報207を用いて生成した図である。
この生成する手順としては、まず、CDFGの各ノードの動作情報206から、当該ステートに割り当てられているノードを抽出する。その抽出の結果、ノード301、302および303が得られる。
次に、CDFGの各ノードの接続情報207から、ノードの出力がレジスタに接続されているノードを抽出する。その抽出の結果、ノード301がレジスタr1に、ノード302がレジスタr2に、さらに、ノード303がレジスタr3に接続されているという情報が得られる。
次に、当該ステートで計算される各レジスタへ、そのレジスタに接続されているノードまたはレジスタの出力値を代入するモデルを生成する。この生成の結果、レジスタr1、r2およびr3に、それぞれノード301、302および303からの出力値が入力されるように、計算式が生成される。
図8は、図3に示すステートの区切り314を超えるときに、更新されるレジスタへの入力値の計算式を、レジスタへの入力値計算式生成部211によって、図5に示すノードの接続情報207を用いて生成した図である。
この生成手順は、先に説明したステートの区切り313を超えるときと同じである。その生成の結果、レジスタr4、r5およびr6に、それぞれノード306、307およびレジスタr3からの出力値が入力されるように、レジスタへの入力値の計算式が生成される。なお、レジスタr6への入力計算式は”r6=r3out”と生成されている。これは、r6への入力がレジスタr3の出力であることを示している。
図9は、図3に示すステートの区切り315を超えるときに、更新されるレジスタへの入力値の計算式を、レジスタへの入力値計算式生成部211によって、図5に示すノードの接続情報207を用いて生成した図である。
この生成手順は、先に説明したステートの区切り313を超えるときと同じである。その生成の結果、レジスタr7およびr8に、それぞれノード311および312からの出力値が入力されるように、計算式が生成される。
なお、図5に示すノードの接続情報207では、レジスタr7とレジスタr8への接続情報が、ノード311とノード312からの出力となっている。また、図4に示すノードの動作情報206からノード311とノード312の階層構造を調べると、ノード311はノード309の階層に含まれ、ノード312はノード310の階層に含まれている。また、ノード309とノード310は、動作条件が与えられているノード308の階層に含まれている。これらの情報から、レジスタr7とr8へのデータ入力は、ノード308の動作条件の分岐によって、いずれか一方のみが実行される。
図10は、図6〜図9に示す計算式を、C言語の表現を用いて、図3に示すステート番号nについて、関数STATE_n_funcの中にまとめた記述例を示す図である。
図10において、ノード301、302および303では、NOT演算”!”が行われるものとする。また、ノードの入出力を表す変数は”node301in”、“node301out”のように表現されている。この表現方法は、以下の図11および図12に示す計算式でも同様とする。
さらに、図10〜図12において、ノードの出力がステートを超えて別のノードへの入力として使用される場合に、レジスタへの入力値計算式を用いて、その出力値がレジスタに入力される。
さらに、図10〜図12に示す事例では、”next_func”という関数へのポインタが定義されており、このポインタを用いて、次のステートで実行されるステートの関数が登録されている。本実施形態で生成されたモデルを用いた回路シミュレーションでは、この”next_func”の関数を実行することによって、順次シミュレーションするサイクルを進めることができる。
図11は、図6〜図9に示す計算式を、C言語の表現を用いて、図3に示すステート番号n+1について、関数STATE_n1_funcの中にまとめた記述例を示す図である。
図11において、ノード304では足し算が、ノード305では引き算が、ノード306と307ではNOT演算が行われるものとする。
図12は、図6〜図9に示す計算式を、C言語の表現を用いて、図3に示すステート番号n+2について、関数STATE_n2_funcの中にまとめた記述例を示す図である。本実施形態において、ステート番号n+2では、レジスタr6で示される値によって、ノード309の動作を実行するか、またはノード310の動作を実行するかが選択される。
図12において、ノード309およびノード310の動作は、それぞれ個別の関数として表現されている。
ノード309の関数func_node309の中では、ノード309の階層に含まれるノード311の動作が実行される。ノード311の動作についても、また、関数としてfunc_node311と表現されている。ノード311で掛け算が行われるものとすると、func_node311は図12に示すようになる。
また、ノード310の関数func_node312の中では、ノード310の階層に含まれるノード312の動作が実行される。ノード312の動作も、また、関数としてfunc_node312と表現されている。ノード312で割り算が行われるものとすると、func_node312は図12に示すようになる。
以上のように、図10〜図12で示されるC言語記述を用いることによって、スケジューリング後のCDFGにおける各ステートについて、レジスタへの入力値の計算を行うことが可能となる。
また、スケジューリング結果として得られるステートの実行順序に従って、サイクルアキュレートモデル生成手段111によって生成された関数を実行することによって、ハードウェアのサイクルアキュレートレベルでのシミュレーションを行うことが可能となる。
さらに、ハードウェアへの割り付け処理を行うことによって、フリップフロップなどで実現されるハードウェア内のレジスタについて、値をサイクルアキュレートレベルで観測することも可能となる。
次に、動作モデル生成部210によって、CDFGに含まれるノードの動作情報206を用いて各ノードの動作モデルを生成し、ノードの接続情報207を用いて各ノードの動作モデルを計算する際の順序付けを行い、あるノードまたはレジスタの出力がメモリなどの記憶装置への入力として使用される場合に、記憶装置への入力値計算式生成部212によって、そのノードまたはレジスタの出力値を記憶装置に保存するための計算式を、そのノードまたはレジスタの出力結果を示すモデルを用いて生成する事例について詳細に説明する。
図13は、本実施形態のハードウェア検証用プログラミング言語モデル生成方法について、メモリなどの記憶装置への入力値を求めるための計算式を生成する処理手順を説明するためのCDFGの一例を示す図である。
図13において、CDFGは、”J”という演算を行うノード1301と、”Write”という演算を行うノード1302とを有する。
これらのノードは、ステートの区切りとして、区切り1303と区切り1304とによって仕切られている。これらの区切りは、ハードウェアの動作クロックの区切りと一致している。
図14は、図13の各ノードについて、図2のCDFGの各ノードの動作情報206を示す図である。
図14において、ノード1301は演算種類”J”を行う演算ノードであり、ノード1302はメモリにデータ書き込みを行うというノードである。また、ノード1301とノード1302は、共にステート番号”n”にスケジューリングされている。
図15は、図13の各ノードについて、図2のCDFGの各ノードの接続情報207を示す図である。
図15において、ノード1301は一つの出力と二つの入力を有しており、ノード1301の入力1および2にはそれぞれレジスタr9およびレジスタr10の値が入力され、ノード1301からの出力値はノード1302に出力されている。また、ノード1302は出力がなく、二つの入力を有しており、一方の入力1から入力されるノード1301からの値はメモリに書き込まれるデータとして使用され、他方の入力2から入力されるレジスタr11の値はメモリにデータを書き込むためのアドレス情報として使用されるものとする。
図16は、図13の各ノードについて、図2のノードの動作モデル生成部210によって、ノードの動作情報206を用いて各ノードの動作モデルを生成した図である。
図16において、ノード1301の動作モデルは、入力値”1301in1”と”1302in2”とが演算の種類”J”で演算されるということを示している。また、ノード1302の動作モデルは、入力値”1302in1”が”MEM”によってメモリなどの記憶装置のアドレス”1302in2”に書き込まれるということを示している。
図17は、図16に示す計算式を、C言語の表現を用いて、図13に示すステート番号nについて、関数STATE_n_funcの中にまとめた記述例を示す図である。
図17において、ノード1301では足し算が行われるものとする。ここでは、ノードの入出力を表す変数は”node1301in”、“node1301out”のように表現されている。さらに、ノードやレジスタの出力がメモリなどの記憶装置への入力として使用される場合に、メモリなどの記憶装置への入力値計算式を用いて、その出力値がメモリに保存される。
”MEM”は、メモリのモデルをC言語における変数の配列を用いて表現したものである。本実施形態では、メモリへの書き込み動作を変数の配列への代入操作で表現しているが、これは、メモリへの書き込みが単一の機能ブロックからのみ行われると仮定しているためである。
ここで言う機能ブロックとは、回路内部で一連の動作を行う論理部分をまとめたものであり、図2に示すブロック分割部203によって生成される。この機能ブロックは、一つの回路中に複数存在させることが可能であり、各機能ブロックは並列に動作可能である。よって、複数の機能ブロックが存在し、それぞれの機能ブロックから同一のメモリなどの記憶装置への書き込みが行われる場合には、書き込み動作が同じクロックサイクル中に実行されることも考えられる。よって、このような複数の機能ブロックからの書き込み動作を調停する処理が必要となる場合がある。以下に、この調停処理について説明する。
図18は、メモリなどの記憶装置への書き込み動作において、調停が必要な場合の処理について説明するための構成例を示すブロック図である。
図18の事例では、三つの機能ブロック1801、1802および1803と、一つの調停処理部1804と、一つのメモリ1805とが設けられており、各機能ブロック1801〜1803からメモリ1805に対して書き込み動作が行われるものとする。
機能ブロック1801からの書き込み動作は、その要求を調停回路(調停処理部1804)に伝えるための”req1”と、その要求に対する返答”ack1”を用いて行われる。これと同様に、機能ブロック1802および1803についても、それぞれ、”req2”と“ack2”、および“req3”と“ack3”を用いて書き込み動作が行われる。
調停処理部1804によって書き込み動作が受理されると、書き込みを行わせる機能ブロックに対してのみ”ack”が発行されるものとする。各機能ブロックでは、”ack”が通知されたことを以って書き込み動作が完了したことが検知される。
このように、調停が必要なメモリへの書き込み動作を、本実施形態の動作モデルを用いた記述として表現すると、図17で示した計算式は図19に示すように表現される。
なお、図19に示す計算式は、図18に示す機能ブロック1801に含まれるものとする。
図19において、ノード1302の入力”1302in2”にレジスタr11からの値が入力され、ノード1301で入力値”1301in1”と”1302in2”とが足し算される。機能ブロック1801からの書き込み要求を調停回路に伝えるための”req1”が”1”とされ、ノード1302で入力値”1302in1”がメモリなどの記憶装置のアドレス”1302in2”に書き込まれる。書き込み動作が完了すると、その書き込み要求に対する返答”ack1”が”1”とされる。ポインタ”next_func”によって登録されている関数が実行されることによって、順次シミュレーションするサイクルが進められる。
図20は、図18の調停処理部1804で行われる処理の一例を示ず図である。
図20において、関数”arbitration”の中では、各機能ブロックからの書き込み要求のチェック(req1〜3が”1”であるか否かのチェック)と、書き込み動作の排他制御(”if”と”else if”による制御)、および書き込み完了の通知(ack1〜3を”1”とする)が行われている。
以上のように、図17、図19および図20で示されるC言語記述を用いることによって、スケジューリング後のCDFGにおける各ステートについて、メモリなどの記憶装置への入力値の計算を行うことが可能となる。
また、スケジューリング結果として得られるステートの実行順序に従って、サイクルアキュレートモデル生成手段111によって生成された関数を実行することによって、ハードウェアのサイクルアキュレートレベルでのシミュレーションを行うことが可能となる。
さらに、ハードウェアへの割り付け処理を行うことによって、メモリなどで実現されるハードウェア内の記憶装置について、値をサイクルアキュレートレベルで観測することも可能となる。
以上により、本実施形態によれば、CDFG生成手段109によりハードウェアの動作記述107からCDFGを生成し、スケジューリング手段110によりCDFGをハードウェア仕様として要求される動作周波数でスケジューリングしてステート毎に割り振り、サイクルアキュレートモデル生成手段111によりステート毎にハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成する。CDFGに含まれるノードの動作情報を用いて各ノードの動作モデルを生成し、ノードの接続情報を用いて各ノードの動作モデルを計算する際の順序付けを行うことにより、各ステートでシミュレーション可能なモデルを生成する。これによって、安価かつ高速にサイクルアキュレートレベルでハードウェアを検証可能な汎用プログラミング言語で記述された検証用モデルを、従来に比べて少ない計算量で生成することができる。
なお、以上のように、本発明の好ましい実施形態を用いて本発明を例示してきたが、本発明は、この実施形態に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。
本発明は、システムLSIの開発・設計に用いられ、ハードウェアを検証可能な汎用プログラミング言語記述を自動生成するためのハードウェア検証用プログラミング言語モデル生成装置、これを用いたハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、これを用いたハードウェアシミュレーション方法、この方法をコンピュータに実行させるための制御プログラムおよびその制御プログラムが格納されたコンピュータ読み出し可能な可読記憶媒体の分野において、ハードウェアのサイクルアキュレートレベルでの検証を、HDLシミュレータによる検証に比べて、高速にかつ安価に行うことが可能となる。また、ハードウェアとソフトウェアとの協調検証を行う場合でも、ハードウェアの検証を汎用プログラミング言語で記述されたモデルを用いて行うことができるため、言語の異なるデバッガを用いることなく、サイクルアキュレートレベルでの検証を効率良く行うことが可能である。
また、本発明によれば、任意のクロックサイクルにおけるハードウェア内部のレジスタや記憶装置の状態を観測することによって、ハードウェアのデバッグ効率を向上させることができる。
さらに、本発明によれば、コントロールデータフローグラフを用いてモデルを生成することによって、回路規模が大きくなった場合に、動作モデルを生成するための計算時間を大幅に削減することができる。
以上のことから、本発明によれば、LSI設計・開発におけるTATを短くすることができると共に、開発コストを削減することができる。
本発明の実施形態に係るハードウェア検証用プログラミング言語モデル生成装置を実現するためのコンピュータシステムの構成例を示すブロック図である。 本実施形態におけるハードウェア検証用プログラミング言語モデル生成方法を説明するためのフロー図である。 本実施形態のハードウェア検証用プログラミング言語生成方法について、レジスタへの入力値を求めるための計算式を生成する処理手順を説明するためのCDFGの一例を示す図である。 図3の各ノードについて、図2のCDFGの各ノードの動作情報の一例を示す図である。 図3の各ノードについて、図2のCDFGの各ノードの接続情報の一例を示す図である。 図3の各ノードについて、図2の各ノードの動作モデル生成部によって、図4のノードの動作情報を用いて各ノードの動作モデルを生成する一例を示す図である。 図3に示すステートnの区切り313を超えるときに、更新されるレジスタへの入力値の計算式の一例を、レジスタへの入力値計算式生成部によって、図5に示すノードの接続情報を用いて生成した図である。 図3に示すステートn+1の区切り314を超えるときに、更新されるレジスタへの入力値の計算式の一例を、レジスタへの入力値計算式の生成部によって、図5に示すノードの接続情報を用いて生成した図である。 図3に示すステートn+2の区切り315を超えるときに、更新されるレジスタへの入力値の計算式の一例を、レジスタへの入力値計算式の生成部によって、図5に示すノードの接続情報を用いて生成した図である。 図6〜図9に示す計算式を、C言語の表現を用いて、図3に示すステート番号nについて、関数STATE_n_funcの中にまとめた記述例を示す図である。 図6〜図9に示す計算式を、C言語の表現を用いて、図3に示すステート番号n+1について、関数STATE_n_funcの中にまとめた記述例を示す図である。 図6〜図9に示す計算式を、C言語の表現を用いて、図3に示すステート番号n+2について、関数STATE_n_funcの中にまとめた記述例を示す図である。 本実施形態のハードウェア検証用プログラミング言語モデル生成方法について、メモリなどの記憶装置への入力値を求めるための計算式を生成する処理手順を説明するためのCDFGの一例を示す図である。 図13の各ノードについて、図2のCDFGの各ノードの動作情報を示す図である。 図13の各ノードについて、図2のCDFGの各ノードの接続情報を示す図である。 図13の各ノードについて、図2のノードの動作モデル生成部によって、ノードの動作情報を用いて生成された各ノードの動作モデルを示す図である。 図16に示す計算式を、C言語の表現と用いて、図13に示すステート番号nについて、関数STATE_n_funcの中にまとめた記述例を示す図である。 メモリなどの記憶装置への書き込み動作において、調停が必要な場合の処理について説明するための構成例を示すブロック図である。 図17の記述例を、メモリなどの記憶装置への書き込み動作において調停処理が必要とされる場合に変更した記述例を示す図である。 図18の調停処理部で行われる処理の一例を示す図である。
符号の説明
100 コンピューターシステム
101 モニタ装置
102 入力装置
103 計算機本体
104 CPU
105 記憶装置
106 HDD(ハードディスク)
107 ハードウェアの動作記述
108 高位合成手段(プログラム)
109 CDFG生成手段
110 スケジューリング手段
111 サイクルアキュレートモデル生成手段
202 構文解析・字句解析部
203 ブロック分割部
204 CDFG生成部
205 スケジューリング部
206 CDFGの各ノードの動作情報
207 CDFGの各ノードの接続情報
208 サイクルアキュレートモデル生成部
209 サイクルアキュレートモデルの記述
210 動作モデル生成部
211 レジスタへの入力値計算式生成部
212 記憶装置への入力値計算式生成部

Claims (18)

  1. ハードウェアを検証可能な汎用プログラミング言語モデルを自動生成するハードウェア検証用プログラミング言語モデル生成装置であって、
    該ハードウェアの動作が表現された動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、
    ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステート毎に割り振るスケジューリング手段と、
    該各ステート毎に該コントロールデータフローグラフを用いて、該ハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成するサイクルアキュレートモデル生成手段とを有するハードウェア検証用プログラミング言語モデル生成装置。
  2. 前記サイクルアキュレートモデル生成手段は、
    前記各ステートでシミュレーション可能なモデルを生成するために、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて該各ノードの動作モデルを生成し、該各ノードの接続情報を用いて該各ノードの動作モデルを計算する際の順序付けを行う動作モデル生成部を有する請求項1に記載のハードウェア検証用プログラミング言語モデル生成装置。
  3. 前記サイクルアキュレートモデル生成手段は、
    あるノードの出力がステートを超えて他のノードへの入力として使用される場合に、該あるノードの出力値をレジスタに保存するための計算式を、該あるノードの出力結果を示すモデルを用いて生成する該レジスタへの入力値計算式生成部を有する請求項1または2に記載のハードウェア検証用プログラミング言語モデル生成装置。
  4. 前記サイクルアキュレートモデル生成手段は、
    あるノードまたはレジスタの出力が記憶装置への入力として使用される場合に、該あるノードまたはレジスタの出力値を該記憶装置に保存するための計算式を、該あるノードまたはレジスタの出力結果を示すモデルを用いて生成する該記憶装置への入力値計算式生成部を有する請求項1〜3のいずれかに記載のハードウェア検証用プログラミング言語モデル生成装置。
  5. 前記サイクルアキュレートモデル生成手段は、
    前記ハードウェアの動作モデルを、前記各ステートでシミュレーション可能なモデルとして、汎用プログラミング言語の関数を用いて表現する請求項1〜4のいずれかに記載のハードウェア検証用プログラミング言語モデル生成装置。
  6. 前記コントロールデータフローグラフ生成手段は、
    前記ハードウェアの構造に関する記述が含まれず、処理の動作のみが記述された動作記述を解析する構文解析・字句解析部と、
    該構文解析・字句解析部で解析した並列動作に従って回路のブロック分割を行うブロック分割部と、
    分割した各ブロック毎に、該ハードウェアによって実行される演算内容がノードで表され、該ノード間のデータの流れが枝で表されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成部とを有する請求項1に記載のハードウェア検証用プログラミング言語モデル生成装置。
  7. 前記各ノードの動作情報は、前記各ノード毎に、少なくとも、該ノードが演算か否か、また、該ノードが演算の場合にどのような種類の演算を行うのか、該ノードが演算でない場合にどのような機能を有するのかを示す演算内容と、階層と、前記ステートの番号とを含む請求項2に記載のハードウェア検証用プログラミング言語モデル生成装置。
  8. 前記各ノードの接続情報は、該ノードの出力先と入力先とを示す情報を含む請求項2に記載のハードウェア検証用プログラミング言語モデル生成装置。
  9. 請求項1〜8のいずれかに記載のハードウェア検証用プログラミング言語モデル生成装置と、
    前記スケジューリング結果として得られるステートの実行順序に従って、前記サイクルアキュレートモデル生成手段によって生成された関数を実行することによって、前記ハードウェアのシミュレーションを行うシミュレーション手段とを有するコンピュータシステム。
  10. ハードウェアを検証可能な汎用プログラミング言語記述を自動生成するハードウェア検証用プログラミング言語モデル生成方法であって、
    該ハードウェアの動作が表現された動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、
    ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステート毎に割り振るスケジューリングステップと、
    該各ステート毎に該コントロールデータフローグラフを用いて、該ハードウェアの動作モデルを汎用プログラミング言語で表現した記述として生成するサイクルアキュレートモデル生成ステップとを有するハードウェア検証用プログラミング言語モデル生成方法。
  11. 前記サイクルアキュレートモデル生成ステップは、
    前記各ステートでシミュレーション可能なモデルを生成するために、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて該各ノードの動作モデルを生成し、該各ノードの接続情報を用いて該各ノードの動作モデルを計算する際の順序付けを行う動作モデル生成ステップを有する請求項10に記載のハードウェア検証用プログラミング言語モデル生成方法。
  12. 前記サイクルアキュレートモデル生成ステップは、
    あるノードの出力がステートを超えて他のノードへの入力として使用される場合に、該あるノードの出力値をレジスタに保存するための計算式を、該あるノードの出力結果を示すモデルを用いて生成する該レジスタへの入力値計算式生成ステップを有する請求項10または11に記載のハードウェア検証用プログラミング言語モデル生成方法。
  13. 前記サイクルアキュレートモデル生成ステップは、
    あるノードまたはレジスタの出力が記憶装置への入力として使用される場合に、該あるノードまたはレジスタの出力値を該記憶装置に保存するための計算式を、該あるノードまたはレジスタの出力結果を示すモデルを用いて生成する該記憶装置への入力値計算式生成ステップを有する請求項10〜12のいずれかに記載のハードウェア検証用プログラミング言語モデル生成方法。
  14. 前記サイクルアキュレートモデル生成ステップは、
    前記ハードウェアの動作モデルを、前記各ステートでシミュレーション可能なモデルとして、汎用プログラミング言語の関数を用いて表現する請求項10〜13のいずれかに記載のハードウェア検証用プログラミング言語モデル生成方法。
  15. 前記コントロールデータフローグラフ生成ステップは、
    前記ハードウェアの構造に関する記述が含まれず、処理の動作のみが記述された動作記述を解析する構文解析・字句解析ステップと、
    該構文解析・字句解析ステップで解析した並列動作に従って回路のブロック分割を行うブロック分割ステップと、
    分割した各ブロック毎に、該ハードウェアによって実行される演算内容がノードで表され、該ノード間のデータの流れが枝で表されたコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップとを有する請求項10に記載のハードウェア検証用プログラミング言語モデル生成方法。
  16. 請求項10〜15のいずれかに記載のハードウェア検証用プログラミング言語モデル生成方法の各ステップと、
    前記スケジューリング結果として得られるステートの実行順序に従って、前記サイクルアキュレートモデル生成ステップによって生成された関数を実行することによって、前記ハードウェアのシミュレーションを行うシミュレーションステップとを有するハードウェアシミュレーション方法。
  17. 請求項10〜16のいずれかに記載の方法の各ステップをコンピュータによって実行するための処理手順が記述された制御プログラム。
  18. 請求項17に記載の制御プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体。
JP2004331229A 2004-11-15 2004-11-15 ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体 Pending JP2006139729A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004331229A JP2006139729A (ja) 2004-11-15 2004-11-15 ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体
US11/272,712 US20060130029A1 (en) 2004-11-15 2005-11-15 Programming language model generating apparatus for hardware verification, programming language model generating method for hardware verification, computer system, hardware simulation method, control program and computer-readable storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004331229A JP2006139729A (ja) 2004-11-15 2004-11-15 ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体

Publications (1)

Publication Number Publication Date
JP2006139729A true JP2006139729A (ja) 2006-06-01

Family

ID=36585577

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004331229A Pending JP2006139729A (ja) 2004-11-15 2004-11-15 ハードウェア検証用プログラミング言語モデル生成装置、ハードウェア検証用プログラミング言語モデル生成方法、コンピュータシステム、ハードウェアシミュレーション方法、制御プログラムおよび可読記憶媒体

Country Status (2)

Country Link
US (1) US20060130029A1 (ja)
JP (1) JP2006139729A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009140028A (ja) * 2007-12-03 2009-06-25 Sharp Corp ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、制御プログラムおよび可読記録媒体
KR100939642B1 (ko) 2008-11-06 2010-01-29 전자부품연구원 소프트웨어 기반의 스티뮬러스를 생성하는 검증 장치, 상기검증 장치를 이용한 검증 방법 및 소프트웨어 기반의 스티뮬러스를 생성하는 프로그램이 구비된 컴퓨터 기록매체
JP2010237858A (ja) * 2009-03-30 2010-10-21 Sharp Corp 高位合成装置および高位合成方法、半導体集積回路の製造方法、制御プログラム、可読記憶媒体
JP2011053805A (ja) * 2009-08-31 2011-03-17 Sharp Corp ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム
US7992112B2 (en) 2006-11-07 2011-08-02 Sharp Kabushiki Kaisha Hardware verification programming description generation apparatus, high-level synthesis apparatus, hardware verification programming description generation method, hardware verification program generation method, control program and computer-readable recording medium

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006285865A (ja) * 2005-04-04 2006-10-19 Nec Electronics Corp レジスタ転送レベル記述と動作記述間の対応関係特定方法、装置及びプログラム
US20090007038A1 (en) * 2007-04-05 2009-01-01 Nec Laboratories America, Inc. Hybrid counterexample guided abstraction refinement
US8359561B2 (en) * 2007-12-06 2013-01-22 Onespin Solutions Gmbh Equivalence verification between transaction level models and RTL at the example to processors
JP2009157440A (ja) * 2007-12-25 2009-07-16 Toshiba Corp 高位合成装置、高位合成システム、及び高位合成方法
US8627299B2 (en) 2008-02-29 2014-01-07 International Business Machines Corporation Virtual machine and programming language for event processing
US8397216B2 (en) * 2008-02-29 2013-03-12 International Business Machines Corporation Compiler for a declarative event-driven programming model
US8365149B2 (en) * 2008-02-29 2013-01-29 International Business Machines Corporation Debugger for a declarative event-driven programming model
US8769500B2 (en) * 2010-10-29 2014-07-01 Fujitsu Limited Node computation initialization technique for efficient parallelization of software analysis in a distributed computing environment
CN105574269B (zh) * 2015-12-16 2019-02-12 青岛大学 一种专用指令处理器的设计验证方法
CN113794558B (zh) * 2021-09-16 2024-02-27 烽火通信科技股份有限公司 一种XMSS算法中的L-tree计算方法、装置及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6745160B1 (en) * 1999-10-08 2004-06-01 Nec Corporation Verification of scheduling in the presence of loops using uninterpreted symbolic simulation
US6993469B1 (en) * 2000-06-02 2006-01-31 Arm Limited Method and apparatus for unified simulation
JP2006048525A (ja) * 2004-08-06 2006-02-16 Toshiba Corp シミュレーション方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7992112B2 (en) 2006-11-07 2011-08-02 Sharp Kabushiki Kaisha Hardware verification programming description generation apparatus, high-level synthesis apparatus, hardware verification programming description generation method, hardware verification program generation method, control program and computer-readable recording medium
JP2009140028A (ja) * 2007-12-03 2009-06-25 Sharp Corp ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、制御プログラムおよび可読記録媒体
KR100939642B1 (ko) 2008-11-06 2010-01-29 전자부품연구원 소프트웨어 기반의 스티뮬러스를 생성하는 검증 장치, 상기검증 장치를 이용한 검증 방법 및 소프트웨어 기반의 스티뮬러스를 생성하는 프로그램이 구비된 컴퓨터 기록매체
JP2010237858A (ja) * 2009-03-30 2010-10-21 Sharp Corp 高位合成装置および高位合成方法、半導体集積回路の製造方法、制御プログラム、可読記憶媒体
JP2011053805A (ja) * 2009-08-31 2011-03-17 Sharp Corp ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、及び制御プログラム

Also Published As

Publication number Publication date
US20060130029A1 (en) 2006-06-15

Similar Documents

Publication Publication Date Title
US20060130029A1 (en) Programming language model generating apparatus for hardware verification, programming language model generating method for hardware verification, computer system, hardware simulation method, control program and computer-readable storage medium
JP4994393B2 (ja) 単一のマスターモデルから異なる抽象化レベルの複数のモデルを生成するシステムと方法
CN101720465B (zh) 通过时钟采样进行相位关系计算
US7761272B1 (en) Method and apparatus for processing a dataflow description of a digital processing system
JP4393450B2 (ja) 論理回路モデル変換装置及び論理回路モデル変換プログラム
CN101720464A (zh) 从仿真器状态至hdl模拟器的转换
JP6600011B2 (ja) エミュレーションのための効率的波形生成
JP4175953B2 (ja) 高位合成装置、ハードウェア検証用モデル生成方法、ハードウェア検証方法、制御プログラムおよび可読記録媒体
US10331830B1 (en) Heterogeneous logic gate simulation using SIMD instructions
JP5034916B2 (ja) 性能評価モデル生成方法、システム性能評価方法、及び性能評価モデル生成装置
US10331825B2 (en) Waveform based reconstruction for emulation
JP4293562B2 (ja) ハードウェア検証用プログラミング記述生成装置、高位合成装置、ハードウェア検証用プログラミング記述生成方法、ハードウェア検証用プログラム生成方法、制御プログラムおよび可読記録媒体
US11995386B2 (en) Verification of hardware design for data transformation component
Goli et al. Through the looking glass: Automated design understanding of SystemC-based VPs at the ESL
US10223077B2 (en) Determination of signals for readback from FPGA
JP5001126B2 (ja) ハードウェア検証用プログラミング記述生成装置、ハードウェア検証用プログラミング記述生成方法、制御プログラムおよび可読記録媒体
JP5328447B2 (ja) 高位合成装置および高位合成方法、半導体集積回路の製造方法、制御プログラム、可読記憶媒体
US7454680B2 (en) Method, system and computer program product for improving efficiency in generating high-level coverage data for a circuit-testing scheme
JP2007018313A (ja) 回路設計プログラム、回路設計装置、回路設計方法
Hanafy et al. New methodology for digital design properties extraction from simulation traces
Hanafy et al. New methodology for complete properties extraction from simulation traces guided with static analysis
Kumar et al. ADEPT: A Unified Environment for End-to-End System Design
Sarkar et al. LightningSimV2: Faster and Scalable Simulation for High-Level Synthesis via Graph Compilation and Optimization
CN116911219A (zh) 用于逻辑系统设计的仿真的方法、电子设备和存储介质
Hua Cyclone: The First Integrated Timing and Power Engine for Asynchronous Systems

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080901

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081104

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20081203