Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

セマンティックエラー

この付録では、Veryl のセマンティック解析器が出力する診断を一覧します。診断は、コンパイルを停止させるエラーと、コンパイルの継続を許す警告に分けて記載します。

エラー

ambiguous_elsif

このエラーは、elsif または else 属性を、先行する if 属性と一意に対応付けられない場合に報告されます。対応関係が明確になるよう周辺のコードを書き直してください。

ambiguous_identifier

このエラーは、識別子が複数のパッケージからインポートされていて、どのシンボルを指すのか決定できない場合に報告されます。識別子を明示的なスコープで修飾するか、インポートのいずれかを削除してください。

anonymous_identifier_usage

このエラーは、名前付きの識別子が必要な位置で匿名識別子(_)が使われた場合に報告されます。

call_non_function

このエラーは、関数でないシンボルを関数として呼び出した場合に報告されます。呼び出しを削除するか、実際の関数シンボルに置き換えてください。

combinational_loop

このエラーは、シーケンシャル要素を介さず、信号の値が純粋な組み合わせ論理を通じて自分自身に依存している場合に報告されます。ループは assign 宣言、always_comb ブロック、関数呼び出し、またはインスタンス化されたモジュールやインターフェースによって形成され得ます。少なくとも 1 つのパス上にレジスタ (always_ff) を挿入するか、依存関係の連鎖が終了するように設計を再構成してループを解消してください。

component_interface_mismatch

このエラーは、$comp::* の検証コンポーネントの使い方が、そのコンポーネントが宣言しているインターフェースと一致しない場合に報告されます。チェックされるのは、宣言の形式(クロック付きコンポーネントは inst、メソッドのみのコンポーネントは var)、パラメータ、ポート、インターフェースポート、および戻り値の幅を含むメソッド呼び出しです。使い方を修正するか、インターフェースが一致するようコンポーネントを更新してください。

cyclic_type_dependency

このエラーは、複数の型定義が循環的に互いを参照している場合に報告されます。参照のいずれかを削除または再構成して循環を断ち切ってください。

duplicate_argument

このエラーは、インスタンス化や関数呼び出しで同じ名前付き引数が複数回接続された場合に報告されます。重複した接続を削除してください。

duplicate_enum_variant

このエラーは、enum のバリアントが同じ enum の別のバリアントと同じ値を持つ場合に報告されます。そのバリアントに他と異なる値を与えてください。

duplicated_identifier

このエラーは、同じ識別子が同一スコープ内で複数回宣言された場合に報告されます。いずれかの宣言を別名にリネームしてください。

exceed_limit

このエラーは、インスタンスの深さ、総インスタンス数、エラボレーション評価サイズなどの内部制限を超えた場合に報告されます。Veryl.toml[build] セクションで該当する制限を引き上げるか、設計を簡略化してください。

fixed_type_with_signed_modifier

このエラーは、固定幅の型(例:u32)に signed 修飾子を付けた場合に報告されます。signed 修飾子を削除してください。

generic_inference_failed

このエラーは、関数呼び出しの実引数が省略されたが、コンパイラが呼び出し時の引数から推論できなかった場合に報告されます。::<> で明示的にジェネリック引数を指定するか、変数宣言から幅を決定できる引数を渡してください。

implicit_clock_conversion

このエラーは、clock/reset 型でない値が clock/reset ポートに接続された場合、またはその逆の場合に報告されます。clock 性・reset 性は宣言でのみ与えられるため、その値を親側で clock/reset 型の信号に束縛し(例: let g: '_ clock = expr;)、その信号を接続してください。

include_failure

このエラーは、include 宣言が参照するファイルを読み込めない場合に報告されます。パスとファイルパーミッションを確認してください。

incompat_proto

このエラーは、for {proto} を持つモジュール/インターフェース/パッケージがそのプロトタイプの契約を満たさない場合に報告されます。プロトタイプに合うように実装を調整してください。

infinite_recursion

このエラーは、モジュールが直接的または間接的に自身をインスタンス化し、再帰を止める条件が無い場合に報告されます。再帰を終端させる条件を加える(例:ジェネリックパラメータと if による生成で打ち切る)か、モジュールが自身を参照しないように設計を組み直してください。

invalid_assignment

このエラーは、定数・パラメータ・ジェネリックパラメータなど代入できない種類のシンボルが代入の対象になった場合に報告されます。代入を削除してください。

invalid_cast

このエラーは、型キャストの元と先の型が互換でない場合に報告されます。互換性のある型を指定してください。

invalid_clock

このエラーは、clock 型でも単一ビット信号でもない信号がクロックとして接続された場合に報告されます。clock 型の信号を使用してください。

invalid_clock_assignment

このエラーは、clock/reset 型の信号が always_ff の中で代入された場合に報告されます。代わりに always_ff では logic の変数をトグルし、それを clock/reset 型の信号に束縛してください(例: let d: '_ clock = t;)。

invalid_clock_domain

このエラーは、モジュールインスタンスにクロックドメインアノテーションが付与された場合に報告されます。アノテーションを削除してください。

invalid_connect_operand

このエラーは、<> 接続演算子のオペランドとして有効なインターフェースオペランドが指定されていない場合に報告されます。

invalid_direction

このエラーは、ポート方向指定(inputoutputinout など)がそれを許可していない位置に書かれた場合に報告されます。方向修飾子を削除してください。

invalid_embed

このエラーは、現在位置で許可されていない way/言語の組み合わせの embed 宣言が使われた場合に報告されます。

invalid_embed_identifier

このエラーは、embed 識別子の参照が (way: inline / lang: sv) 以外の embed ブロックに現れた場合に報告されます。

invalid_enum_variant

このエラーは、enum バリアントの値がその enum に指定されたエンコーディング(one-hot、gray など)と一致しない場合に報告されます。

invalid_factor

このエラーは、値ではないシンボル(例:モジュール名)が式の因子として使われた場合に報告されます。

invalid_for_range

このエラーは、for ループの範囲が不正な場合に報告されます。範囲は .. または ..= で書く必要があり、単なる式は範囲になりません。また範囲の境界は符号なしとして評価されるため、負の値にはできません。

invalid_for_step

このエラーは、for ループのステップが誘導変数を範囲の終端に向けて進めず、ループが終了しない場合に報告されます。誘導変数が確実に進むようにステップを修正してください。

invalid_import

このエラーは、参照先がインポート可能でない(private、またはインポート対象として無効)な場合に報告されます。

invalid_lsb

このエラーは、対応するビット幅を特定できない位置で lsb キーワードが使われた場合に報告されます。lsb を具体的なインデックスに置き換えてください。

invalid_mixin

このエラーは、mixin 宣言の対象をミックスインできない場合に報告されます。対象は、プロトタイプでなく、上書き可能なパラメータを持たず、自身が mixin 宣言を持たないインターフェースでなければなりません。また対象のメンバ名は、そのインターフェースに既に定義されているメンバと衝突してはいけません。

invalid_modifier

このエラーは、型修飾子が許可されていない位置で使われた場合に報告されます。修飾子を削除してください。

invalid_modport_item

このエラーは、modport の項目が期待する種類でない識別子を参照している場合に報告されます。

invalid_msb

このエラーは、対応するビット幅を特定できない位置で msb キーワードが使われた場合に報告されます。msb を具体的なインデックスに置き換えてください。

invalid_number_character

このエラーは、数値リテラルが基数に対して不正な文字を含む場合(例:2進リテラル中の16進数字)に報告されます。

invalid_operand

このエラーは、演算子と互換性のない種類のオペランドが使われた場合に報告されます。

invalid_port_default_value

このエラーは、ポートのデフォルト値がそのポートの型や方向に対して無効な場合に報告されます。

invalid_range

このエラーは、範囲が不正な場合に報告されます。例えば、終端を含まない範囲の下限が上限より小さくない場合です。

invalid_range_assign

このエラーは、代入の左辺の配列範囲選択が、定数で・範囲内で・昇順のスライスになっていない場合に報告されます。

invalid_reset

このエラーは、reset 型でも単一ビット信号でもない信号がリセットとして接続された場合に報告されます。reset 型の信号を使用してください。

invalid_statement

このエラーは、文がそれを許可していない位置に書かれた場合(例:関数外の return)に報告されます。文を削除するか、適切な位置に移動してください。

invalid_tb_usage

このエラーは、$tb::* または $comp::* のコンポーネントが #[test] モジュールの外で使われた場合に報告されます。テストモジュール内に移動してください。

invalid_test

このエラーは、#[test] 宣言が不正な形をしている場合に報告されます。

invalid_type_declaration

このエラーは structenumunion のデータ型がインターフェース宣言内で定義された場合に報告されます。

invalid_unsized_literal

このエラーは、幅指定のないリテラルが自己決定のコンテキストで使われ、周囲から幅を決定できない場合に報告されます。1'b0 のようにリテラルへ明示的な幅を与えてください。

invalid_wavedrom

このエラーは、ドキュメンテーションコメント中の WaveDrom ブロックが不正な場合に報告されます。

invisible_identifier

このエラーは、スコープ外(可視性境界をまたぐなど)から識別子を参照した場合に報告されます。

last_item_with_define

このエラーは、カンマ区切りリストの最後の要素に ifdef / ifndef / elsif / else 属性が付与され、境界が曖昧になる場合に報告されます。

member_access_on_array

このエラーは、配列に対して直接メンバーアクセスを行った場合に報告されます。先に配列をインデックスしてください。

mismatch_attribute_args

このエラーは、属性に渡された引数が期待される形式と一致しない場合に報告されます。属性が期待するシグネチャに合うよう引数を調整してください。

mismatch_clock_domain

このエラーは、明示的な unsafe (cdc) ブロックなしに信号がクロックドメイン境界を越えて使われた場合に報告されます。

mismatch_function_arity

このエラーは、関数呼び出し時の引数の個数が関数の宣言と一致しない場合に報告されます。

mismatch_generics_arity

このエラーは、呼び出し時のジェネリック引数の個数が宣言と一致しない場合に報告されます。

mismatch_type

このエラーは、ある値が別の型を要求する位置で使われた場合に報告されます。代入の型不一致や、関数引数の型不一致などが含まれます。

missing_clock_domain

このエラーは、モジュールが複数のクロックを持つのに、ポートにクロックドメインアノテーションが付いていない場合に報告されます。アノテーションを追加してください。

missing_clock_signal

このエラーは、囲っているモジュールにクロック信号が無いまま always_ff ブロックが使われた場合に報告されます。clock ポートを追加してください。

missing_default_argument

このエラーは、デフォルト値を持つジェネリックパラメータの後に続くパラメータがデフォルト値を持たない場合に報告されます。デフォルトパラメータはリストの末尾に置く必要があります。

missing_if_reset

このエラーは、always_ff ブロックがリセット信号を持つにもかかわらず if_reset 文が無い場合に報告されます。リセット動作を記述する if_reset ブロックを追加してください。

missing_reset_signal

このエラーは、always_ff ブロックで if_reset を使用しているにもかかわらず、囲っているモジュールにリセット信号が無い場合に報告されます。reset ポートを追加するか、リセット信号を接続してください。

missing_tb_port

このエラーは、$tb::* のテストベンチコンポーネントが必要なポート(例:$tb::reset_genclk ポート)を接続せずにインスタンス化された場合に報告されます。インスタンス化時に必要なポート接続を追加してください。

missing_tri

このエラーは、inout ポートが tri 型修飾子なしで宣言された場合に報告されます。tri 修飾子を追加してください。

mixed_function_argument

このエラーは、同じ関数呼び出しの中で位置引数と名前付き引数が混在している場合に報告されます。どちらか一方に統一してください。

multiple_assignment

このエラーは、単一の信号が複数のプロシージャルブロックや assign 文から代入される場合に報告されます。各信号は単一の駆動元から駆動してください。

multiple_default

このエラーは、同じモジュール内でデフォルトのクロックまたはリセットが複数回指定された場合に報告されます。

non_constant_select_width

このエラーは、+: / -: / step の部分選択の幅が定数でない場合に報告されます。幅には定数式を使ってください。

non_positive_value

このエラーは、正の型(p8 / p16 / p32 / p64)にゼロ以下の値を代入した場合に報告されます。0 より大きい値を使用してください。

private_member

このエラーは、private として宣言されたメンバーが、その宣言スコープの外からアクセスされた場合に報告されます。

private_namespace

このエラーは、private として宣言された名前空間が、その宣言スコープの外から参照された場合に報告されます。

referring_before_definition

このエラーは、前方宣言が必要な位置で識別子が宣言前に使われた場合に報告されます。定義を参照位置より前に移動してください。

reserved_identifier

このエラーは、予約された __ 接頭辞を持つ識別子が使われた場合に報告されます。別の名前を選んでください。

sv_keyword_usage

このエラーは、SystemVerilog のキーワードが Veryl の識別子として使われた場合に報告されます。生成された SystemVerilog で衝突しないようにリネームしてください。

sv_with_implicit_reset

このエラーは、同期性と極性が暗黙の reset 型ポートが SystemVerilog モジュールのポートに接続された場合に報告されます。reset_async_lowreset_sync_high のような明示的な型を使用してください。

too_large_enum_variant

このエラーは、enum バリアントに与えられた明示的な値が enum のビット幅で表現できない場合に報告されます。値を小さくするか、enum のビット幅を広げてください。

too_large_number

このエラーは、数値リテラルが指定されたビット幅で表現可能な最大値を超えている場合に報告されます。ビット幅を広げるか、値を小さくしてください。

too_much_enum_variant

このエラーは、enum のバリアント数がそのビット幅で符号化可能な数を超える場合に報告されます。enum のビット幅を広げるか、バリアント数を減らしてください。

type_inference_conflict

このエラーは、型を持たない var への複数の代入で推論される型が一致しない場合に報告されます。型を持たない変数へのすべての代入で型が一致する必要があるか、または明示的な型を付けて変数を宣言する必要があります。

type_inference_not_supported

このエラーは、型を持たない let または const 宣言の右辺式が型推論をサポートしていない場合に報告されます。演算子を含む式、ビット幅なしリテラル、連結、if / case 式は推論できません。明示的な型注釈を付けることでこのエラーを解消できます。

unassignable_output

このエラーは、読み取り専用などで代入できない式が出力ポートに接続された場合に報告されます。

undefined_identifier

このエラーは、宣言される前の識別子を参照した場合に報告されます。識別子を宣言するか、綴りを修正してください。

unevaluatable_value

このエラーは、エラボレーション時に解決できない値が、定数を必要とする位置(配列サイズなど)で使われた場合に報告されます。

unexpandable_modport

このエラーは、modport 参照を個別のポート群に展開できない場合に報告されます。

unknown_attribute

このエラーは、属性名がコンパイラに認識されない場合に報告されます。属性を削除するか、属性名を修正してください。

unknown_embed_lang

このエラーは、embed 宣言で未サポートの言語識別子が使われた場合に報告されます。

unknown_embed_way

このエラーは、embed 宣言で未サポートの way 識別子が使われた場合に報告されます。

unknown_include_way

このエラーは、include 宣言で未サポートの way 識別子が使われた場合に報告されます。

unknown_member

このエラーは、struct、union、interface が宣言していないメンバーへのアクセスが行われた場合に報告されます。メンバー名を修正してください。

unknown_msb

このエラーは、msb が参照するビット幅をコンパイラが解決できない場合に報告されます。代わりに具体的なインデックスを指定してください。

unknown_param

このエラーは、モジュールが宣言していないパラメータをインスタンス化時に上書きしようとした場合に報告されます。上書きを削除するか、パラメータ名を修正してください。

unknown_port

このエラーは、モジュールが宣言していないポート名で接続が指定された場合に報告されます。接続を削除するか、ポート名を修正してください。

unknown_tb_port

このエラーは、$tb::* のテストベンチコンポーネントに存在しないポート名で接続が指定された場合に報告されます。未知の接続を削除するか、ポート名を修正してください。

unknown_unsafe

このエラーは、unsafe(...) ブロックで有効な unsafe カテゴリでない識別子が使われた場合に報告されます。

unresolvable_generic_expression

このエラーは、ジェネリック定義位置からジェネリックパラメータ中の式を解決できない場合に報告されます。

wrong_seperator

このエラーは、識別子間で誤った区切り文字(::.)が使われた場合に報告されます。正しい区切り文字に置き換えてください。

zero_width_number

このエラーは、数値の幅が0として宣言された場合に報告されます。

警告

invalid_identifier

この警告は、識別子が設定された命名規則(Lint を参照)に違反している場合に報告されます。規則に従うように識別子をリネームしてください。

invalid_logical_operand

この警告は、複数ビット値が論理演算子のオペランドとして使われた場合に報告されます。== などで 1 ビットに縮約してください。

invalid_select

この警告は、ビット選択や範囲選択が無効(範囲外など)な場合に報告されます。

mismatch_assignment

この警告は、代入の元と先の型が一致しない場合に報告されます。

mismatch_function_arg

この警告は、引数の型が関数のパラメータ型と一致しない場合に報告されます。

missing_port

この警告は、モジュールが宣言されたポートのいずれかを接続せずにインスタンス化された場合に報告されます。不足しているポート接続を追加してください。

missing_reset_statement

この警告は、if_reset を伴う always_ff ブロック内で宣言されたレジスタに if_reset 分岐内での代入が無い場合に報告されます。リセット値を定義するため、そのレジスタへの代入を追加してください。

mixed_struct_union_member

この警告は、struct または union 内で 2-state メンバーと 4-state メンバーが混在している場合に報告されます。メンバーをいずれか一方に統一してください。

unassign_variable

この警告は、宣言された変数に一度も値が代入されない場合に報告されます。

uncovered_branch

この警告は、信号が一部の分岐でしか代入されず、ラッチが推論される場合に報告されます。デフォルトの代入を加えるか、すべての分岐で代入してください。

unenclosed_inner_if_expression

この警告は、入れ子になった if 式が括弧で囲まれていない場合に報告されます。優先順位を明示するため括弧を追加してください。

unsigned_arith_shift

この警告は、符号なしオペランドに算術シフトを適用した場合に報告されます。論理シフトと結果が同じになるため、意図を明確にするには論理シフトを使用してください。

unused_return

この警告は、関数呼び出しの戻り値が破棄された場合に報告されます。結果を変数に代入するか、戻り値を無視する設計の関数を使用してください。

unused_variable

この警告は、宣言された変数が一度も参照されない場合に報告されます。意図的に未使用であることを示すには変数名の先頭に _ を付けるか、宣言を削除してください。