SystemVerilog検証テストプラットフォームライティングガイド第6章ランダム化

6.11制約手法と手法
6.11.1変数を使用した制約
ランダム変数を使用して、値をランダムに割り当てるときに上限制約を設定します。
例6.33。変数を使用して上限制約を設定する

class bounds;
	rand int size;
	int max_size=100;
	constraint c_size {
		size inside {[1:max_size]};
	}
endclass

変数max_sizeの値を変更することにより、ランダム変数サイズの上限を変更できます。
dist制約で変数を使用すると、特定の値または範囲を有効または無効にできます。
例6.34。重み付き変数による距離制約

typedef enum {READ8, READ16,READ32} read_e;
class ReadCommands;
	rand read_e read_cmd;
	int read8_wt=1, read16_wt=1, read32_wt=1;
	constraint c_read {READ8:=read8_wt,
					   READ16:=read16_wt,
					   READ32:=read32_wt};
	}
endclass

重み変数read8_wtの値を変更することで、制約生成コマンドの確率を変更できます。さらに重要なことに、ウェイトを0に設定することで特定のコマンドを禁止できます。
6.11.2非ランダム値の使用
一連の制約がランダム化プロセス中にほぼすべての望ましい励起ベクトルを生成したが、まだいくつかのタイプの励起ベクトルが残っている場合は、最初にrandomiz()関数を呼び出してから、解決するには、値を固定の期待値に設定します。固定励起値セットは、関連する制約に違反する可能性があります。
いくつかの変数のみを変更する必要がある場合は、rand_mode()関数を使用して、これらの変数を非ランダム変数に設定できます。
例6.35 rand_mode()を使用して変数のランダム化を禁止するSVグリーンペーパーP155
p.length.rand_mode(0); //パケット長をランダムでない値に
設定するp.length = 42; //パケット長を定数
6.11.3に設定する制約付きの値の有効性のチェック
オブジェクトをランダム化してその変数の値を変更した後、値が制約に従っているかどうかをチェックすることにより、オブジェクトがまだ有効かどうかをチェックできます。handle.randomize(null)関数を呼び出すと、System Verilogはすべての変数を非ランダム変数として扱い、これらの変数が制約を満たすかどうかのみをチェックします。
6.11.4個々の変数を
ランダム化するrandomize()呼び出すと、変数のサブセットのみが渡され、クラス内のいくつかの変数のみがランダム化されます。
6.11.5制約をオンまたはオフに
する条件演算子(->またはif-else)を使用して、非ランダム変数によって制御される制約を作成します。
より一般的な方法は、各命令に対して独立した制約のセットを確立し、使用時に他のすべての制約を閉じることです。
6.11.6
テスト中にインライン制約を使用する6.11.7テスト中に外部制約を使用
すると、ファイル内にクラスを定義できます。このクラスには空の制約が1つだけあり、各テストに異なる制約を定義します異なるインセンティブを生成するバージョン。

6.12ランダム化における一般的な誤り
6.12.1符号付き変数に注意する
必要がない限り、ランダム制約で符号付き型を使用しないでください。
6.12.2ソルバーのパフォーマンスを向上させるためのヒント
除算、乗算、係数などの複雑な演算の使用は避けてください。

6.13反復と配列の制約
6.14原子の励起とシナリオの

生成ランダムなトランザクションシーケンスを生成するには?
ランダム
オブジェクトのランダムシーケンスrandsequence 配列
6.15ランダム制御
6.16乱数ジェネレーター
6.17ランダムデバイス構成
6.18結論

CRT(制約付きランダムテスト)は、複雑な設計を検証するために必要な刺激を生成する唯一の実行可能な方法です。System Verilogは、ランダムな励起を生成するための複数の方法を提供します。

元の記事を38件公開 29のような 10,000以上の訪問

おすすめ

転載: blog.csdn.net/weixin_45270982/article/details/95859255