verilogでコンパイル時にエラーを条件付きでトリガーする方法はありますか?


9

verilogにパラメーター化されたモジュールがあります。パラメーターはクロックレートとリフレッシュレートであり、繰り返し操作のインスタンス間に挿入された非アクティブのサイクル数を計算するために使用されます。ただし、達成できないパラメーターを設定するのは非常に簡単であり(操作にはかなりの時間がかかるため、繰り返しが完了する前に繰り返す必要があるため)、現時点では設計からフィードバックがありません。これについて。

条件が満たされない場合(つまり、1つのlocalparamが別のlocalparamより小さい場合)、合成(またはシミュレーションの前のコンパイル)中にエラーをトリガーできる方法があるかどうか疑問に思いました。おそらく、人気のあるC / C ++コンパイル時アサートハックに相当するものです。

回答:


10

C / C ++コンパイル時コールバックをバインドする方法があると確信しています。ただし、サポートgenerateブロック(IEEE Std 1364-2001で導入)である限り、次のようなことができます。

generate
if (CONDITION > MAX_ALLOWED /* your condition check */ ) begin
    illegal_parameter_condition_triggered_will_instantiate_an non_existing_module();
end
endgenerate

条件が真の場合、存在しないものに対する要求があるため、コンパイラーはエラーを出します。条件がfalseの場合、操作はスキップされます。唯一の要件は、不正な条件のコードが有効なVerilog構文に従い、不正な条件が誤って有効になることがないことです(したがって、長くて冗長な存在しないモジュール名)。

シミュレーターと合成ツールがIEEE Std 1800-2009(2009年にリリースされたSystemVerilogリビジョン)またはそれより新しいリビジョンをサポートしている場合は$error()、エラーと一緒に、より意味のあるメッセージを使用して伝えることができます。ベンダーがこの機能をまだ実装しているかどうかはわかりません。ほとんどのベンダーが実装されると、これが推奨される方法になるはずなので、例を挙げましょう。

generate
if (CONDITION > MAX_ALLOWED /* your condition check */ ) begin
    $error("%m ** Illegal Condition ** CONDITION(%d) > MAX_ALLOWED(%d)", CONDITION, MAX_ALLOWED);
end
endgenerate

1

あなたはこのようなことをすることができます:

module test();

  parameter VALUE=16;

  // VALUE should be between 16 and 64
  wire [64:16] range_for_value;
  assign range_for_value[VALUE] = 1'b0;

endmodule

ツールはこれをわずかに異なる方法で処理しますがVALUE、期待される範囲内にない場合、assignステートメントのビットインデックスがの範囲外になるため、エラーになりますrange_for_value


1

Verilogに「assert」のようなものはないというのは本当に本当ですか?これはかなり基本的なものです!

ツールが混合言語をサポートしている場合、必要なポートまたはジェネリックと明白なASSERTステートメントを備えたVHDLエンティティであるモジュールを追加できます。コンパイルまたはエラボレーション時間の決定可能な条件の場合、これはシミュレーションまたは合成で(少なくともXSTまたはSynplicityで)同等に機能します。

entity CheckSize is
   generic (depth : natural := 16);
   port (data : std_logic_vector);
end CheckSize;

architecture empty of CheckSize is
begin
   Assert depth * data'length <= 256 Report "Size too large!" 
      severity Failure;
end empty;

「System Verilog 2009」の$ error()を除いて、これまでのところ答えはどれも本当に満足のいくものではありませんが、これはおそらく最も幅広いツールの中で最も簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.