(57)【要約】【課題】ハードウェア支援設計検証システム内で、機能検証を受けるユーザー設計内のレジスタ及びメモリのアクセス性を増大するシステムが提供される。【解決手段】パケット基準のプロトコルは、論理シミュレーション中、検証下の目標設計（ＤＵＶ）内のレジスタ及びメモリにデータをロードし及びデータをアンロードするためのホストワークステーションとハードウェアアクセラレータとの間でのデータ転送動作を実行するために用いられる。方法及び装置は、ハードウェアアクセラレータの支援によってシミュレートされる目標ＤＵＶ内のレジスタ及びメモリへの良好なアクセスを提供するために、インターフェース論理をＤＵＶ内に統合する。【選択図】図１
2004519041.tif 000002
【特許請求の範囲】
【請求項１】
ユーザー設計内のメモリ及びレジスタへの読み出し及び書き込に対する良好なアクセスを許容するためにユーザ設計をコンパイルする方法であって、
ユーザー設計内の全てのメモリ及びレジスタを識別するステップと、
メモリ及びレジスタへのアクセスポートを生成するアクセス可能論理をユーザー設計内に統合するステップと、
を有している。
【請求項２】
請求項１に記載の方法であって、更に、ユーザー設計内の各メモリ及びレジスタにユニークな識別子を割り当てるステップを有している。
【請求項３】
請求項２に記載の方法であって、前記アクセス可能論理は、前記ユニークな識別子を受信し、ユーザー設計内のメモリ及びレジスタの所定の１つを選択するように構成されている選択論理を有している。
【請求項４】
請求項３に記載の方法であって、前記アクセス可能論理は、ユーザー設計内のメモリ及びレジスタの前記所定の１つから読み出し及び１つに書き込むための論理を有している。
【請求項５】
請求項４に記載の方法であって、前記アクセス可能論理は、ホストからのコマンドを受信し、ユーザー設計内のメモリ及びレジスタに対するデータの読み出し及び書き込みの実行を制御するデコード論理を有している。
【請求項６】
ハードウェアアクセラレータと通信するホストワークステーションを有し、目標設計を検証するためのハードウェア支援検証システムであり、目標設計は、レジスタ及びメモリを有し、ホストワークステーションは、レジスタ及びメモリにデータをロードしあるいはデータをアンロードするものであって、
論理回路内に統合されるプロトコル論理を有し、該プロトコル論理は、
前記ホストワークステーションと通信する入力パケットレジスタと、
前記ホストワークステーションと通信する出力パケットレジスタと、
目標設計内の所定の動作、レジスタあるいはメモリ位置を識別するために、前記入力パケットレジスタ内のコマンドをデコードするコマンドデコード論理と、
前記コマンドデコード論理でデコードされる書込コマンドのために、前記入力パケットレジスタ内に蓄積されているデータを、前記目標設計内の前記レジスタあるいはメモリ位置に書き込む書込コマンド実行論理と、
前記コマンドデコード論理でデコードされる読出コマンドのために、前記目標設計内の前記レジスタあるいはメモリ位置からデータを読み出し、前記データを前記出力パケットレジスタ内に蓄積する読出コマンド実行論理と、
前記目標設計内の前記レジスタ及びメモリをインターフェースするインターフェース論理と、
を有している。
【請求項７】
請求項６に記載のハードウェ支援設計検証システムであって、前記プロトコル論理は、前記入力パケットレジスタからのデータが新しいか否かを決定し、コマンドのデコード及び実行の作動を制御する論理を含んでいる。
【請求項８】
ハードウェアアクセラレータを用いて機能検証を実行する際に、目標設計内のレジスタ及びメモリに対するアクセスを提供するために、パケット基準のプロトコル論理を統合する方法であって、
タグ、コマンド及びデータエンド領域を有する要求パケットの固定サイズを決定するステップと、
目標設計内に存在するレジスタの数を計数するステップと、
目標設計内に存在するメモリの数を計数するステップと、
前記要求パケットの最大識別領域サイズを決定するステップと、
目標設計内のレジスタの最大データビット数を決定するステップと、
目標設計内のメモリの最大データビット数を決定するステップと、
目標設計内のメモリの最大アドレスビット数を決定するステップと、
前記要求パケットのデータ領域サイズを決定するために、レジスタデータ、メモリデータ及びメモリアドレスを目標設計に送信する最大ビット数を決定するステップと、
を有している。
【請求項９】
請求項８に記載の方法であって、更に、
ハードウェアアクセラレータ内の入力データバッファに結合される入力パケットレジスタを生成するステップと、
ハードウェアアクセラレータ内の出力データバッファに結合される出力パケットレジスタを生成するステップと、
前記入力パケットレジスタ内のコマンドをデコードするコマンドデコードブロックを生成するステップと、
前記デコードブロックでデコードされるコマンドを実行する実行論理を生成するステップと、
前記目標設計内のレジスタ及びメモリをアクセスするインターフェース論理を生成するステップと、
を有している。
【請求項１０】
請求項９に記載の方法であって、更に、
目標設計内のメモリを識別するメモリ識別レジスタを生成するステップと、
アクセスのために現在メモリアドレスを提供するメモリアドレスレジスタを生成するステップと、
メモリ読出コマンドあるいはメモリ書込コマンドが実行された後に前記現在メモリをインクリメントするステップと、
パケット基準のプロトコル論理が非メモリモード、連続メモリ書込モードあるいは連続メモリ読出モードのいずれかにあることを示す限定状態マシンを生成するステップと、
連続メモリ動作が終了すると前記非メモリモードを選択し、連続メモリ書込動作が開始されると前記連続メモリ書込モードを選択し、連続メモリ読出動作が開始されると前記連続メモリ読出モードを選択する状態遷移制御を生成するステップと、
を有している。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的には、デジタルハードウェア設計検証システムに関し、特に、論理シミュレーションのためのハードウェアアクセラレータ（ｈａｒｄｗａｒｅ  ａｃｃｅｌｅｒａｔｏｒ）を使用するハードウェア支援設計検証システム（ｈａｒｄｗａｒｅ−ａｓｓｉｓｔｅｄ  ｄｅｓｉｇｎ  ｖｅｒｉｆｉｃａｔｉｏｎ  ｓｙｓｔｅｍ）に関する。
【０００２】
【従来の技術】
近年の電子産業では、多くのデジタルハードウェア設計は、ハードウェ記述言語で記述されている。例えば、ＩＥＥＥによって１９９６年に発行された“Ｖｅｒｉｌｏｇハードウェア記述言語に基づくＩＥＥＥ標準ハードウェア記述言語”で規定されているＩＥＥＥ標準１３６４−１９９５ハードウェア記述言語が、一般的なハードウェア記述言語の１つである。このようなハードウェア記述言語で書かれているデジタルハードウェア設計は、製造のための最終のネットリストを発生するためにコンパイル（ｃｏｍｐｉｌｅ）される前に、意図されている機能に対した検証される必要がある。この設計検証作業は、論理シミュレーションと協同する。
【０００３】
ハードウェア支援設計検証システムは、ソフトウェア基準の検証システム（ｓｏｆｔｗａｒｅ−ｂａｓｅｄ  ｖｅｒｉｆｉｃａｔｉｏｎ  ｓｙｓｔｅｍ）が提供可能な性能よりも高度の性能を要求する、設計検証作業等級のための論理シミュレーションの作業を強調するハードウェアアクセラレータを使用する。ハードウェアアクセラレータは、それぞれ論理ゲートをシミュレート可能な多くの論理プロセッサを有する特別の論理シミュレーションマシン（ｌｏｇｉｃ  ｓｉｍｕｌａｔｉｏｎ  ｍａｃｈｉｎｅ）である。例えば、１９８１年１２月１５日に特許された、Ｃｏｃｋｅらの米国特許第４３０６２８６号の“論理シミュレーションマシン”には、このような論理シミュレーションマシンが開示されている。このようなハードウェアアクセラレータを使用しないでも、検証を実行することができることに注意する。
【０００４】
ハードウェアアクセラレータとして使用可能なハードウェア装置の１つは、カリフルニア州、サンホセのクイックターン・デザインシステムズ・インコーポレイテッド（本発明の譲受人）からの製品“Ｃｏｂａｌｔ（登録商標）”である。典型的なハードウェア支援設計検証システムでは、ハードウェアアクセラレータは、ホストワークステーションに接続される。ホストワークステーションは、検証を受けるコンパイルされた設計（以下では、“ＤＵＶ”あるいは“ユーザー設計”という）をハードウェアアクセラレータにロードし、論理シミュレーションを開始させ、論理シミュレーションを終了させ、ハードウェアアクセラレータからのシミュレーション結果をアンロードする、検証制御プログラムを実行する。ユーザーは、ＤＵＶが期待通りにシミュレートされたか否かを判別するために、シミュレーション結果を期待されている結果と比べる。設計検証の初期の段階では、シミュレーション結果が間違っていることをユーザーが発見する時に、ユーザーがＤＵＶ内の問題を発見することは、比較的容易である。しかしながら、後の設計検証段階では、ＤＵＶをデバッグするのはより困難となる。この問題のため、ユーザーは、しばしば、論理シミュレーションの間、ＤＵＶ内の重要な信号の中間値を検査することを望む。ユーザーからのそのような要求を満たすために、設計検証システムは、論理シミュレーションの間、ＤＵＶ内の信号をユーザーが視認可能あるいはアクセス可能とするために、信号可視動作のための支援を提供する。
【０００５】
ホストワークステーションと、ＤＵＶをシミュレートするハードウェアアクセラレータとの間の特別の通信を必要とするため、信号可視動作のための支援を提供することは、ソフトウェア基準の検証システムにとっては容易であるが、ハードウェア支援検証システムにとってはそれほど容易ではない。
【０００６】
ハードウェアアクセラレータへのＤＵＶの初期ロードは、通常、ＳＣＳＩインターフェースのような非常に一般的なＩ／Ｏインターフェースを介して実行される。この場合、ハードウェアアクセラレータ内のインターフェース制御プログラムは、先ず要求信号を識別し、それらを配置し、それらの値を読み取り、それらをホストワークステーションに送り返す。
【０００７】
信号可視動作は、通常、特別の信号の中間の値を試験する動作だけでなく、その後のシミュレーションステップのための信号上に論理値を置く動作も含んでいる。これらの基本動作を用いることによって、ユーザーは、レジスタビットに対応する信号グループをアクセスすることによって、レジスタの値を試験し、あるいはレジスタ上に値を置くことができる。
【０００８】
【発明が解決しようとする課題】
進歩した半導体チップ技術を利用するために、大容量のメモリを含むＤＵＶの数が増加している。通常の信号可視動作では、基本の信号可視動作が、個々の信号の低レベルの試験あるいは信号を置く動作に基づいているため、ＤＵＶ内の大容量メモリにデータをロードしあるいはデータをアンロードするのに長時間を要する。
【０００９】
ＤＵＶ内のレジスタ及びメモリのためのロード動作及びアンロード動作を加速するために、ハードウェア支援設計検証システムは、信号可視動作のために供されたホストワークステーションとハードウェアアクセラレータとの間の特別の通信チャンネルを用いることができる。ハードウェアアクセラレータ上にシミュレートされたＤＵＶ内の要求信号をアクセスする際の費用を最小化するために、特別の通信チャンネルは、インターフェース制御プログラムを必要とすることなくＤＵＶに順に直接にインターフェースする、入力及び出力データバッファに直接に接続される。
【００１０】
データバッファを有するインターフェース構成の１つは、インターフェース遅延を最小化するために、ホストコンピュータと論理シミュレーションマシンとの間に設けられるファーストイン−ファーストアウトバッファあるいはＦＩＦＯバッファとのインターフェースについて述べている、１９９８年２月２４日に発行された、Ｆｏｇｇ，Ｊｒ．らの米国特許第５７２１９５３号“同時転送のためのパラレルバスを使用し、準備が整った受信ユニットにデータを送信するためのＦＩＦＯバッファを有する論理シミュレーションのためのインターフェース”に開示されている。米国特許第５７２１９５３号の開示内容は、全て参照として本明細書中に組み込まれる。
【００１１】
出力信号は、出力データバッファのビットに割り当てられ、一方、入力信号は、入力データバッファのビットに割り当てられる。例示の動作（すなわち、信号の値の監視あるいは読み取り）では、検証制御プログラムは、出力データバッファに蓄積されている信号の値をホストワークステーションに送信するためにデータ転送を開始し、要求された信号の値を選択する。信号を置く動作（すなわち、信号の値の書き込み）に対しては、検証制御プログアムは、置く信号を組み立て（ａｓｓｅｍｂｌｅ）、それらをハードウェアアクセラレータ内の入力データバッファに送信するためにデータ転送を開始する。ＤＵＶにインターフェースするために必要な、付加的な書込及び論理構成要素は、ＤＵＶが論理シミュレーションのためにコンパイルされる時に統合（ｓｙｎｔｈｅｓｉｚｅ）される。
【００１２】
信号可視動作のために統合される書込及び論理構成要素は、ＤＵＶの部分ではなく、論理シミュレーションのためにＤＵＶと合併された仮想の構成要素である。仮想の論理構成要素は、１９９８年６月のＡＣＭ／ＩＥＥＥ設計自動化会議の会報において、Ｂｅｅｃｅらによって発行された技術論文“ＩＢＭ工学検証エンジン”（ｐ２１８−２２４）に開示されているように、ＤＵＶへの入力を発生し、シミュレーション出力を検査するテストベンチ（ｔｅｓｔｂｅｎｃｈ）のためにしばしば用いられる。
【００１３】
入力及び出力信号の入力及び出力データバッファへの静的な割り当ては、信号可視動作のための可視信号の数が比較的少ない場合には許容される。しかしながら、物理的に利用可能なデータバッファのビット数に制限があるため、可視信号の数が多いことは好ましくない。
【００１４】
ＤＵＶ内での信号に対するアクセス可能性の問題の解決手段の１つは、可視信号の数を効果的に増加させるために、データバッファ内の各ビットに対して２あるいは３以上の信号を時間多重することである。多数の信号を時間多重する方法の１つは、多数の論理ワイヤ間で各物理ワイヤを知的に多重化し、これらをパイプライン（ｐｉｐｅｌｉｎｅ）接続するコンパイル技術を述べている、１９９７年１月２１日に発行された、Ａｇａｒｗａｌらの米国特許第５５９６７４２号“再構築可能な論理システムのための仮想相互接続”に開示されている。Ａｒｇａｒｗａｌらの開示内容と大きく異なる他の時間多重方法は、多数の設計信号を物理的な論理チップピン及び印刷回路ボード上に時間多重するハードウェアエミュレーションシステムを開示している、２０００年２月１日に発行された米国特許第６０２０７６０号“ピン多重を有するＩ／Ｏバッファ回路”に開示されている。米国特許第５５９６７４２号、米国特許第５９６０１９１号及び米国特許第６０２０７６０号は、その全てが、本明細書中で参照として組み込まれている。
【００１５】
これらの時間多重方法は、データバッファを介する可視信号の数を効率よく増加させることができるが、ＤＵＶ内のレジスタ及びメモリをアクセスする動作結果をもたらさない。レジスタあるいはメモリをアクセスするために必要な信号のグルーピングは、グループ内の信号に対するビットの値を集めて散乱させることによって生じる費用を低減することができる。しかしながら、グループ内の全ての信号が同時に可視可能でなければならず、そのような信号グループが多く存在し、２あるいは３以上のグループによって分配される信号が存在するため、この信号グルーピング法は、複数の信号を時間多重する際に厳しい制限を課する。
【００１６】
信号グルーピングを有していてもいなくても、ローレベルの試験及び信号を置く動作を用いる１つのレジスタをアクセスするために、数ステップが必要である（１つのメモリワードをアクセスするためには、より多くのステップが必要である。）。したがって、メモリに多数のデータをロードしあるいはメモリから多数のデータをアンロードする検証制御プログラムのために、非常に長い時間を要することが予想される。全体のシミュレーション動作を実質的に低下させる、このような時間を消費するロード動作及びアンロード動作は、数クロックサイクルがシミュレートされるような、実際的でないシミュレーションを与える。
【００１７】
ＤＵＶが多くの大容量のメモリを有している場合には、この動作低下は非常に重大となり、ハードウェアアクセラレータを有するシミュレーション動作の価値を実質的に無効にする。データのロード及びデータのアンロードのために必要な時間を低減する方法及び装置の提供が望まれている。また、レジスタ及びメモリに容易にアクセスするための方法及び装置の提供が望まれている。
【００１８】
【課題を解決するための手段】
本発明は、検証下の目標設計（目標設計あるいはユーザー設計としても知られている）内のレジスタ及びメモリにデータをロードしあるいはデータをアンロードするために、ホストワークステーションとハードウェアアクセラレータとの間のデータ転送動作を実行する新規なパケット基準のプロトコル（ｐａｃｋｅｔ−ｂａｓｅｄ  ｐｒｏｔｏｃｏｌ）を用いる。プロトコルは、可変サイズの要求パケット（ｒｅｑｕｅｓｔ  ｐａｃｋｅｔ）及び応答パケット（ｒｅｓｐｏｎｓｅ  ｐａｃｋｅｔ）に基づいている。要求パケットは、ホストワークステーションからハードウェアアクセラレータへの入力パケットであり、コマンド、独立変数（ａｒｇｕｍｅｎｔ）及び任意のデータを含んでいる。一方、応答パケットは、ハードウェアアクセラレータからホストワークステーションへの出力パケットであり、ＤＵＶ内の目標レジスタあるいは目標メモリからの読出データを含んでいる。
【００１９】
本発明の実施の形態の１つのアスペクトでは、ユーザー設計内の全てのメモリ及びレジスタが識別される、ユーザー設計をコンパイルするための方法が示されている。メモリ及びレジスタが識別された後、アクセス可能論理（ａｃｃｅｓｉｂｉｌｉｔｙ  ｌｏｇｉｃ）が、ユーザー設計内に統合される。アクセス可能論理は、メモリ及びレジスタへのアクセスポートを有している。本発明の他のアスペクトでは、ユニークな識別子（ｉｄｅｎｔｉｆｉｅｒ）が、ユーザー設計内のメモリ及びレジスタのそれぞれに割り当てられる。本発明の更に他のアスペクトでは、アクセス可能な論理は、選択論理（ｓｅｌｅｃｔ  ｌｏｇｉｃ）を有している。この選択論理は、ユニークな識別子を受信し、ユーザー設計内のメモリあるいはレジスタの所定の１つを選択するように構成されている。本発明の他のアスペクトでは、アクセス可能論理は、ユーザー設計内のメモリあるいはレジスタの所定の１つから読み出しあるいは書き込むための論理を有している。本発明の更に他のアスペクトでは、アクセス可能論理は、ホストからのコマンドを受信し、ユーザー設計内のメモリ及びレジスタに対するデータの読み出し及び書き込みの実行を制御するデコード論理（ｄｅｃｏｄｅ  ｌｏｇｉｃ）を有している。
【００２０】
要求パケット及び応答パケットを扱うために、プロトコルインターフェース論理（ｐｒｏｔｏｃｏｌ  ｉｎｔｅｒｆａｃｅ  ｌｏｇｉｃ）が、目標ＤＵＶ内のレジスタ及びメモリのサイズパラメータと共にコンパイル時に統合され、実行時に目標ＤＵＶと共にシミュレートされる。統合されるプロトコルインターフェース論理は、パケットレジスタ、限定状態マシン（ｆｉｎｉｔｅ  ｓｔａｔｅ  ｍａｃｈｉｎｅ）、コマンドデコード論理、コマンド実行論理、データロード動作及びデータアンロード動作のためのデータ読出制御論理及びデータ書込制御論理を含んでいる。プロトコルインターフェース論理は、ホストワークステーション上で作動している検証制御プログラムからの要求パケットをデコードし、パケット内にデコードされているコマンドを実行する。コマンドがデータ書込要求である場合には、プロトコルインターフェース論理は、パケット内のデータを目標レジスタ位置あるいは目標メモリ位置に書き込む。コマンドがデータ読出要求である場合には、プロトコルインターフェース論理は、目標レジスタ位置あるいは目標メモリ位置からデータを読み出し、それをホストワークステーションへの応答パケット内に送る。
【００２１】
実施化の種々の新規な詳細及び要素の組み合わせを含む、本発明の前記した及び他の好ましい特徴は、添付の図面を参照してより詳細に説明され、クレームに記載されている。本発明を実施する特別の方法及び回路は、説明のためにのみ示されており、本発明を限定するものでないことが理解できる。当業者であれば理解できるように、本発明の原理及び特徴は、本発明の概念を逸脱することなく、種々のまた多くの実施の形態において用いることができる。
【００２２】
【発明の実施の形態】
図面には、本発明の現時点での好ましい装置及び方法が開示されている。
第１のステップは、ＤＵＶ内のメモリ及びレジスタを識別することである。１つの実施の形態では、この第１のステップは、ＤＵＶの全てのメモリ及びレジスタの識別を含んでいる。他の実施の形態では、この第１のステップは、ＤＵＶ内のメモリ及びレジスタのサブセットのみの識別を含んでいる。この実施の形態では、ユーザーは、特に関係があるあるいは興味があるメモリ及びレジスタを識別する必要がある。ＤＵＶのメモリ及びレジスタのサブセットのみを識別することの利点は、ＤＵＶを、検証のためにより迅速にコンパイル可能であることである。しかしながら、メモリ及びレジスタのサブセットを識別することのみでは、本発明の種々の実施の形態によって提供される利点は、識別される特別のメモリ及びレジスタに制限される。以下により詳細に説明するように、メモリ及びレジスタが識別されると、それらは、各識別されたメモリ及びレジスタがユニークな識別子（ｕｎｉｑｕｅ  ｉｄｅｎｔｉｆｉｅｒ）を有するようにインデックスされる。
【００２３】
第２のステップは、ＤＵＶに付加される論理を統合することである。この統合される論理は、第１のステップで識別されたレジスタ及びメモリへのアクセスを提供する。第２のステップで統合される論理は、以下に詳細に説明されている。一般に、この統合される論理は、所定のメモリあるいはレジスタが読み出しあるいは書き込みのためにアクセスできるように、前述したユニークな識別子を受信する選択論理を有している。
【００２４】
第３のステップは、レジスタ及びメモリへのパスを形成するステップである。このステップも、以下により詳細に説明されている。
【００２５】
図１は、本発明の好ましい実施の形態のブロック図である。図１は、検証下の設計（ＤＵＶ）３０が、ＤＵＶ３０のメモリ及びレジスタへの良好なアクセスを提供するために統合される論理と共に示されている。図１は、ハードウェアアクセラレータ２０に通信チャンネル１４を介して接続され、検証下の設計（ＤＵＶ）をシミュレートし、通信チャンネル１４を介してハードウェアアクセラレータ２０に接続されるホストワークステーション１０と、効率的なデータロード動作及びデータアンロード動作のためにＤＵＶ３０に統合されるプロトコルインターフェース論理４０を示している。制御プログラム１１は、プロトコルインターフェース４０を介してＤＵＶ３０内のレジスタ及びメモリにデータをロードし及びデータをアンロードするために、ホストワークステーション１０上で作動する検証制御プログラムである。例示のハードウェアアクセラレータ２０は、クイックターン・デザインシステムズ・インコーポレイテッドから販売されている“Ｃｏｂａｌｔ（米国商標）”である。例示の制御プログラム１１は、クイックターン・デザインシステムズ・インコーポレイテッドから販売されている“ＰｏｗｅｒＳｕｉｔｅ（米国商標）”である。
【００２６】
制御プログラム１１が、データをＤＵＶ３０内のレジスタ位置あるいはメモリ位置にロードする場合には、先ず、データと共に書込コマンドを、内部バス１２を介してデータバッファ１３に送り、その後、デーアバッファ１３からハードウェアアクセラレータ２０内のデータバッファ２１への、通信チャンネル１４を介するデータ転送を開始する。プロトコルインターフェース論理４０は、データバッファ２１からの書込コマンドと書込データを受信し、データをＤＵＶ３０内の目標レジスタ位置あるいは目標メモリ位置にロードする書込みコマンドを実行する。
【００２７】
制御プログラム１１が、ＤＵＶ３０内のレジスタ位置あるいはメモリ位置からのデータをアンロードする場合には、先ず、読出コマンドを、内部バス１２を介してデータバッファ１３に送り、その後、データバッファ１３からハードウェアアクセラレータ２０内のデータバッファ２１への、通信チャンネル１４を介するデータ転送を開始する。プロトコルインターフェース論理４０は、データバッファ２１からの読出コマンドを受信し、ＤＵＶ３０内の目標レジスタ位置あるいは目標メモリ位置からのデータをデータバッファ２１内にアンロードするために読出コマンドを実行する。データバッファ２１内に蓄積されたデータは、内部バス１２を介してデータバッファ１３からのデータを受信する制御プログラム１１によって開始される転送動作によって、通信チャンネル１４を介してデータバッファ１３に転送される。
【００２８】
前述したように、プロトコルインターフェース論理４０は、ＤＵＶ３０のために統合される特別の論理である。現時点での好ましい実施の形態では、プロトコルインターフェース論理４０は、パケットＩ／Ｏブロック４１、状態制御ブロック４２、コマンドデコードブロック４３、読出／書込制御ブロック４４、メモリアドレスブロック４５及び読出データブロック４６により構成されている。
【００２９】
パケットＩ／Ｏブロック４１は、ホストワークステーション１０からのコマンド及び書込データを入力パケットレジスタ（図１には示されていない）に保持する。また、パケットＩ／Ｏブロック４１は、ＤＵＶ３０からの情報及び読出データを出力パケットレジスタ（図１には示されていない）に保持する。パケットＩ／Ｏブロック４１は、データバッファ２１からのコマンド及び書込みデータ信号２２を受信し、読出データブロック４６からの読出データ信号５７を読み取る。パケットＩ／Ｏブロック４１は、制御情報及び読出データ信号２３をデータバッファ２１に送り、コマンド及びデータ信号５０を状態制御ブロック４２、コマンドデコードブロック４３、読出／書込制御ブロック４４、メモリアドレスブロック４５及びＤＵＶ３０に送る。
【００３０】
状態制御ブロック４２は、プロトコルインターフェース論理４０の現在状態を保持し、状態遷移を行う。状態制御ブロック４２は、コマンドデコードブロック４３からのデコードされたコマンド情報信号５１及びパケットＩ／Ｏブロック４１からのコマンド信号５０を受信する。状態制御ブロック４２は、読出／書込制御ブロック４４への状態信号５２を発生する。
【００３１】
コマンドデコードブロック４３は、パケットＩ／Ｏブロック４１からのコマンドをデコードする。コマンドデコードブロック４３は、パケットＩ／Ｏブロック４１からのコマンド信号５０を受信し、状態制御ブロック４２及び読出／書込制御ブロック４４への、デコードされた情報信号５１を発生する。
【００３２】
読出／書込制御ブロック４４は、内部及び外部の読出及び書込制御信号を発生する。読出／書込制御ブロック４４は、コマンドデコードブロック４３からのデコードされたコマンド情報５１、状態制御ブロック４２からの状態情報信号５２、パケットＩ／Ｏブロック４１からの書込データ信号５０を受信する。読出／書込制御ブロック４４は、プロトコルインターフェース論理４０内部への読出及び書込制御信号５３、ＤＵＶ３０内のレジスタ及びメモリブロックへの読出及び書込制御信号５４を発生する。
【００３３】
メモリアドレスブロック４５は、メモリアクセス動作のためにメモリアドレスを保持し、アップデートする。メモリアドレスブロック４５は、パケットＩ／Ｏブロック４１からのメモリアドレス信号を受信し、ＤＵＶ３０への現在メモリアドレス信号５５を発生する。
【００３４】
読出データブロック４６は、ＤＵＶ３０内のレジスタ及びメモリからのデータ信号５６を受信し、パケットＩ／Ｏブロック４１への選択されたデータ信号５７を発生する。
【００３５】
図２Ａは、例示のＤＵＶ３０内に存在する、３つの例示のレジスタＲＥＧ０、ＲＥＧ１及びＲＥＧ２と、これらのレジスタに対する読み出し及び書き込みを許可するためにＤＵＶ３０内に統合されるアクセス論理を示している。レジスタＲＥＧ０、ＲＥＧ１及びＲＥＧ２は、前述した第１のステップにおいて識別される。この例では、レジスタＲＥＧ０、ＲＥＧ１及びＲＥＧ２は、それぞれ４８ビット、１６ビット及び３２ビットレジスタ６０、６３及び６６である。レジスタは、本発明の種々の実施の形態の柔軟性を許容する。ＤＵＶ３０内では、レジスタＲＥＧ０、ＲＥＧ１及びＲＥＧ２は、ＤＵＶ論理３１からの書込データ及び制御信号３２を受信し、ＤＵＶ論理３１への読出データ信号５６を発生する。データマルチプレクサ６１、６４及び６７、制御マルチプレクサ６２、６５及び６８は、プロトコルインターフェース論理４０が、レジスタＲＥＧ０、ＲＥＧ１及びＲＥＧ２にデータをロード及びデータをアンロードすることができるように、統合され、ＤＵＶ３０に加えられる。マルチプレクサ６１、６２、６４、６５、６７及び６８は、プロトコルインターフェース論理４０からの信号グループ５４内の信号ＲＥＧＳを選択することによって制御される。ＲＷＥ０、ＲＷＥ１及びＲＷＥ２は、プロトコルインターフェース論理４０からの信号グループ５４内のレジスタ書込制御信号であり、それぞれ制御マルチプレクサ６２、６５及び６８に接続される。ＤＩＮ〈４７：０〉は、プロトコルインターフェース論理４０からの４８ビットのデータ信号のグループ５０であり、データマルチプレクサ６１、６４及び６７に接続される。ＲＲＤ０〈４７：０〉は、ＲＥＧ０からの４８ビットのデータ信号のグループであり、ＲＲＤ１〈１５：０〉は、ＲＥＧ１からの１６ビットのデータ信号のグループであり、ＲＲＤ２〈３１：０〉は、ＲＥＧ２からの３２ビットのデータ信号のグループである。ＲＲＤ０、ＲＲＤ１及びＲＲＤ２は、信号グループ５６として、ＤＵＶ論理３１及びプロトコルインターフェース論理４０に接続される。
【００３６】
選択信号ＲＥＧＳが存在しない場合には、ＲＥＧ０、ＲＥＧ１及びＲＥＧ２は、ＤＵＶ論理３１からのデータ及び制御信号３２を受信する。選択信号ＲＥＧＳが存在する場合には、ＲＥＧ０、ＲＥＧ１及びＲＥＧ２は、プロトコルインターフェース論理４０からの書込データ信号５０及び制御信号５４を受信する。選択信号ＲＥＧＳに関係なく、読出データ信号５６は、ＤＵＶ論理３１及びプロトコルインターフェース論理４０に送られる。
【００３７】
図２Ｂは、例示のＤＵＶ３０内に存在する、ＤＵＶ３０内の２つの例示のメモリＭＥＭ０及びＭＥＭ１と、これらのメモリに対する読み出し及び書き込みを許容するためにＤＵＶ３０内に統合されるアクセス論理を示している。メモリＭＥＭ０及びＭＥＭ１は、前述した第１のステップにおいて識別される。ＭＥＭ０は、４０ビットのデータ及び８ビットのアドレスを有するメモリ７０であり、ＭＥＭ１は、１８ビットのデータ及び１４ビットのアドレスを有するメモリ７４である。これらのデータのサイズ及びアドレスの長さは、本発明の柔軟性を示すように選択され、ＤＵＶ３０内に存在可能なメモリの種類に限定されない。ＤＵＶ３０内では、ＭＥＭ０及びＭＥＭ１は、ＤＵＶ論理３３からの書込データ、メモリアドレス及び書込イネーブル信号３４を受信し、ＤＵＶ論理３３への読出データ信号５６を発生する。データマルチプレクサ７１及び７５、アドレスマルチプレクサ７２及び７６、書込イネーブルマルチプレクサ７３及び７７は、プロトコルインターフェース論理４０が、ＭＥＭ０及びＭＥＭ１にデータをロードし及びデータをアンロードするように、統合され、ＤＵＶ３０に加えられる。マルチプレクサ７１、７２、７３、７５、７６及び７７は、プロトコルインターフェース論理４１からの信号グループ５４内の選択信号ＭＥＭＳによって制御される。ＭＷＥ０及びＭＷＥ１は、プロトコルインターフェース論理４０からの信号グループ５４内のメモリ書込イネーブル信号であり、それぞれ書込イネーブルマルチプレクサ７３及び７７に接続される。ＤＩＮ〈３９：０〉は、プロトコルインターフェース論理４０からの４０ビットのデータ信号のグループ５０であり、データマルチプレクサ７１及び７５に接続される。ＭＡＤ〈１３：０〉は、プロトコルインターフェース論理４０からの１４ビットのアドレス信号のグループ５５であり、アドレスマルチプレクサ７２及び７６に接続される。ＭＲＤ０〈３９：０〉は、ＭＥＭ０からの４０ビットのデータ信号のグループであり、ＭＲＤ１〈１７：０〉は、ＭＥＭ１からの１８ビットのデータ信号のグループである。ＭＲＤ０及びＭＥＭ１は、信号グループ５６として、ＤＵＶ３０論理３３及びプロトコルインターフェース論理４０に接続される。
【００３８】
選択信号ＭＥＭＳが存在しない場合には、メモリＭＥＭ０及びＭＥＭ１は、ＤＵＶ論理３３からの書込データ、メモリアドレス及び書込イネーブル信号３４を受信する。選択信号ＭＥＭＳが存在する場合には、ＭＥＭ０及びＭＥＭ１は、プロトコルインターフェース論理４０からの書込データ信号５０、メモアドレス信号５５及び書込イネーブル信号５４を受信する。選択信号ＭＥＭＳに関わらず、読出データ信号５６は、ＤＵＶ論理３３及びプロトコルインターフェース論理４０に送られる。
【００３９】
図３は、プロトコルインターフェース論理４０内のパケットＩ／Ｏブロック４１の詳細ブロック図である。データバッファ２１内の要求パケットは、コマンド実行のために、信号２２を介して入力パケットレジスタ８０に移動する。現時点での好ましい実施の形態では、レジスタ８０内に蓄積される要求パケットは、５つの領域（ｆｉｅｌｄ）（１ビットのＴＡＧ、３ビットのＣＭＤ、１ビットのＥＮＤ、２ビットのＩＤ及び４８ビットのＤＡＴＡ領域）に分割されている。これらの領域の長さは、これらの特別な長さに限定されず、特別なシステムの必要性によって設定される。ＣＭＤ、ＥＮＤ、ＩＤ及びＤＡＴＡ領域の値は、他のブロックへの信号５０上に送られる。ＴＡＧ領域の値は、その前のサイクルのＴＡＧの値を保持する、１ビットのレジスタ８１に送られる。レジスタ８１内のＴＡＧ領域の値は、信号８３上に新しいパケットがレジスタ８０に到達したか否かを示すＮＥＷＩＮを発生するためのイクスクルーシブＯＲゲート８２において、レジスタ８１に蓄積されているその前のＴＡＧの値と照合される。ＮＥＷＩＮが「１」である場合には、レジスタ８０は、データバッファ２１からの新しいパケットを受信している。この特別の実施の形態におけるＴＡＧ領域のサイズは、図３の例示のパケットＩ／Ｏブロック４１内では１ビットであるが、２ビット以上でもよい。この場合、イクスクルーシブＯＲゲート８２は、２つの値が等しいことを照合するための適当な論理ブロックによって置き換えられなければならない。
【００４０】
応答パケットは、出力パケットレジスタ８４に蓄積され、そして、データバッファ２１への信号２３上を移動する。この特別の実施の形態では、レジスタ８４内の応答パケット８４は、３つの領域（１ビットのＴＡＧ、６ビットのＵＮＵＳＥＤ及び４８ビットのＤＡＴＡ領域）に分割される。これらの領域の長さは、これらの特別の長さに限定されず、特別なシステムの必要性によって設定される。信号５７上の値は、レジスタ８４内のＤＡＴＡ領域に蓄積される。ＵＮＵＳＥＤ領域内の値は、使用されず、常に「０」である。ＴＡＧ領域の値は、ＮＯＴゲート８５によって切り換えられる。信号８６上のＮＥＷＯＵＴは、レジスタ８４が、ＮＥＷＯＵＴが存在する時にのみ新しいデータ及び新しいＴＡＧのビットを蓄積するように、レジスタ８４を制御する。この特別の実施の形態では、ＴＡＧ領域のサイズは、例示のパケットＩ／Ｏブロック４１内では１ビットであるが、２ビット以上でもよい。この場合、ＮＯＴゲート８５は、ＴＡＧ領域の値をアップデートするための適当な論理ブロックによって置き換えられる。
【００４１】
図４は、プロトコルインターフェース論理４０内のメモリアドレスブロック４５の、現時点での好ましい実施の形態の詳細ブロック図である。レジスタ９０は、アドレスマルチプレクサ９１を介して到来する１４ビットのメモリアドレスを保持する。マルチプレクサ選択信号ＭＡＤＳ及びレジスタ制御信号ＭＡＤＥは、信号５３上に到来する。ＭＡＤＳが「０」の場合には、マルチプレクサ９１は、アドレスインクリメンター（ａｄｄｒｅｓｓ  ｉｎｃｒｅｍｅｎｔｅｒ）９２によってインクリメントされたアドレスを選択する。ＭＡＤＳが「１」の場合には、マルチプレクサ９１は、信号５０上のＤＩＮ〈１３：０〉上のメモリアドレスを選択する。現在メモリアドレスＭＡＤ〈１３：０〉は、ＤＵＶ３０への信号５５上に送られる。
【００４２】
図５は、プロトコルインターフェース論理４０内の、現時点での好ましい読出データブロック４６の詳細ブロック図を示している。３つのレジスタ読出データＲＲＤ０〈４７：０〉、ＲＲＤ１〈１５：０〉及びＲＲＤ２〈３１：０〉は、信号５３上のＲＲＤＳ〈１：０〉によって制御されるレジスタデータマルチプレクサ９３への信号５６上に送られる。ＲＲＤＳ〈１：０〉の値「０」、「１」及び「２」は、それぞれＲＲＤ０、ＲＲＤ１及びＲＲＤ２を選択する。メモリ読出データＭＲＤ０〈３９：０〉及びＭＲＤ１〈１７：０〉は、信号５３上のＭＲＤＳによって制御されるメモリデータマルチプレクサ９４への信号５６上に送られる。ＭＲＤＳの値「０」及び「１」は、それぞれＭＲＤ０及びＭＲＤ１を選択する。マルチプレクサ９３及び９４からのデータは、選択信号ＭＲＳによって制御される他のデータマルチプレクサ９５に送られる。ＭＲＳの値「０」及び「１」は、それぞれマルチプレクサ９３の出力及びマルチプレクサ９４の出力を選択する。マルチプレクサ９５の出力は、パケットＩ／Ｏブロック４１への信号５７上に送られる最終の読出データである。
【００４３】
図６は、プロトコルインターフェース論理４１によってデコードされ、実行される、現時点での好ましいプロトコルコマンドのチャート図である。図３に示されているように、入力パケットレジスタ８０に蓄積されるデータバッファ２１からの要求パケットは、５つの領域に分割される。３ビットのＣＭＤ領域は、７つのコマンドをエンコードする。ＮＯＰ（非動作）コマンドは、ＣＭＤ＝「０」あるいは「１」によって特定され、何も実行しないが、少なくとも１クロックサイクル消費する。ＷＲ（書込レジスタ）コマンドは、ＣＭＤ＝「２」によって特定され、ＤＡＴＡ領域内の書込データをレジスタＩＤあるいはＩＤ領域内のＲｉｄによって特定される目標レジスタに書き込む。ＲＲ（読出レジスタ）コマンドは、ＣＭＤ＝「３」によって特定され、レジスタＩＤあるいはＩＤ領域内のＲｉｄによって特定される目標レジスタ内のデータを読み出し、それを出力パケットレジスタ８４内のデータ領域に蓄積する。
【００４４】
ＳＷＭ（選択書込メモリ）及びＷＭ（書込メモリ）コマンドは、連続モードにおいてメモリ内にデータをロードするために用いられる。ＳＷＭコマンドは、ＣＭＤ＝「４」によって特定され、メモリＩＤあるいはＩＤ領域内のＭＩＤを図１０のメモリアＩＤレジスタ１３０に蓄積するとともに、ＤＡＴＡ領域内のスタートアドレスを図４のメモリアドレスレジスタ９０に蓄積する。ＳＷＭコマンドの実行によって、プロトコルインターフェース論理４０はメモリ書込モードに設定される。ＷＭコマンドは、ＣＭＤ＝「５」によって特定され、ＤＡＴＡ領域内の書込データを、メモリＩＤレジスタ１３０によって示されている目標メモリ（目標書込メモリアドレスは、メモリアドレスＲジスタ９０内に蓄積されたアドレスである。）に書き込む。ＷＭコマンドが最後のデータを目標メモリに書き込む場合には、ＥＮＤ領域に値「１」（それ以外では「０」）が置かれる。プロトコルインターフェース論理４０がメモリ書込モードにある場合には、ＷＭコマンドは、受信及び実行されるコマンドのみである。ＥＮＤ領域の最後のデータの指示は、プロトコルインターフェース論理４０を通常の非メモリモードに戻す。
【００４５】
ＳＲＭ（選択読出メモリ）及びＲＭ（読出メモリ）コマンドは、連続モードにあるメモリからデータをアンロードするために用いられる。ＳＲＭコマンドは、ＣＭＤ＝「６」によって特定され、メモリＩＤあるいはＩＤ領域内のＭＩＤをメモリＩＤレジスタ１３０に蓄積するとともに、ＤＡＴＡ領域内のスタートアドレスをメモリアドレスレジスタ９０に蓄積する。ＳＲＭコマンドの実行によって、プロトコルインターフェース論理４０はメモリ読出モードに設定される。ＲＭコマンドは、ＣＭＤ＝「７」によって特定され、メモリＩＤレジスタ１３０によって示されている目標メモリ（目標読出メモリアドレスは、メモリアドレスレジスタ９０内に蓄積されているアドレスである。）からデータを読み出す。目標メモリ位置から読み出されたデータは、出力パケットレジスタ８４のＤＡＴＡ領域に蓄積される。ＲＭコマンドが、目標メモリから最後のデータを読み出す場合には、ＥＮＤ領域に値「１」（それ以外は「０」）が置かれる。プロトコルインターフェース論理４０がメモリ読出モードに置かれる場合には、ＲＭコマンドは、受信及び実行されるコマンドのみである。ＥＮＤ領域の最終のデータの指示は、プロトコルインターフェース論理４０を通常の非メモリモードに戻す。
【００４６】
ＷＭあるいはＲＭコマンドの実行によって、図４に示されているように、メモリアドレスが「１」だけインクリメントされる。第１のメモリアドレスは、ＳＷＭコマンドあるいはＳＲＭコマンドによって蓄積される。ＳＷＭコマンドの後の第１のＷＭコマンドは、メモリアドレスレジスタ９０に蓄積されているメモリアドレスによって示されているメモリ位置を書き込み、第２のＷＭコマンドは、次のメモリ位置を書き込む。同様に、ＳＲＭコマンドの後の第１のＲＭコマンドは、メモリアドレスレジスタ９０に蓄積されているメモリアドレスによって示されているメモリ位置を読み出し、第２のＲＭは、次のメモリ位置を読み出す。
【００４７】
図７は、プロトコルインターフェース論理４０内の、現時点での好ましいコマンドデコードブロック４３の詳細ブロック図を示している。入力パケットレジスタ８０のＣＭＤ領域からの信号５０上のＣＭＤ〈２：０〉は、６つの信号を発生するデコーダ１００に送られる。６つの信号は、ＡＮＤゲート１０１においてＷＲコマンド信号ＣＭＤＷＲを発生するために、ＡＮＤゲート１０２においてＲＲコマンド信号ＣＭＤＲＲを発生するために、ＡＮＤゲート１０３においてＳＭＷコマンド信号ＣＭＤＳＭＷを発生するために、ＡＮＤゲート１０４においてＷＭコマンド信号ＣＭＤＷＭを発生するために、ＡＮＤゲート１０５においてＳＲＭコマンド信号ＣＭＤＳＲＭを発生するために、ＡＮＤゲート１０６においてＲＭコマンド信号ＣＭＤＲＭを発生するためにＮＥＷＩＮと加算される。全てのコマンド信号は、他のブロックへの信号５１上の信号上に送られる。
【００４８】
図８は、プロトコルインターフェース論理４０の状態及び状態遷移図である。それぞれ、１１０、１１１及び１１２によって示されている３つの状態、ＮＭ（非メモリ）、ＭＷ（メモリ書込）及びＭＲ（メモリ読出）が存在する。シミュレーションがハードウェアアクセラレータ２０上で開始される場合、プロトコルインターフェース論理４０は、ＮＭ状態にある。ＮＯＰ、ＷＲ及びＲＲコマンドの実行は、状態を変化させない。ＮＭ状態でのＳＷＭコマンドの実行は、状態をＮＭからＭＷに変化させる。ＥＮＤ＝「０」を有するＷＭコマンド及びＮＯＰコマンドの実行は、状態を変化させない。ＥＮＤ＝「１」を有するＷＭコマンドの実行は、状態をＭＷからＮＷに変化させる。ＮＭ状態でのＳＲＭコマンドの実行は、状態をＮＭからＭＲに変化させる。ＥＮＤ＝「０」を有するＲＭコマンド及びＮＯＰコマンドの実行は、状態を変化させない。ＥＮＤ＝「１」を有するＲＭコマンドの実行は、状態をＭＲからＮＭに変化させる。
【００４９】
図９は、プロトコルインターフェース論理４０内の、現時点での好ましい状態制御ブロック４２の詳細ブロック図である。現在状態ＳＴＡＴＥは、状態レジスタ１２０に蓄積され、状態レジスタ１２０に戻されて蓄積される次の状態を発生する状態遷移制御１２１に送られる。状態遷移制御１２１への入力信号は、信号５１上のＣＭＤＳＷＭ及びＣＭＤＳＲＭ、ＡＮＤゲート１２２において信号５１上のＣＭＤＲＭと信号５０上のＥＮＤを加算することによって発生される信号、ＡＮＤゲート１２３において信号５１上のＣＭＤＷＭと信号５０上のＥＮＤを加算することによって発生される信号を含んでいる。状態遷移制御１２１は、図８に示されている状態遷移を実現する。現在状態ＳＴＡＴＥは、信号５２上に３つの状態信号ＳＴＡＴＥＮＭ、ＳＴＡＴＥＭＷ及びＳＴＡＴＥＭＲを発生するデコーダ１２４でデコードされる。
【００５０】
図１０は、プロトコルインターフェース論理４０内の、現時点での好ましい読出／書込制御ブロック４４の詳細ブロック図である。読出／書込制御ブロック４４は、入力信号５０、５２及び５１からの出力制御信号５４、５３及び８６を発生する。入力パケットレジスタ８０のＩＤ領域からの信号５０上のＩＤ＜１：０＞は、制御論理１３１及びメモリＩＤレジスタ１３０に送られる。また、メモリＩＤレジスタ１３０からの出力ＭＩＤは、制御論理１３１に送られる。制御論理１３１は、［（ＣＭＤＷＲ＋ＣＭＤＲＲ）＊ＳＴＡＴＥＮＭ］によってレジスタ読出データ選択信号ＲＥＧＳを、［ＣＭＤＷＲ＊ＳＴＡＴＥＮＭ＊（ＩＤ＝０）］によってレジスタ書込イネーブル０信号ＲＷＥ０を、［ＣＭＤＷＲ＊ＳＴＡＴＥＮＭ＊（ＩＤ＝１）］によってレジスタ書込イネーブル１信号ＲＷＥ１を、［ＣＭＤＷＲ＊ＳＴＡＴＥＮＭ＊（ＩＤ＝２）］によってレジスタ書込イネーブル２信号を、［ＳＴＡＴＥＭＷ＋ＡＴＡＴＥＭＲ］によってメモリ読出データ選択信号ＭＥＭＳを、［ＣＭＤＷＭ＊ＳＴＡＴＥＷＭ＊（ＭＩＤ＝０）］によってメモリ書込イネーブル０信号ＭＷＥ０を、［ＣＭＤＷＭ＊ＳＴＡＴＥＷＭ＊（ＭＩＤ＝１）］によってメモリ書込イネーブル１信号ＭＷＥ１を、ＭＥＭＳによってメモリ／レジスタ選択信号ＭＲＳを、［（ＣＭＤＳＷＭ＋ＣＭＤＳＲＭ）＊ＳＴＡＴＥＮＭ］によってメモリアドレス選択信号ＭＡＤＳを、［ＭＥＭＳ＋ＭＡＤＳ］によってメモリアドレスイネーブル信号ＭＡＤＥを、［ＣＭＤＲＲ＊ＳＴＡＴＥＮＭ＋ＣＭＤＲＭ＊ＳＴＡＴＥＭＲ］によってＮＯＵＴを発生する。ここで、“＋”は論理ＯＲ演算子であり、“＊”は論理ＡＮＤ演算子であり、“＝”は等号演算子である。制御論理１３１からのＲＥＧＳ、ＲＷＥ０、ＲＷＥ１、ＲＷＥ２、ＭＥＭＳ、ＭＷＥ０及びＭＷＥ１は、外部への信号５４上に送られる。制御論理１３１からのＭＲＳ、ＭＡＤＳ及びＭＡＤＥは、外部への信号５３上に送られる。制御論理１３１からのＮＯＵＴは、１ビットのレジスタ１３２に蓄積され、レジスタ１３２からの出力は、外部への信号８６上に送られるＮＥＷＯＵＴである。
【００５１】
図１１Ａは、プロトコルインターフェース論理４０内のレジスタ書込コマンドの実行の例示のタイムチャート図である。列１４０（サイクル）、１４１（ＮＥＷＩＮ）、１４２（ＣＭＤ）、１４３（ＤＩＮ）及び１４４（ＲＥＧ）は、それぞれクロックサイクル、ＮＥＷＩＮ信号の値、コマンド、書込データ、目標レジスタの値を示している。４つのＷＲコマンドは、それぞれサイクルＮ、Ｎ＋１、Ｎ＋３及びＮ＋４において、書込データＡ、Ｂ、Ｃ及びＤと共に到達する。書込データＡ、Ｂ、Ｃ及びＤは、それぞれサイクルＮ、Ｎ＋１、Ｎ＋３及びＮ＋４において目標レジスタに蓄積される。この例示のタイムチャート図では、ＷＲコマンドの実行に１サイクル要すると仮定している。ＷＲコマンドの実行のために２あるいは３サイクル以上要する場合には、次のコマンドの実行をＷＲコマンドの実行が完了するまで阻止するために、簡単な制御論理が必要である。
【００５２】
図１１Ｂは、プロトコルインターフェース論理４０内のレジスタ読出コマンドの実行の例示のタイムチャート図である。列１４５（ＰＯＵＴ）及び１４６（ＴＲＡＮＳＦＥＲ）は、それぞれ出力パケットレジスタ８４に蓄積される読出データ及びハードウェアアクセラレータ２０からホストワークステーション１０に転送されるデータを示している。サイクルＮにおいて到達するＲＲコマンドは、目標レジスタからのデータＡを読み出し、サイクルＮ＋１において、それを出力パケットレジスタ８４のＤＡＴＡ領域に蓄積する。サイクルＮ＋２におけるデータ転送は、出力パケットレジスタ８４内のレジスタデータと共に応答パケットを、データバッファ２１を介してホストワークステーション１０に送る。サイクルＮ＋３において到達するＲＲコマンドは、目標レジスタからのデータＢを読み出し、サイクルＮ＋４において、それを出力パケットレジスタ８４のＤＡＴＡ領域に蓄積する。サイクルＮ＋５におけるデータ転送は、出力パケットレジスタ８４内のレジスタデータと共に応答パケットを、データバッファ２１を介してホストワークステーション１０に送る。この例示のタイムチャート図では、ＲＲコマンドの実行に１サイクル要すると仮定している。ＲＲコマンドの実行に２あるいは３サイクル以上を要する場合には、次のコマンドの実行をＲＲコマンドの実行が完了するまで阻止するために、簡単な制御論理が必要である。
【００５３】
出力パケットレジスタ内に蓄積された応答パケットのデータ転送は、ホストワークステション１０上で作動する検証制御プログラム１１によって開始される。この例示のタイムチャート図では、簡略化のために、検証制御プログラム１１は、ＲＲコマンドの送信後、読出データを得るためにデータ転送を開始すべき時期を知っているものと仮定する。検証制御プログラムが、データ転送を開始する時期を知る方法を有していない場合には、パケットが新しい読出データを含んでいることを示す、その前のＴＡＧ領域の値と異なるＴＡＧ領域の値を有する応答パケットを受信するまで、データ転送動作を繰り返す必要がある。プロトコルインアーフェース論理が、ＲＲコマンドを実行してから１サイクル後に出力パケットレジスタ８４内にレジスタデータを準備することができることを、検証制御プログラムムが予め知っているため、ＲＲコマンドの後にＮＯＰコマンドを送ることができ、そして、検証制御プログラム１１が、応答パケット内のレジスタデータを受信することができるように、データ転送を開始することができる。あるいは、検証制御プログラム１１は、少なくとも１クロックサイクル消費するＮＯＰコマンドと実質的に等価である、アップデートされたＴＡＧ領域の値を有していないコマンドを送り、その後、データ転送を開始することができる。
【００５４】
図１１Ｃは、プロトコルインターフェース論理４０内の連続モードメモリ書込動作の例示のタイムチャート図である。列１４７（ＭＡＤ）及び１４８（ＭＥＭ）は、それぞれ目標メモリのメモリアドレス及びデータを示している。サイクルＮにおいて到達するＳＷＭコマンドは、サイクルＮ＋１において、第１の書込メモリアドレス１０をメモリアドレスレジスタ９０に蓄積する。プロトコルインターフェース論理４０は、サイクルＮ＋１において、メモリ書込モードで動作する。第１のＷＭコマンドは、サイクルＮ＋１において、書込データＡと共に到達する。書込データＡは、サイクルＮ＋１において、目標メモリのメモリ位置「１０」に蓄積される。メモリアドレスは、サイクルＮ＋１において「１」だけインクリメントされ、そして、サイクルＮ＋２において、アップデートされたメモリアドレス「１１」がメモリアドレスレジスタ９０に蓄積される。サイクルＮ＋２において書込データＢと共に到達する第２のＷＭコマンドは、サイクルＮ＋２において、目標メモリのメモリ位置「１１」にデータＢを書き込む。メモリアドレスは、「１」だけインクリメントされ、サイクルＮ＋３において、アップデートされたメモリアドレス「１２」がメモリアドレスレジスタ９０に蓄積される。サイクルＮ＋４において書込データＣと共に到達する第３のＭＷコマンドは、サイクルＮ＋４において、目標メモリのメモリ位置「１２」にデータＣを書き込む。サイクルＮ＋４において、メモリアドレスが「１」だけインクリメントされ、サイクルＮ＋５において、アップデートされたメモリアドレス「１３」が、メモリアドレスレジスタ９０に蓄積される。この例示のタイムチャート図では、ＳＷＭコマンドの実行に１サイクル要し、次のサイクルにおいて、メモリアドレスレジスタ９０内にメモリアドレスを用意するものと仮定している。ＳＷＭコマンドの実行に２あるいは３サイクル以上要する場合には、次のコマンドの実行をＳＷＭコマンドの実行が完了するまで阻止するために、簡単な制御論理が必要である。ＷＭコマンドについても同様である。
【００５５】
図１１Ｄは、プロトコルインターフェース論理４０ン内の連続モードメモリ読出動作の例示のタイムチャート図である。サイクルＮにおいて到達するＳＲＭコマンドは、サイクルＮ＋１において、メモリアドレスレジスタ９０に対する第１の読出メモリアドレス「１０」を蓄積する。プロトコルインターフェース論理４０は、サイクルＮ＋１において、メモリ読出モードで動作する。第１のＲＭコマンドは、サイクルＮ＋１において到達し、目標メモリのメモリ位置１０からのデータＡを読み出し、サイクルＮ＋１において、それを出力パケットレジスタ８４のＤＡＴＡ領域に蓄積する。メモリアドレスは、サイクルＮ＋１において、「１」だけインクリメントされ、サイクルＮ＋２において、アップデートされたメモリアドレス「１１」が蓄積される。サイクルＮ＋３におけるデータ転送は、出力パケットレジスタ８４内のメモリデータと共に応答パケットを、データバッファ２１を介してホストワークステーション１０に送る。同様に、サイクルＮ＋４において到達する第２のＲＭコマンドは、目標メモリのメモリ位置「１１」からデータＢを読み出し、サイクルＮ＋５において、それを出力パケットレジスタ８４のＤＡＴＡ領域に蓄積する。メモリアドレスは、サイクルＮ＋４において「１」だけインクリメントされ、サイクルＮ＋５において、アップデートされたメモリアドレス「１２」が蓄積される。サイクルＮ＋６におけるデータ転送は、出力パケットレジスタ８４内のメモリデータと共に応答パケットを、デーアバッファ２１を介してホストワークステーション１０に送る。この例示のタイムチャート図では、ＳＲＭコマンドの実行に１サイクル要し、次のサイクルにおいて、メモリアドレスレジスタ９０内にメモリアドレスを用意すると仮定している。ＳＲＭコマンドの実行に２あるいは３サイクル以上を要する場合には、次のコマンドの実行をＳＲＭコマンドの実行が完了するまで阻止するために、簡単な制御論理が必要である。ＲＭコマンドについても同様である。再び、この例示のタイムチャート図では、簡略化のために、ＲＭコマンドを送った後に各メモリデータを得るためにデータ転送を開始させる時期を、検証制御プログラム１１が知っているものと仮定している。検証制御プログラム１１が、応答パケット内の有効なメモリデータを得るためにデータ転送を開始する時期を知る方法を有していない場合には、ＲＲコマンドに対して述べたオプションが、ＲＭコマンドに対しても適用可能である。
【００５６】
図１２は、プロトコルインターフェース論理を発生するために用いられるコンパイル時間ステップ（ｃｏｍｐｉｌｅ−ｔｉｍｅ  ｓｔｅｐ）を示すフローチャート図である。処理は、１５０で開始する。第１のステップ１５１では、目標設計のネットリスト（ｎｅｔｌｉｓｔ）を生成するために、１あるいは複数のＨＤＬあるいはハードウェア表記言語ファイルに書かれている目標設計をコンパイルする。第２のステップ１５２では、ステップ１５１で生成されたネットリスト内のレジスタ及びメモリのサイズを検査し、レジスタ及びメモリのサイズに基づいてプロトコル領域のサイズを計算する。第３のステップ１５３では、目標設計のためのプロトコルインターフェース論理を統合し、それをネットリストに加える。処理は、１５４で終了する。
【００５７】
図１３は、目標設計のネットリストからプロトコル領域のサイズを計算するための、図１２のステップ１５２の詳細フローチャート図である。処理は、１６０で開始する。ステップ１６１では、変数“Ｎｒ”として示されている、ネットリスト内のレジスタの数を発見するための“レジスタ数カウント（ｃｏｕｎｔＮｕｍＯｆＲｅｇｓ）” 関数（ｆｕｎｃｔｉｏｎ）を呼び出し、各レジスタにユニークな識別子を割り当てる。ステップ１６２では、変数“Ｎｍ”として示されている、ネットリスト内のメモリの数を発見するための“メモリ数カウント（ｃｏｕｎｔＮｕｍＯｆＭｅｍｓ）”関数を呼び出し、各メモリにユニークな識別子を割り当てる。ステップ１６３では、ＮｒとＮｍの値を比較するための“最大値（ｍａｘ）”関数を呼び出し、大きい方の値を変数Ｎｓに割り当てる。ステップ１６４では、Ｎｓの最大値を表すために必要なビットの数を計算するために、Ｎｓの値と共に呼び出される“ｌｏｇ２”関数によって結果を戻す“シール（ｃｅｉｌ）”関数を呼び出し、その結果を変数Ｎｓｌに割り当てる。ステップ１６５では、ネットリスト内の最も広いレジスタデータのビットの数を発見するための“最大巾レジスタデータ判別（ｆｉｎｄＷｉｄｅｓｔＲｅｇＤａｔａ）”関数を呼び出し、それを変数“Ｒｄ”に割り当てる。ステップ１６６では、ネットリスト内の最も広いメモリデータのビットの数を発見するための“最大巾メモリデータ判別（ｆｉｎｄＷｉｄｅｓｔＭｅｍＤａｔａ）”関数を呼び出し、それを変数“Ｍｄ”に割り当てる。ステップ１６７では、ネットリスト内の最も広いメモリアドレスのビットの数を発見するための“最大巾メモリアドレス判別（ｆｉｎｄＷｉｄｅｓｔＭｅｍＡｄｄｒｅｓｓ）”関数を呼び出し、それを変数“Ｍａ”に割り当てる。ステップ１６８では、Ｒｄ、Ｍｄ及びＭａの値を比較するための“最大値（ｍａｘ）”関数を呼び出し、最も大きい値を変数“Ｎｄ”に割り当てる。ステップ１６９では、ＴＡＧ領域のサイズに対する可変ｓｉｚｅＴａｇに「１」を割り当て、ＣＭＤ領域のサイズに対する可変ｓｉｚｅＣｍｄに「３」を割り当て、ＥＮＤ領域のサイズに対する可変ｓｉｚｅＥｎｄに「１」を割り当て、ＩＤ領域のサイズに対するｓｉｚｅＩｄにＮｓｌの値を割り当て、ＤＡＴＡ領域のサイズに対する可変ｓｉｚｅＤａｔａにＮｄの値を割り当てる。処理は、１７０で終了する。
【００５８】
図２Ａ及び図２Ｂに示されている例示のＤＵＶ３０に適用する場合には、処理は、図３に示されているように、Ｎｒ＝３、Ｎｍ＝２、Ｎｓ＝３、Ｎｓｌ＝２、Ｒｄ＝４８、Ｍｄ＝４０、Ｍａ＝１４及びＮｄ＝４８を計算し、ＩＤ及びＤＡＴＡ領域のサイズをそれぞれ２及び４８ビットに設定する。
【００５９】
図１４は、プロトコルインターフェース論理の構成要素を構成する、図１２のステップ１５３の詳細フローチャート図である。処理は、１７１で開始する。ステップ１７２では、図３に示されているようなパケットＩ／Ｏブロック４１を生成するために、“Ｎｓｌ”及び“Ｎｄ”の値と共に“パケットＩ／Ｏブロック生成（ｃｒｅａｔｅＰａｃｋｅｔＩｏＢｌｏｃｋ）”関数を呼び出す。Ｎｓｌ及びＮｄの値は、入力及び出力パケットレジスタ８０及び８４のサイズ、ＩＤ及びＤＡＴＡ領域信号５０及び５７の数を決定する。ステップ１７３では、図７に示すようなコマンドデコードブロック４３を生成する“コマンドデコードブロック生成（ｃｒｅａｔｅＣｏｍｍａｎｄＤｅｄｏｄｅＢｌｏｃｋ）”関数を呼び出す。このブロック４３は、ＤＵＶに依存しない。ステップ１７４では、図８及び図９に示されているような状態制御ブロック４２を生成する“状態制御ブロック生成（ｃｒｅａｔｅＳｔａｔｅＣｏｎｔｒｏｌＢｌｏｃｋ）”関数を呼び出す。このブロック４２も、ＤＵＶに依存しない。ステップ１７５では、図４に示されているようなメモリアドレスブロック４５を生成する“メモリアドレスブロック生成（ｃｒｅａｔｅＭｅｍｏｒｙＡｄｄｒｅｓｓＢｌｏｃｋ）”関数を呼び出す。Ｍａの値は、メモリアドレスレジスタ９０のサイズを決定する。ステップ１７６では、図５に示されているような読出データブロック４６を生成するために、Ｎｄの値と共に“読出データブロック生成（ｃｒｅａｔｅＲｅａｄＤａｔａＢｌｏｃｋ）”関数を呼び出す。Ｎｄの値は、レジスタ及びメモリからの読出データ５７の最大サイズを決定する。ステップ１７７では、図１０に示されているような読出／書込制御ブロック４４を生成するために、Ｎｓｌ、Ｎｒ及びＮｍと共に“読出／書込制御ブロック生成（ｃｒｅａｔｅＲｅａｄＷｒｉｔｅＣｏｎｔｒｏｌＢｌｏｃｋ）”関数を呼び出す。Ｎｓｌの値は、ＩＤ信号５０の数及びメモリＩＤレジスタ１３０のサイズを決定する。Ｎｒ及びＮｍの値は、それぞれレジスタ書込イネーブル信号の数及びメモリ書込イネーブル信号の数を決定する。ステップ１７８では、ＤＵＶ内に少なくとも１つのレジスタが存在する場合には、ＤＵＶ内のレジスタにデータマルチプレクサ及び制御マルチプレクサ（図２Ａのマルチプレクサ６１、６２、６３、６４、６５、６６、６７を参照）を加えるために、“ＤＵＶ内レジスタブロック修正（ｍｏｄｉｆｙＲｅｇＢｌｏｃｋＩｎＤｕｖ）”関数を呼び出す。ＤＵＶに加えられるマルチプレクサは、図２Ａに示されているように、プロトコルインターフェース論理が、ＤＵＶ内のいずれかのレジスタに直接にアクセスすることを許可する。ステップ１７９では、ＤＵＶ内に少なくとも１つのメモリが存在する場合には、ＤＵＶ内のメモリにデータマルチプレクサ及び制御マルチプレクサ（図２Ｂのマルチプレクサ７１、７２、７３、７５、７６、７７を参照）を加えるために、“ＤＵＶ内メモリブロック修正（ｍｏｄｉｆｙＭｅｍＢｌｏｃｋＩｎＤｕｖ）”関数を呼び出す。加えられたマルチプレクサは、図２Ｂに示されているように、プロトコルインターフェース論理が、ＤＵＶ内のいずれかのメモリに直接にアクセスすることを許可する。
【００６０】
図１５は、ＤＵＶ及びＤＵＶのために統合されるプロトコルインターフェース論理のシミュレーションのための動作の典型的な動作シーケンスのフローチャート図である。処理は、１９０で開始する。ステップ１９１では、コンパイルされたＤＵＶが、ハードウェアアクセラレータ２０内にロードされる。ステップ１９２では、ＤＵＶとの通信チャンネル１４がセットアップされる。ステップ１９３では、初期データが、ＤＵＶ内のレジスタ及びメモリにロードされる。ステップ１９４では、ＤＵＶが、サイクル数に対してシミュレートされる。ステップ１９５では、シミュレーション結果が、レジスタ及びメモリからアンロードされる。ステップ１９６では、シミュレーション結果が、期待値と照合される。処理は、ステップ１９７で終了する。ステップ１９３及び１９５では、以下に示されているプロトコルインターフェース論理４０が、ＤＵＶ内のレジスタ及びメモリにアクセスするために用いられる。ステップ１９４では、ＤＵＶ内のいくつかのレジスタ及びメモリが、シミュレーション中にアクセスされる、いくつかの場合が存在する。
【００６１】
図１６−１８は、省略されるいくつかのローカル可変宣言（ｌｏｃａｌ  ｖａｒｉａｂｌｅ  ｄｅｃｌａｒａｔｉｏｎ）を有するＣプログラム言語で書かれているコードリストを示している。Ｃプログラム言語は、ソフトウェアを開発するために幅広く用いられている周知のプログラム言語である。例えば、１９８８年にＰｒｅｎｔｉｃｅ  Ｈａｌｌによって発行された、Ｂ．Ｗ．Ｋｅｒｎｉｇｈａｎ及びＤ．Ｍ．Ｒｉｔｃｈｉｅらの“Ｃプログラム言語（第２版）”に記載されている。コードリストの以下の説明では、より読み易くするためにのみ用いられている空白の行は言及されていない。
【００６２】
図１６は、プロトコルインターフェース論理との動作を説明するために用いられる主要な定数、変数及び関数の定義及び宣言のコードリストである。１−７行は、それぞれ７つのプロトコルコマンドＮＯＰ（非動作）、ＷＲ（書込レジスタ）、ＲＲ（読出レジスタ）、ＳＷＭ（選択書込メモリ）、ＷＭ（書込メモリ）、ＳＲＭ（選択読出メモリ）及びＲＭ（読出メモリ）に対する７つの定数“ＣＭＤ＿ＮＯＰ”、“ＣＭＤ＿ＷＲ”、“ＣＭＤ＿ＲＲ”、“ＣＭＤ＿ＳＷＭ”、“ＣＭＤ＿ＷＭ”、“ＣＭＤ＿ＳＲＭ”及び“ＣＭＤ＿ＲＭ”を定義している。１０行は、“ｕｉｎｔ”を“サインされていないｉｎｔ（ｕｎｓｉｇｎｅｄ  ｉｎｔ）”として定義している。１１行及び１２行は、それぞれ応答パケットのＩＤ及びＤＡＴＡ領域のサイズを保持する“ｉｎｔ”変数“ｓｉｚｅＩｄ”及び“ｓｉｚｅＤａｔａ”を宣言している。１４行及び１５行は、それぞれ出力及び入力パケットに対するＴＡＧの値を保持するための、初期値「０」を有する“ｕｉｎｔ”変数“ｔａｇＯｕｔ”及び“ｔａｇＩｎ”を宣言している。１７行及び１８行は、それぞれ要求及び応答パケットに対する指示（ｐｏｉｎｔｅｒ）を保持するための“ｕｉｎｔ”変数“ｐａｃｋｅｔＯｕｔ”及び“ｐａｃｋｅｔＩｎ”を宣言している。
【００６３】
２０〜２５行は、６つの外部の有用な関数を宣言している。２０行は、データビットを目標パケット内に置くための４つの独立変数（ａｒｇｕｍｅｎｔ）を有する値を戻さない“ｐｕｔ＿ｂｉｔｓ”関数、すなわち、ボイド関数（ｖｏｉｄ）“ｐｕｔ＿ｂｉｔｓ（ｕｉｎｔ＊ｐａｃｋｅｔ，ｉｎｔ  ｐｏｓ，ｉｎｔ  ｓｉｚｅ，ｕｉｎｔ  ｄａｔａ）”を宣言している。ここで、“ｐａｃｋｅｔ”は、目標パケットに対する指示（ｐｏｉｎｔｅｒ）であり、“ｐｏｓ”は、目標パケット内のデータの第１ビットの位置であり、“ｓｉｚｅ”は、コピーするデータビットの数であり、“ｄａｔａ”は、コピーするデータビットを保持する。２１行は、目標パケットからデータビットを得るための４つの独立変数を有する値を戻さない“ｇｅｔ＿ｂｉｔｓ”関数、すなわち、ボイド関数“ｇｅｔ＿ｂｉｔｓ（ｕｉｎｔ＊ｐａｃｋｅｔ，ｉｎｔ  ｐｏｓ，ｉｎｔ  ｓｉｚｅ，ｕｉｎｔ＊ｄａｔａ）”を宣言している。ここで、“ｐａｃｋｅｔ”は、目標パケットに対する指示であり、“ｐｏｓ”は、目標パケット内のデータビットの第１のビット位置であり、“ｓｉｚｅ”は、コピーするデータビットの数であり、“ｄａｔａ”は、目標パケットからのデータビットを保持する。２２行は、パケットをホストワークステーション内のデータバッファにコピーするための２つの独立変数を有する値を戻さない“ｃｏｐｙ＿ｔｏ＿ｄｂｕｆｆ”関数、すなわち、ボイド関数“ｃｏｐｙ＿ｔｏ＿ｄｂｕｆｆ（ｉｎｔ  ｓｉｚｅ，ｕｉｎｔ＊ｐａｃｋｅｔ）”を宣言している。ここで、“ｓｉｚｅ”は、コピーするパケット内のビットの総数であり、“ｐａｃｋｅｔ”は、パケットビットを保持する位置に対する指示である。２３行は、ホストワークステーション内のデータバッファからのパケットをコピーするための２つの独立変数を有する値を戻さない“ｃｏｐｙ＿ｆｒｏｍ＿ｄｂｕｆｆ”関数、すなわち、ボイド関数“ｃｏｐｙ＿ｆｒｏｍ＿ｄｂｕｆｆ（ｉｎｔ  ｓｉｚｅ，ｕｉｎｔ＊ｐａｃｋｅｔ）”を宣言している。ここで、“ｓｉｚｅ”は、コピーするパケット内のビットの総数であり、“ｐａｃｋｅｔ”は、コピーされるパケットデータを保持する位置に対する指示である。２４行は、ホストワークステーション内のデータバッファ内のパケットをハードウェアアクセラレータに転送するための１つの独立変数を有する値を戻さない“ｔｒａｎｓｆｅｒ＿ｔｏ＿ｈａｃｃｅｌ”関数、すなわち、ボイド関数“ｔｒａｎｓｆｅｒ＿ｔｏ＿ｈａｃｃｅｌ（ｉｎｔ  ｓｉｚｅ）”を宣言している。ここで、“ｓｉｚｅ”は、転送するパケット内のビットの総数である。２５行は、ハードウェアアクセラレータからのパケットをホストワークステーション内のデータバッファに転送するための１つの独立変数を有する値を戻さない“ｔｒａｎｓｆｅｒ＿ｆｒｏｍ＿ｈａｃｃｅｌ”関数、すなわち、ボイド関数“ｔｒａｎｓｆｅｒ＿ｆｒｏｍ＿ｈａｃｃｅｌ（ｉｎｔ  ｓｉｚｅ）”を宣言している。ここで、“ｓｉｚｅ”は、転送するパケット内のビットの総数である。
【００６４】
簡略化のために、データビットの最大数が３２以下であると仮定している。データビットの最大数が３２より大きいと、“ｐｕｔ＿ｂｉｔｓ”関数の第４の独立変数データは、データビットを保持するｕｉｎｔアレイに対する指示となる。同様に、“ｇｅｔ＿ｂｉｔｓ”関数の第４の独立変数データは、データビットを保持するｕｉｎｔアレイに対する指示となる。以下のコードフラグメント（ｃｏｄｅ  ｆｒａｇｍｅｎｔ）では、簡略化のために、データビットの最大数が３２以下であると仮定している。データビットの最大数が３２より大きい場合には、コードに対して何らかの変更を行う必要があるが、当業者に困難な作業ではない。
【００６５】
図１７は、プロトコルインターフェース論理に要求パケットを送信し、プロトコルインターフェース論理からの応答パケットを受信する２つの関数のコードリストである。３０行−４１行は、要求パケットをハードウェアアクセラレータに送信するための５つの独立変数を有する値を戻さない“ｓｅｎｄＰａｃｋｅｔ”関数、すなわち、ボイド関数“ｓｅｎｄＰａｃｋｅｔ（ｕｉｎｔ  ｃｍｄ，ｕｉｎｔ  ｅｎｄ，ｕｉｎｔ  ｉｄ，ｕｉｎｔ  ｄｓ，ｕｉｎｔ  ｄａｔａ）”を宣言する。ここで、“ｃｍｄ”は、図１６の１行−７行に定義されている７つのコマンド定数の１つである、ＣＭＤ領域の値であり、“ｅｎｄ”は、パケットが最後のメモリアクセスコマンドであるか否かを示すＥＮＤ領域のビットであり、“ｉｄ”は、目標レジスタ／メモリＩＤを示すＩＤ領域の値であり、“ｄｓ”は、送信するデータビットの数であり、“ｄａｔａ”は、送信するデータビットを保持する。３２行は、５（ＴＡＧ、ＣＭＤ及びＥＮＤ領域に対するビットの総数）、“ｓｉｚｅＩｄ”の値及び“ｄｓ”の値を加算することによって、要求パケットのビットの総数を計算し、それを変数“ｐｓ”に割り当てる。３３行は、“ｔａｇＯｕｔ”の１つのビットの値を逆にし、それを要求パケットに対する“ｔａｇＯｕｔ”に蓄積する。３４行は、“ｔａｇＯｕｔ”の値を、“ｐａｃｋｅｔＯｕｔ”によって指示されている要求パケットのＴＡＧ領域にコピーする“ｐｕｔ＿ｂｉｔｓ（ｐａｃｋｅｔＯｕｔ，０，１，ｔａｇＯｕｔ）”を呼び出す。第３５行は、“ｃｍｄ”の値を“ｐａｃｋｅｔＯｕｔ”によって指示されている要求パケットのＣＭＤ領域にコピーする“ｐｕｔ＿ｂｉｔｓ（ｐａｃｋｅｔＯｕｔ，１，３，ｃｍｄ）”を呼び出す。３６行は、“ｅｎｄ”の値を“ｐａｃｋｅｔＯｕｔ”によって指示されている要求パケットのＥＮＤ領域にコピーする“ｐｕｔ＿ｂｉｔｓ（ｐａｃｋｅｔＯｕｔ，４，１，ｅｎｄ）”を呼び出す。３７行は、“ｉｄ”の値を“ｐａｃｋｅｔＯｕｔ”によって指示されている要求パケットのＩＤ領域にコピーする“ｐｕｔ＿ｂｉｔｓ（ｐａｃｋｅｔＯｕｔ，５，ｓｉｚｅＩｄ，ｉｄ）”を呼び出す。３８行は、“ｄａｔａ”内のデータビットを“ｐａｃｋｅｔＯｕｔ”によって指示されている要求パケットのＤＡＴＡ領域にコピーするための“ｐｕｔ＿ｂｉｔｓ（ｐａｃｋｅｔＯｕｔ，５＋ｓｉｚｅＩｄ，ｄｓ，ｄａｔａ）”を呼び出す。３９行は、“ｐａｃｋｅｔＯｕｔ”によって指示されている要求パケットをホストワークステーション内のデータバッファにコピーする“ｃｏｐｙ＿ｔｏ＿ｄｂｕｆｆ（ｐｓ，ｐａｃｋｅｔＯｕｔ）”を呼び出す。４０行は、ホストワークステーション内のデータバッファからの要求パケットをハードウェアアクセラレータに転送するための“ｔｒａｎｓｆｅｒ＿ｔｏ＿ｈａｃｃｅｌ（ｐｓ）”を呼び出す。
【００６６】
４３行−５４行は、ハードウェアアクセラレータからのデータを有する応答パケットを受信するための２つの独立変数を有する値を戻さない“ｒｅｃｅｉｖｅＰａｃｋｅｔ”関数、すなわち、ボイド関数“ｒｅｃｅｉｖｅＰａｋｃｅｔ（ｉｎｔ  ｄｓ，ｕｉｎｔ＊ｄａｔａ）”を宣言する。ここで、“ｄｓ”は、応答パケット内のビットの総数であり、“ｄａｔａ”は、応答パケットのデータビットを保持する位置に対する指示である。４５行は、５、“ｓｉｚｅＩｄ”の値及び“ｄｓ”の値を加算することによって応答パケットのビットの総数を計算し、それを変数“ｐｓ”に割り当てる。４６行−５１行は、ハードウェアアクセラレータからの有効応答パケットを読み出す“ｗｈｉｌｅ”ループをコードする。４７行は、ハードウェアアクセラレータからのパケットをホストワークステーション内のデータバッファに転送する“ｔｒａｎｓｆｅｒ＿ｆｒｏｍ＿ｈａｃｃｅｌ（ｐｓ）”を呼び出す。４８行は、データバッファからのパケットを“ｐａｃｋｅｔＩｎ”によって指示されている位置にコピーする“ｃｏｐｙ＿ｆｒｏｍ＿ｄｂｕｆｆ（ｐｓ，ｐａｃｋｅｔＩｎ）”を呼び出す。４９行は、パケットのＴＡＧ領域の値を抽出し、それを変数“ｔａｇ”内に蓄積する“ｇｅｔ＿ｂｉｔｓ（ｐａｃｋｅｔＩｎ，０，１，＆ｔａｇ）”を呼び出す。５０行は、“ｔａｇ”の値を、その前の“ｔａｇ”を蓄積している“ｔａｇＩｎ”の値と比較し、両者の値が異なって、受信したパケットが新しく有効であることを意味している場合には、“ｗｈｉｌｅ”ループを抜け出す。そうでない場合には、４７行−５０行の動作が繰り返される。５２行は、新しい“ｔａｇ”の値を“ｔａｇＩｎ”に蓄積する。５３行は、応答パケットのＤＡＴＡ領域内のデータビットを抽出し、それらを“ｄａｔａ”変数によって指示されている位置に蓄積する“ｇｅｔ＿ｂｉｔｓ（ｐａｃｋｅｔＩｎ，５＋ｓｉｚｅＩｄ，ｄｓ，ｄａｔａ）”を呼び出す。
【００６７】
図１８は、４つの関数（ｗｒｉｔｅＲｅｇ，ｒｅａｄＲｅｇ，ｗｒｉｔｅＭｅｍ及びｒｅａｄＭｅｍ）のコードリストである。６０行−６３行は、３つの独立変数を有する値を戻さない“ｗｒｉｔｅＲｅｇ”関数、すなわち、ボイド関数“ｗｒｉｔｅＲｅｇ（ｕｉｎｔ  ｒｉｄ，ｉｎｔ  ｄｓ，ｕｉｎｔ  ｄａｔａ）”を宣言する。ここで、“ｒｉｄ”は、目標レジスタＩＤであり、“ｄｓ”は、書き込むデータビットの数であり、“ｄａｔａ”は、書き込むデータビットを保持する。“ｗｒｉｔｅＲｅｇ”関数は、６２行において、書き込むためのデータビットを有するＲＷコマンドパケットを送信する“ｓｅｎｄＰａｃｋｅｔ（ＣＭＤ＿ＷＲ，０，ｒｉｄ，ｄｓ，ｄａｔａ）”を呼び出す。６５行−６９行は、３つの独立変数を有する値を戻さない“ｒｅａｄＲｅｇ”関数、すなわち、ボイド関数“ｒｅａｄＲｅｇ（ｕｉｎｔ  ｒｉｄ，ｉｎｔ  ｄｓ，ｕｉｎｔ  ｄａｔａ）”を宣言する。ここで、“ｒｉｄ”は、目標レジスタＩＤであり、“ｄｓ”は、読み出すビットの数であり、“ｄａｔａ”は、目標レジスタから読み出されるデータビットを保持する。“ｒｅａｄＲｅｇ”関数は、６７行において、データを有していないＲＲコマンドパケットを送信する“ｓｅｎｄＰａｃｋｅｔ（ＣＭＤ＿ＲＲ，０，ｒｉｄ，０，ＮＵＬＬ）”を呼び出し、６８行において、目標レジスタからデータビットを読み出す“ｒｅｃｅｉｖｅＰａｃｋｅｔ（ｄｓ，ｄａｔａ）”を呼び出す。
【００６８】
７１行−８０行は、６つの独立変数を有する値を戻さない“ｗｒｉｔｅＭｅｍ”関数、すなわち、ボイド関数“ｗｒｉｔｅＭｅｍ（ｕｉｎｔ  ｍｉｄ，ｉｎｔ  ａｓ，ｕｉｎｔ  ｓｔａｒｔ，ｉｎｔ  ｎｗ，ｉｎｔ  ｄｓ，ｕｉｎｔ＊ｄａｔａ）”を宣言する。ここで、“ｍｉｄ”は、目標メモリＩＤであり、“ａｓ”は、メモリアドレスビットの数であり、“ｓｔａｒｔ”は、スタートメモリアドレスであり、“ｎｗ”は、書き込むメモリワードの数であり、“ｄｓ”は、メモリワード当たりのビットの数であり、“ｄａｔａ”は、書き込むメモリワードを保持するアレイ（ａｒｒａｙ）に対する指示である。“ｗｒｉｔｅＭｅｍ”関数は、７４行において、目標メモリＩＤ及びスタートメモリアドレスを有するＳＷＭコマンドを送信する“ｓｅｎｄＰａｃｋｅｔ（ＣＭＤ＿ＳＷＭ，０，ｍｉｄ，ａｓ，ｓｔａｒｔ）”を呼び出す。７５行において、初期値「０」を変数“ｅｎｄ”に設定した後、“ｗｒｉｔｅＭｅｍ”関数は、書き込むメモリワードの数に対して、７７行−７８行での動作を繰り返すために、７６行−７９行において“ｆｏｒ”ループを実行する。７７行は、ｉ番目の繰返しが最後である場合に、値「１」を変数“ｅｎｄ”に設定する。７８行は、データアレイのｉ番目の要素からのメモリワードを有するＷＭコマンドを送信する“ｓｅｎｄＰａｃｋｅｔ（ＣＭＤ＿ＷＭ，０，ｅｎｄ，ｄｓ，ｄａｔａ［ｉ］）”を呼び出す。
【００６９】
８２行−９２行は、６つの独立変数を有する値を戻さない“ｒｅａｄＭｅｍ”関数、すなわち、ボイド関数“ｒｅａｄＭｅｍ（ｕｉｎｔ  ｍｉｄ，ｉｎｔ  ａｓ，ｕｉｎｔ  ｓｔａｒｔ，ｉｎｔ  ｎｗ，ｉｎｔ  ｄｓ，ｕｉｎｔ＊ｄａｔａ）”を宣言する。ここで、“ｍｉｄ”は、目標メモリＩＤであり、“ａｓ”は、アドレスビットの数であり、“ｓｔａｒｔ”は、スタートメモリアドレスであり、“ｎｗ”は、読み出すメモリワードの数であり、“ｄｓ”は、メモリワード当たりのビットの数であり、“ｄａｔａ”は、目標メモリから読み出されるメモリワードを保持するアレイに対する指示である。“ｒｅａｄＭｅｍ”関数は、８５行において、目標メモリＩＤ及びスタートメモリアドレスを有するＳＲＭコマンドを送信する“ｓｅｎｄＰａｃｋｅｔ（ＣＭＤ＿ＳＲＭ，０，ｍｉｄ，ａｓ，ｓｔａｒｔ）”を呼び出す。８６行において、初期値「０」を変数“ｅｎｄ”に設定した後、“ｒｅａｄＭｅｍ”関数は、読み出すメモリワードの数に対して、８８行−９０行での動作を繰り返すために、８７行−９１行において“ｆｏｒ”ループを実行する。８８行は、ｉ番目の繰返しが最後である場合に、値「１」を変数“ｅｎｄ”に設定する。８９行は、目標メモリからのｉ番目のメモリワードを読み出すＲＭコマンドを送信する“ｓｅｎｄＰａｃｋｅｔ（ＣＭＤ＿ＲＭ，０，ｅｎｄ，ｄｓ，ｄａｔａ［ｉ］）”を呼び出す。９０行は、ｉ番目のメモリワードを受信し、それをデータアレイのｉ番目の要素に蓄積する“ｒｅｃｅｉｖｅＰａｃｋｅｔ（ｄｓ，＆ｄａｔａ［ｉ］）”を呼び出す。
【００７０】
要するに、機能検証を受けるユーザー設計のメモリ及びレジスタへの非常に改良されたアクセスを有するハードウェア支援検証システムが提供される。ある実施の形態では、目標ＤＵＶ内のレジスタ及びメモリにデータをロードするため及びデータをアンロードするために、ホストワークステーションとハードウェアアクセラレータとの間でのデータ転送を実行するパケット基準のプロトコルを用いる。プロトコルは、コンパイル時に目標ＤＵＶ内のレジスタ及びメモリのサイズパラメータとともに統合され、作動時に目標ＤＵＶと共にシミュレートされるプロトコルインターフェース論理と協同する。統合されるプロトコルインターフェース論理は、ホストワークステーション上で動作する検証制御プログラムからの要求パケット内にエンコードされる要求コマンドをデコードし、それを実行する。要求コマンドが読出コマンドである場合には、応答パケット内のデータは、ホストワークステーションに送信される。
【００７１】
本発明の例示の実施の形態では、図２Ａ及び２Ｂに示されているように、３つのレジスタと２つのメモリを有する例示のＤＵＶについて詳細に説明したが、当業者には、本発明の精神の範囲内で修正や置換を行うことできることがわかる。このように、好ましい方法及び装置が説明されているが、当業者に明らかなように、前述した本発明の概念から逸脱しない範囲で、種々の実施の形態及び応用が可能である。したがって、本発明は添付の請求項の精神以外に限定されない。
【図面の簡単な説明】
【図１】
検証下の例示の設計あるいは例示のＤＵＶのために統合されるプロトコルインターフェース論理を示す主要システムのブロック図である。
【図２Ａ】
プロトコルインターフェース論理と結合される例示のＤＵＶ内のレジスタブロックのブロック図である。
【図２Ｂ】
プロトコルインターフェース論理と結合される例示のＤＵＶ内のメモリブロックのブロック図である。
【図３】
プロトコルインターフェース論理のパケットＩ／Ｏブロックの詳細ブロック図である。
【図４】
プロトコルインターフェース論理のメモリアドレスブロックの詳細ブロック図である。
【図５】
プロトコルインターフェース論理の読出データブロックの詳細ブロック図である。
【図６】
プロトコルインターフェース論理によって扱われるプロトコルコマンドのチャート図である。
【図７】
プロトコルインターフェース論理のコマンドデコードブロックの詳細ブロック図である。
【図８】
プロトコルインターフェース論理の状態及び状態遷移を示す図である。
【図９】
プロトコルインターフェース論理の状態制御ブロックの詳細ブロック図である。
【図１０】
プロトコルインターフェース論理の読出／書込制御ブロックの詳細ブロック図である。
【図１１Ａ】
プロトコルインターフェース論理内のレジスタ書込コマンドの実行のタイムチャート図である。
【図１１Ｂ】
プロトコルインターフェース論理内のレジスタ読出コマンドの実行のタイムチャート図である。
【図１１Ｃ】
プロトコルインターフェース論理内のメモリ書込コマンドの実行のタイムチャート図である。
【図１１Ｄ】
プロトコルインターフェース論理内のメモリ読出コマンドの実行のタイムチャート図である。
【図１２】
プロトコルインターフェース論理を発生するためのコンパイル時間ステップのフローチャート図である。
【図１３】
プロトコルインターフェース論理のためのプロトコル領域サイズの計算の詳細フローチャート図である。
【図１４】
プロトコルインターフェース論理の構成要素の構成の詳細フローチャート図である。
【図１５】
プロトコルインターフェース論理を有するＤＵＶのシミュレーションのための実行動作のフローチャート図である。
【図１６】
プロトコルインターフェース論理を有する動作を説明するために用いられる定数、変数及び関数の定義及び宣言のコードリストである。
【図１７】
プロトコルインターフェース論理にパケットを送信するため及びプロトコルインターフェースからのパケットを受信する関数コードリストである。
【図１８】
プロトコルインターフェース論理を有する、書込レジスタ、読出レジスタ、書込メモリ及び読出メモリに対する関数コードリストである。
【符号の説明】
１０  ホストワークステーション
１１  制御プログラム
１３、２１  データバッファ
２０  ハードウェアアクセラレータ
３０  検証下の設計（ＤＵＶ）
３１、３３  ＤＵＶ論理
４０  プロトコルインターフェース論理
４１  パケットＩ／Ｏブロック
４２  状態制御ブロック
４３  コマンドデコードブロック
４４  読出／書込制御ブロック
４５  メモリアドレスブロック
４６  読出データブロック
【図１】
2004519041.tif 000003
【図２Ａ】
2004519041.tif 000004
【図２Ｂ】
2004519041.tif 000005
【図３】
2004519041.tif 000006
【図４】
2004519041.tif 000007
【図５】
2004519041.tif 000008
【図６】
2004519041.tif 000009
【図７】
2004519041.tif 000010
【図８】
2004519041.tif 000011
【図９】
2004519041.tif 000012
【図１０】
2004519041.tif 000013
【図１１Ａ】
2004519041.tif 000014
【図１１Ｂ】
2004519041.tif 000015
【図１１Ｃ】
2004519041.tif 000016
【図１１Ｄ】
2004519041.tif 000017
【図１２】
2004519041.tif 000018
【図１３】
2004519041.tif 000019
【図１４】
2004519041.tif 000020
【図１５】
2004519041.tif 000021
【国際公開パンフレット】
2004519041.tif 000022
2004519041.tif 000023
2004519041.tif 000024
2004519041.tif 000025
2004519041.tif 000026
2004519041.tif 000027
2004519041.tif 000028
2004519041.tif 000029
2004519041.tif 000030
2004519041.tif 000031
2004519041.tif 000032
2004519041.tif 000033
2004519041.tif 000034
2004519041.tif 000035
2004519041.tif 000036
2004519041.tif 000037
2004519041.tif 000038
2004519041.tif 000039
2004519041.tif 000040
2004519041.tif 000041
2004519041.tif 000042
2004519041.tif 000043
2004519041.tif 000044
2004519041.tif 000045
2004519041.tif 000046
2004519041.tif 000047
2004519041.tif 000048
2004519041.tif 000049
2004519041.tif 000050
2004519041.tif 000051
2004519041.tif 000052
2004519041.tif 000053
2004519041.tif 000054
2004519041.tif 000055
2004519041.tif 000056
2004519041.tif 000057
2004519041.tif 000058
2004519041.tif 000059
2004519041.tif 000060
2004519041.tif 000061
2004519041.tif 000062
2004519041.tif 000063
2004519041.tif 000064
2004519041.tif 000065
2004519041.tif 000066
2004519041.tif 000067
2004519041.tif 000068
2004519041.tif 000069
2004519041.tif 000070