ソフトCPU検証


18

現在、ザイリンクスISEおよびISIMを使用してVHDLで単純なCPUを設計しています。設計部分は非常に順調に進んでいますが、一貫性のある方法で検証を行う方法がわかりません。

現在、VHDLテストベンチを更新しており、特定の瞬間に作業中の機能をテストするために更新しています。これは非常にアドホックであり、リグレッションをキャッチするのに役立ちません。また、仕様/命令セットへの準拠を検証するために使用することはできません。

大規模なテストスイートの開発を検討しましたが、問題は、CPUとしての汎用パーツの潜在的な状態が、一般的でないコンポーネントと比較して非常に大きいことです。

より制御された方法で設計とテストを実行できる方法を探しています。ある種の「ハードウェアTDD」。そのようなものは存在しますか?CPUなどの汎用部品に比較的簡単に適用できますか?

回答:


16

CPU検証の問題全体は非常に大きく困難です。これだけでキャリアを築く人がいます。概要をお伝えします...

  1. すべての命令とすべての命令の細部をテストするアセンブリ言語プログラムを作成します。たとえば、ADD命令をテストするときは、両方とも正の数、両方の負の数、およびそれぞれ(2回)の数値でテストすることができます。次に、キャリーフラグ、ゼロフラグなどをテストします。CPUの他の特別な機能(分岐予測など)には、このテストの独自の特別な部分があります。

  2. C / C ++などを使用して、CPUのモデルを記述します。これが仮想CPUです。これは「ゴールデンCPU」でもあります。つまり、これは他のすべてのものと比較されるCPUです。理想的には、VHDLを書いた人はC / C ++モデルを書いた人と同じではありません

  3. C / C ++モデルとVHDLモデルを並べて実行できるシステムを作成/作成し、サイクルごとに結果を比較します。手順1のアセンブリプログラムを実行し、2つのモデルが一致することを確認します。

  4. ランダムな「命令」で2つのモデルを実行します。基本的に、「RAM」にランダムデータを入力し、そのランダムデータを実際の命令であるかのように実行します。VHDLモデルとC / C ++モデルの両方で同じランダムデータを実行し、結果を比較します。このC / C ++モデルは、新しいCPU自体ではなく、ワークステーションやサーバーで実行されます。

  5. 1つまたは複数のマシンをセットアップして、ステップ4を本質的に永久に繰り返します。CPUが「完成」しており、1年以上実稼働している場合でも、このテストを実行します。

  6. シミュレートするものがさらにある場合は、これらの手順を繰り返します。たとえば、使用可能なタイミングでポストルートVHDLで実行します。

VHDLとC / C ++のバージョンを比較することですべてのバグをキャッチできるという保証はありませんが、実際にはこれよりも良い方法はありません。また、ランダムな命令でCPUをテストするには時間がかかりますが、これも非常に便利です。これに代わる唯一の真の代替手段は、CPUのさまざまな部分をテストするために1日中コードを書くだけで多くの人を雇うことです。

VHDLコードを書く一人の人にとって、通常、行われるのはステップ#1だけです。ただし、CPUを販売する場合は、少なくとも他の手順のいくつかを実行する必要があります(実際、すべてを実行する必要があります)。


素晴らしい回答、ありがとう!これは非常に理にかなっています。「Golden CPU」は、テストの際にサイクルごとの検証を行うことができるパズルの欠片です。これは主におもちゃのプロジェクトであるため、最後の段落の最初の文に準拠し、ステップ1だけを実行すると思います。しかし、私がすべきことを知ることは非常に貴重です。
drxzcl

また、ゴールデンであるが非サイクル精度のC ++モデルを使用すると、より単純で正確になる可能性が高くなります。たとえば、ALU機能のテストに役立ちます( "2 + 2 = 4 and some flags、I 「1ティック後の2 + 2 = 4と2ティック後のフラグ」ではなく、「いつでも構いません」)
マーティントンプソン

また、実行コード・カバレッジは、テスト・カバレッジ(両方PASのためにテストされたすべてのテストをチェックして、失敗する)(チェックするために、あなたはそれをすべて行使)
マーティン・トンプソンの

フォローアップ:「ステップ1」の手順を使用して、多くの障害を見つけることができました...アセンブラーで:Pコア自体は比較的問題ないようです。
drxzcl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.