Verilog または VHDL でのロジック (チップ) 設計のためのテスト駆動開発 (TDD) の経験

StackOverflow https://stackoverflow.com/questions/1633559

質問

Web で調べたところ、議論や例は従来のソフトウェア開発に関するもののようです。Verilog と VHDL (チップ設計に使用されるなど) 以来FPGA と ASIC) はソフトウェア開発の C および C++ に似ており、それは理にかなっているように思えます。ただし、基本的には並行しており、ハードウェアで完全にテストする必要があるため、いくつかの違いがあります。

良いことも悪いことも含めて、どんな経験をしましたか?この特定のアプリケーションに関して提案できるリンクはありますか?

編集/説明:2009 年 10 月 28 日:特にTDDについて質問します。私は自己チェックを含むテストベンチを行うことに慣れています。また、SystemVerilog にはテストベンチ用の特別な機能がいくつかあることも認識しています。

2009 年 10 月 28 日:暗黙の質問には、1) シミュレーションに波形を決して使用せず、あらゆる機能のテストを作成すること、2) 最初にテスト/テストベンチを作成することが含まれます。

2009 年 11 月 29 日:で 実証研究はテスト駆動開発が品質を向上させることを示しています 彼らは、(ソフトウェア) TDD について報告しています。「4 つの製品のリリース前の欠陥密度は、コード 1,000 行あたりの欠陥として測定され、TDD を使用しなかったプロジェクトと比較して 40% から 90% 減少しました。チームの経営陣は主観的に、TDD を使用しているチームの初期開発時間が 15 ~ 35% 増加したと報告しましたが、チームはこれがメンテナンスコストの削減によって相殺されることに同意しました。」スケジュールへの影響は中程度。 これ にもいくつかのデータがあります。

2009 年 11 月 29 日:私は主に DSP コードではなく、制御およびデータパス コードを実行しています。DSP の場合、一般的なソリューションには Matlab のビット精度のシミュレーションが含まれます。

03/02/10:TDD の利点は、最初にテストが失敗することを確認できることです。これはアサーションでも実現できると思います。

役に立ちましたか?

解決

私はアシックスではなくFPGAのコードを書きます...私が書いたすべての機能コードに対して完全なテストスイートを用意したいので、最初にテストコードを書くことを試みます(常に成功するとは限りません)。波形を見つめることは、デバッグ中のある時点で常に発生しますが、コードを検証する良い方法ではありません(IMHO)。

実際のハードウェアで適切なテストを実行することの難しさ(コーナーケースを刺激することは特に難しい)と、VHDLコンパイルに数秒かかる(vsハードウェアコンパイルに数分(または数時間)要する) )、他の人がどのように操作できるかわかりません!

また、RTLを作成するときにRTLにアサーションを組み込み、これまで発生してはならないことがわかっていることをキャッチします。検証エンジニアはアサーションを作成し、RTLデザイナーは作成しないという認識があるため、これは少々「奇妙」だと思われます。しかし、主に私は自分の検証エンジニアであるため、多分それが理由です!

他のヒント

VHDLを使用したテスト駆動開発に VUnit を使用しています。

VUnitは、VHDLコンパイラとシミュレータを呼び出し、シミュレーションの結果を読み取るPythonライブラリです。また、 communicationなど、優れたテストベンチを簡単に作成できるようにするいくつかの優れたVHDLライブラリも提供します。ライブラリロギングライブラリ、およびライブラリのチェック

Pythonから呼び出されるため、多くの可能性があります。 Pythonでテストの出力データを確認するだけでなく、テストデータを生成することもできます。先日、 Octave-Matlab copy-を使用したこの例を見ました。テスト結果のプロット用

VUnitは非常にアクティブなようで、実際に開発者に直接質問することができ、非常に迅速に助けを得ることができました。

欠点は、ライブラリ内に同じ名前の関数/プロシージャのバリエーションが非常に多いため、コンパイルエラーのデバッグが難しくなることです。また、コードを前処理することにより、背後でいくつかの処理が行われます。つまり、予期しない場所にエラーが表示される可能性があります。

IEEE Verilog標準のSystemVerilog拡張には、次のものが含まれます。 完全なテストスイートの作成を容易にするさまざまな構成体 複雑なデジタルロジックデザインの検証用。 SystemVerilogは ASICチップの検証に使用されるハードウェア検証言語(HVL) シミュレーションによる設計(エミュレーションまたはFPGAの使用とは対照的に)。

従来のハードウェア設計言語(Verilog)に比べて大きな利点は次のとおりです。

  • 制約付きランダム化
  • アサーション
  • 機能およびアサーションカバレッジデータの自動収集

鍵は、サポートするシミュレーションソフトウェアにアクセスすることです この最近の(2005年の)標準。すべてのシミュレーターが完全にサポートするわけではありません より高度な機能。

IEEE標準に加えて、オープンソースのSystemVerilogライブラリがあります VMM Centralから利用可能な検証コンポーネントの一覧( http://www.vmmcentral.com )。テスト環境を作成するための合理的なフレームワークを提供します。

次の項目を検索することで、このトピックについてさらに調査することもできます。 Verfication Guildフォーラム。

SystemVerilogが唯一のHVLではなく、VMMが唯一のライブラリではありません。 ただし、両方をお勧めします。適切なものにアクセスできる場合は ツール。これはデザインを見つけるのに効果的な方法論であることがわかりました シリコンになる前のバグ

ハードウェア/チップの設計についてはあまり知りませんが、TDDに深く関わっているので、少なくともプロセスの適合性についてはあなたと話し合うことができます。

私が最も適切と呼ぶ質問は、どのくらい早くテストから設計に関するフィードバックが得られるのかということです。それに関連して:新しいテストをどれくらい早く追加できますか?また、ツールはデザインのリファクタリング(動作を変更せずに構造を変更)をどの程度サポートしていますか?

TDDプロセスは、「柔らかさ」に大きく依存しています。ソフトウェアの-優れた自動化された単体テストは数秒(外部で数分)で実行され、集中的な構築とリファクタリングの短いバーストを導きます。ツールはこの種のワークフローをサポートしていますか?テストの作成と実行を迅速に繰り返し、短い反復でテスト対象のシステムを構築しますか?

ハードウェア言語のリファクタリングツールに関しては、 Sigasi HDT のツールを紹介します。 。 Sigasiは、ビルトインVHDLアナライザーとVHDLリファクタリングを備えたIDEを提供しています。

フィリップ・フェス、シガシ

ANVIL –別のVerilogインタラクションレイヤーでは、このいくつかについて説明しています。試していません。

RTLデザインでTDDを積極的に試したことはありませんでしたが、これについては考えていました。

面白いと思うのは、アサーションに関連してこのアプローチを試すことです。基本的には、まずモジュールから想定/期待するものをアサーションの形式で書き留め、RTLを書き、後で正式なツールやシミュレーションを使用してこれらのアサーションを検証できます。 「通常」とは対照的に、テストケース(指示されたものを作成する必要がある場合)には、より優れたカバレッジが必要であり、アサーション/仮定は後で(たとえば、システムレベルで)使用される可能性があります。

ただし、アサーションに完全に依存するわけではありませんが、これは非常に困難になる可能性があります。

たぶん、これについてあなたの考えを表現することができます。あなたがそれを求めているので、あなたはあなたの頭の中にいくつかのアイデアを持っていると思いますか?

あなたにとってTDDとは何ですか?すべてのコードを常に自動テストで実行するという意味ですか、それともさらに進んで、コードの前にテストが記述され、テストが失敗しない限り新しいコードは記述されないという意味ですか?

どちらのアプローチを好む場合でも、HDL コード テストはソフトウェア テストとあまり変わりません。これには、長所 (対象範囲がはるかに広く、テストの深さ) と短所 (ソフトウェアに比べてセットアップが難しく、面倒) があります。

私は、合成可能な HDL モジュールの包括的かつ自動テストを実装するために、Python と汎用 HDL トランザクションを採用することで非常に良い経験を積んできました。考え方は次のようなものに似ています ジャニック・バージェロン 氏は著書で紹介していますが、SystemVerilog の代わりに Python を使用して、(1) Python で記述されたテスト シナリオから VHDL コードを生成し、(2) シミュレーション中にデザインから波形を受け入れるモニタリング トランザクタによって記述された結果を検証します。

このテクニックについてはまだ書きたいことがたくさんありますが、何に焦点を当てたいのかわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top