Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

RTL 記述テクニック

HDL Coder™ は、次の RTL 記述ルールに準拠し、モデル構造がこれらのルールに違反しないかチェックします。HDL Coder は、HDL コーディング標準レポートにルールに違反している可能性がある箇所を報告します。違反を防ぐには、ルールの推奨事項を参照してください。

2.A 組み合わせ論理のガイドライン

2.A.A 組み合わせ論理規則

ルール/重要度メッセージ問題推奨事項
2.A.A.1
リファレンス

VHDL: IEEE.std_logic_1164 を使用する。

HDL Coder では、生成された VHDL コード内の各エンティティにパッケージを含みます。

対処不要です。

2.A.A.2
警告

Verilog: ファンクション文では取り得るすべての状態に戻り値を代入する。

HDL Coder は、DUT にファンクションを生成しません。

対処不要です。

2.A.A.3
警告

Verilog: 誤りを防止するために、RTL 構文解析ツールを使用してチェックする。

HDL Coder は、VHDL コードおよび Verilog コードを正しい構文で生成し、このルールに準拠しています。

対処不要です。

2.A.B ファンクション規則

ルール/重要度メッセージ問題推奨事項
2.A.B.1
エラー

Verilog: function 文は FF 推定のalways 文内で、非同期リセット ラインの論理に使用しない。

HDL Coder は、DUT にファンクションを生成しません。

対処不要です。

VHDL: 入出力ポートは、std_logic、std_logic_vector のみを使用する。

HDL Coder は std_logic または std_logic_vector を使用して入出力端子を記述します。

対処不要です。

2.A.B.2–3
エラー

Verilog: function 文内では、ノンブロッキング代入 (<=) や入力引数を入力として使用しない。

生成された Verilog の HDL コードは、このルールに準拠します。

対処不要です。

VHDL: integer を使用する際にはレンジを指定する。

既定では、HDL Coder は生成コードで整数型の範囲を指定します。

対処不要です。

2.A.B.4
エラー

Verilog: task 文は使用しない。

HDL Coder は、Verilog コードで task 文や fork-join 構造を使用しません。

対処不要です。

VHDL: bit、bit_vector のデータ タイプは使用しない。

HDL Coder は、生成コードでビットまたはビット ベクトル データ型は使用しません。

対処不要です。

2.A.B.5
エラー

Verilog: task 文内では、クロック エッジ記述をしない。

Verilog コード生成時、HDL Coder はタスクの記述にクロック エッジを使用しません。

対処不要です。

2.A.B.6
エラー

VHDL: std_logic_vector は必ずレンジを明記する (fuction 文は除く)。

生成された VHDL コードでは std_logic_vector が使用する範囲が指定されているため、HDL Coder はこのルールに準拠しています。

対処不要です。

2.A.C ビット幅一致規則

ルール/重要度メッセージ問題推奨事項
2.A.C.1–2
エラー

Verilog: 引数のビット幅と function 文の入力宣言のビット幅を合わせる。戻り値のビット幅と代入先の信号のビット幅を合わせる。

HDL Coder は、モジュールのインスタンス化時に強制的にタイプ マッチングを行うため、このルールに準拠します。

対処不要です。

VHDL: in、out、inout のみを使用する。buffer、linkage は使用しない。

VHDL コード生成時、HDL Coder は ‘IN’、’OUT’、または ‘INOUT’ ポートを指定し、buffer や linkage は使用しません。

対処不要です。

2.A.C.3
エラー

Verilog: 複数の信号に値を戻すときには、連接を使用する。

HDL Coder はこのルールに準拠しています。

対処不要です。

VHDL: ポートの方向記述は省略しない。

HDL Coder は VHDL コード生成時、‘IN’、’OUT’、または ‘INOUT’ ポートを指定し、buffer または linkage は使用しません。

対処不要です。

2.A.C.4–5
エラー

Verilog: function 文内では、モジュール内信号に代入を行わない。function 文内の最後は、戻り値代入で終了する。

HDL Coder は、このルールに準拠した Verilog コードを生成します。

対処不要です。

VHDL: 入力ポートに初期値を代入しない。

HDL Coder は、生成した VHDL コードで、入力端子に初期値を指定しません。

対処不要です。

2.A.D 演算子規則

ルール/重要度メッセージ問題推奨事項
2.A.D.5
メッセージ

Verilog: 論理演算は、ベクトルに対して使用しない。

HDL Coder で生成された Verilog コードは、マルチビット演算子について、このルールに準拠しています。

対処不要です。

2.A.D.6
メッセージ

Verilog: 1 ビットまたは大きな式のリダクションは行わない。

既定では、HDL Coder はシングルビットや大きな式のリダクションは行いません。設計にビット リダクション演算を含む場合、生成される HDL コードが大きな式の削減を行うことがあります。

ビット リダクション演算を呼び出さないよう、設計を変更してください。

2.A.E 条件ステートメント規則

ルール/重要度メッセージ問題推奨事項
2.A.E.3
メッセージ

Verilog: if 文または (?) の条件式をベクトルにしない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.A.F 配列、ベクトル、行列の規則

ルール/重要度メッセージ問題推奨事項
2.A.F.2
警告

Verilog/VHDL: 配列の LSB は 0 にする。

設計に LSB が非ゼロ値のベクトルが含まれます。

生成コードに含まれるベクトルまたはメモリの LSB が 0 になるよう、設計を変更してください。

2.A.F.4
警告

Verilog/VHDL: 配列のインデックスの範囲は適切に指定する。

HDL Coder は、インデックス変数の幅が小さくなりすぎないよう、強制的にタイプ マッチングを行います。

対処不要です。

2.A.F.5
エラー

Verilog/VHDL: 配列のインデックスに x および z を使用しない。

HDL Coder の生成したコードでは、配列のインデックスに x や z は使用されません。

対処不要です。

2.A.G 代入規則

ルール/重要度メッセージ問題推奨事項
2.A.G.1
エラー

VHDL: 集合体は直接代入のみ

HDL Coder は、他の演算を介在させずに、集合体を生成コードに直接代入します。

対処不要です。

2.A.H ファンクションの戻り値の規則

ルール/重要度メッセージ問題推奨事項
2.A.H.1
リファレンス

VHDL: function 記述は配列の範囲をフリーで記述する。

HDL Coder の生成したコードでは、サブプログラムの記述に制約付き配列は使用されません。

対処不要です。

2.A.H.2
リファレンス

VHDL: 戻り値が配列の場合、range 指定が必要

ファンクションの記述において、戻り値の型が配列の場合、HDL Coder は生成コード内のファンクションで戻り値の範囲を指定します。

対処不要です。

2.A.H.4–6
エラー

VHDL: サブプログラム内では、集合体の指定には others のみを使用し、サブプログラムの入れ子および呼び出しを使用せず、グローバル信号を使用しない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.A.H.9–10
警告

VHDL: function 内のすべての戻り値に対する代入は取りうるすべての状態を記述する。function 文の最後は return で終了する。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.A.I 組み込み属性の規則

ルール/重要度メッセージ問題推奨事項
2.A.I.4–5
エラー

VHDL: ユーザー定義のアトリビュートは使用しない。range、length、left、right、high、low、reverse_range、event 以外の組み込みアトリビュートは使用しない。

既定では、HDL Coder は、生成コードにユーザー定義の属性を使用しません。[DSPStyle] などの HDL ブロック プロパティを設計内で設定した場合、生成コードに合成命令が使用されます。

このエラーを修正するには、設計を変更して、合成命令を生成コード上で使用するために設定した HDL ブロック プロパティを取り除きます。

2.A.J VHDL 固有の規則

ルール/重要度メッセージ問題推奨事項
2.A.J.1–6
警告

VHDL: block 文、record タイプ、共有変数、while loop 文、procedure、with -select 文を設計に使用しない。

設計にループ ステートメントが使用されている場合、HDL Coder はこの警告を生成します。

この警告を回避するには、ループ ステートメントのない設計に変更します。

2.A.J.8–13
エラー

VHDL: access タイプ、alias、bus、register、disconnect、waveform、synopsys attribute を設計に使用しない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.B 組み合わせ論理の "Always" 文のガイドライン

2.B.A ラッチ制約

ルール/重要度メッセージ問題推奨事項
2.B.A.2
リファレンス

Verilog/VHDL: RTL 構文解析ツール、論理合成ツールのワーニング メッセージに注意して、ラッチ生成の有無を確認する。

HDL Coder はラッチを作成しません。

対処不要です。

2.B.B 信号制約 - I

ルール/重要度メッセージ問題推奨事項
2.B.B.2–3
メッセージ

Verilog/VHDL: process 文や always 文のセンシティビティ リストに、定数の記述、wait 文の使用、必要のない信号の記述を行わない。

HDL Coder は、process ブロック内 (VHDL) または always ブロック内 (Verilog) におけるこれらの構造の使用規則に準拠するコードを生成します。

対処不要です。

Verilog: always 文で複数のイベント式を書かない。

HDL Coder では、always 文内で 1 つより多いイベント式を記述しません。

対処不要です。

2.B.C 信号制約 - II

ルール/重要度メッセージ問題推奨事項
2.B.C.1–2
エラー

Verilog: 組み合わせ回路の always 文や、順序回路の always 文での初期値の代入にノンブロッキング代入を使用しない。

組み合わせ回路の always 文や、順序回路の always 文での初期値の代入に、ノンブロッキング代入を使用する Verilog コードを生成する構造が設計内に使用されています。

生成される Verilog コードにこれらの構造が使われないよう、MATLAB® アルゴリズムか Stateflow® 設計を変更してください。

2.B.C.3
メッセージ

Verilog/VHDL: 順序回路の always 文では、同じ信号に上書き代入をしない。

HDL Coder は、順序回路の always 文で、同じ信号に複数回代入を行いません。

対処不要です。

2.C フリップフロップの推定のガイドライン

2.C.A 代入制約

ルール/重要度メッセージ問題推奨事項
2.C.A.1–2c
エラー

Verilog/VHDL: FF 推定に、準連続代入、deassign 文、ブロッキング代入、信号代入文、stable 属性を使用しない。

HDL Coder は、process ブロック (VHDL) または always ブロックでフリップフロップを生成する際、追加データを生成したり、これらの構造を追加したりすることはありません (Verilog)。

対処不要です。

2.C.A.4–5b
警告

Verilog/VHDL: FF を生成する process 文のみが遅延値をもつことができる。遅延値は非負の整数で指定する。

HDL Coder は、DUT に DELAY 属性をもつコードを生成しません。生成されたテストベンチには、DELAY 属性を含めることができます。

対処不要です。

2.C.A.6
エラー

Verilog/VHDL: 非同期リセット記述は、リセット信号の極性などに注意する。

HDL Coder は、生成コード内で posedge または negedge を使用して、クロック エッジでの遷移を記述します。

対処不要です。

2.C.A.7
メッセージ

Verilog/VHDL: FF は 2 つの非同期リセットをもたない。非同期リセット記述にファンクションを使用しない。

HDL Coder は、複数の非同期リセットを生成しません。生成コードは、複数の同期リセットを含むことができます。

対処不要です。

2.C.A.8
エラー

VHDL: wait 文を使用しない。

HDL Coder は、wait 文を使用しません。

対処不要です。

2.C.A.9
エラー

VHDL: 'rising_edge' および 'falling_edge' の関数を使用しない。

既定では、HDL Coder は、クロック イベントにイベント構文を使用します。

UseRisingEdge プロパティを使用すると、クロック遷移の検出に rising_edge を使用するか falling_edge を使用するかを指定できます。

このエラーを修正するには、生成コードがイベント構文を使用するよう、UseRisingEdge プロパティを編集します。

2.C.B ブロッキング ステートメント制約

ルール/重要度メッセージ問題推奨事項
2.C.B.1–2
警告

Verilog/VHDL: FF 推定でブロッキング代入文 (=) を使用する。ノンブロッキング代入文とブロッキング代入文を混在させない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.C.B.4
エラー

VHDL: variable を利用した場合には、process 文の最後で signal に代入する。

生成された HDL コードにデッド コードは含まれないため、HDL Coder はこのルールに準拠しています。

対処不要です。

2.C.C クロック制約

ルール/重要度メッセージ問題推奨事項
2.C.C.1–2b
エラー

Verilog/VHDL: 1 つの always 文内に同じクロックの 2 つ以上の異なるクロック エッジを使用しない。1 つのクロックの同じエッジについて、1 つの process/always ブロック内に複数のクロック エッジを記述しない。

HDL Coder は、クロックの立ち上がりエッジまたは立ち下がりエッジのいずれかを使用しますが、クロックの両エッジを使用することはありません。

対処不要です。

2.C.C.4–5
エラー

Verilog/VHDL: ネットワーク上のクロック イネーブル信号およびリセット信号を最小にするか可能であれば削除する。

クロック イネーブル信号やネットワーク上のリセット信号が設計に使用されている場合、HDL Coder はエラーを生成します。

生成された HDL コード内のクロック イネーブル信号を最小限に抑えるには、HDL コーディング標準のカスタマイズ プロパティで、[MinimizeClockEnableCheck] プロパティを有効にします。

ネットワーク上のリセット信号を削除するには、HDL コーディング標準のカスタマイズ プロパティで、[RemoveResetCheck] 設定を有効にします。

2.C.C.6
警告

Verilog/VHDL: 非同期リセット信号を使用しない。

Simulink® モデル設計または MATLAB コードに、非同期リセット信号が使用されています。

この違反を回避するには、同期リセット信号を設計に使用します。[コンフィギュレーション パラメーター] ダイアログ ボックスで、[リセット タイプ][同期] に設定します。

2.C.D 初期値制約

ルール/重要度メッセージ問題推奨事項
2.C.D.1
エラー

Verilog/VHDL: FF または RAM の初期値の指定に開始ステートメントを使用しない。

設計用に生成された HDL コードに合成不能な initial ステートメントが含まれている。

HDL ワークフロー アドバイザーの [ブロック RAM を初期化] または [すべての RAM ブロックを初期化] オプションを無効にします。

このルール チェックを無効にするには、HDL コーディング標準のカスタマイズ オブジェクトの InitialStatements プロパティを使用します。

2.C.F タイミングの混在制約

ルール/重要度メッセージ問題推奨事項
2.C.F.1–2a
警告

Verilog/VHDL: 同一 process/always 文内に非同期リセットありとなしの混在記述をしない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.D ラッチ記述のガイドライン

2.D.A モジュール制約

ルール/重要度メッセージ問題推奨事項
2.D.A.2–3
警告

Verilog/VHDL: 非同期セット/リセット付きラッチは使用しない。ラッチの推定は、ラッチのみの階層を作成し、その中で行う。

HDL Coder は、生成コードにラッチを作成しません。

対処不要です。

2.D.A.4–5
エラー

Verilog/VHDL: ラッチを含むフィードバック ループを使用しない。ラッチは、同相で 2 段以上使用しない。

既定では、HDL Coder は組み合わせループを生成しません。MATLAB アルゴリズムに組み合わせループが存在する場合は、生成された HDL コードで組み合わせループが使用されることがあります。

生成される HDL コードに組み合わせループが含まれないよう、MATLAB コードを変更してください。

2.E トライステート バッファーのガイドライン

2.E.A モジュール制約

ルール/重要度メッセージ問題推奨事項
2.E.A.1–2
警告

Verilog/VHDL: トライステート バッファーは階層化する。トライステートの条件式には論理を記述しない。

HDL Coder は、生成コード内にラッチまたはトライステート バッファーを作成しません。

対処不要です。

2.E.A.4–5b
リファレンス

Verilog/VHDL: トライステート バッファーの接続は 5 個までとする。トライステートではないネット、または解決ファンクションをもたない信号は複数のドライバーをもたない。

HDL Coder は、生成コード内にラッチまたはトライステート バッファーを作成しません。

対処不要です。

2.E.A.6–9
エラー

Verilog/VHDL: inout は、直接 input、output と接続しない。トライステート出力は、if 文の条件式や、others 項で固定値を代入している case 文の選択式に入力しない。

既定では、HDL Coder は、入力端子または出力端子を双方向端子に直接接続しません。

Simulink モデルで、入力端子または出力端子の HDL ブロック プロパティにおいて [BidirectionalPort][on] に設定した場合、生成された HDL コードで inout が入力端子または出力端子に直接接続されることがあります。

Simulink モデルで、入力端子または出力端子の HDL ブロック プロパティで、[BidirectionalPort][off] に設定します。

2.E.B 接続性制約

ルール/重要度メッセージ問題推奨事項
2.E.B.1
警告

Verilog/VHDL: トライステート バスは出力バッファーだけでなく、入力側のセルも階層化する。

HDL Coder で生成した HDL コードには、トライステート ネットは含まれません。

対処不要です。

2.F 回路構造を考慮した Always/Process 文のガイドライン

2.F.B 条件ステートメントの数の制約

ルール/重要度メッセージ問題推奨事項
2.F.B.1
エラー

Verilog/VHDL: 1 つの always 文内で 2 つ以上のステートメント (if、case、while、for、forever、repeat) を並べて使用しない。

process ブロック (VHDL コードの場合) または always ブロック (Verilog コードの場合) 内に個別に記述されている条件付きステートメント (if-else、case および loop) が設計用に生成された HDL コードに 1 つより多く含まれている。

process ブロックに個別に記述されている条件付きステートメントが 1 つを超えて存在しないように設計を更新します。

このルールをカスタマイズするには、HDL コーディング標準のカスタマイズ オブジェクトの ConditionalRegionCheck プロパティを使用します。

2.F.B.2
エラー

Verilog/VHDL: 同一 process/always 文内で代入される信号を、センシティビティ リストに記述しない。

HDL Coder は、クロック信号、リセット信号、イネーブル信号など、センシティビティ リスト内の変数を変更しません。

対処不要です。

2.G "if" ステートメント記述のガイドライン

2.G.B 共通部分の式の制約

ルール/重要度メッセージ問題推奨事項
2.G.B.2
警告

Verilog/VHDL: 実行されない条件を記述しない。

生成された HDL コードにデッド コードは含まれません。また、実行されない条件が生じることはありません。

対処不要です。

2.G.C ネストの深さの制約

ルール/重要度メッセージ問題推奨事項
2.G.C.1a-b
メッセージ

Verilog/VHDL: if-else 文の入れ子は N レベル数以内にする。性能が重要な場合は、適切な場所で 'if-else' 文ではなく case 文を使用する。

MATLAB コードに、入れ子レベルが N を超える if-elseif ステートメントがある。N の既定値は 3 です。

MATLAB コード内で、入れ子レベルが N 以下になるように if-elseif ステートメントを変更してください。

たとえば、次の if-elseif 疑似コードの入れ子レベルは 3 です。

if ...
   if ...
      if ...
      else
   else
else

このルールをカスタマイズするには、HDL コーディング標準のカスタマイズ オブジェクトの IfElseNesting プロパティを使用します。

2.G.C.1c
メッセージ
Verilog/VHDL: if...else if 文のチェーンは既定のレベル数以内にする。

生成された HDL コードに 7 個を超えた分岐をもつ if-elseif ステートメントが含まれている。

MATLAB コード内の if-elseif ステートメントが 7 個以下の分岐になるように変更します。

たとえば、次の if-elseif 疑似コードには 3 個の分岐が含まれます。

if ...
elseif ...
elseif ...
else

このルールをカスタマイズするには、HDL コーディング標準のカスタマイズ オブジェクトの IfElseChain プロパティを使用します。

2.G.D begin-end デコレータ制約

ルール/重要度メッセージ問題推奨事項
2.G.D.2–3
メッセージ

Verilog/VHDL: if-if のネストがある if 文は、begin-end でくくる。

生成された HDL コードは、これらのコード構造に従います。

対処不要です。

Verilog: RTL 記述では fork-join は使用しない。

2.H "case" ステートメント記述のガイドライン

2.H.A case 構造制約

ルール/重要度メッセージ問題推奨事項
2.H.A.3–5
リファレンス

Verilog/VHDL: case 文の値は重複できない。case 文の項目では、'-' を don't care として使用できない。

生成された HDL コードの case ステートメントは、これらの構造に従っており、full_case 命令は使用されません。

対処不要です。

2.H.C 既定値制約

ルール/重要度メッセージ問題推奨事項
2.H.C.3
警告

Verilog: ラッチの生成を抑制することができる。default 項を使用する、//synopsys full_case は使用しない。

HDL Coder は、case ステートメントで、取り得るすべてのケースを記述するため、合成ツールによってラッチが生成されることがありません。

対処不要です。

2.H.C.4
メッセージ

Verilog/VHDL: case default 項内でドント ケア値を代入した信号は、if 文、ternary 文および case 文で使用しない。

HDL Coder は、don't care 値を代入した信号を default 項で使用しません。

対処不要です。

2.H.C.5
警告

Verilog/VHDL: default 項は case 文の最後に記述する。

ラッチの干渉を防ぐため、HDL Coder は、default 項を含む、取り得るすべてのケースを記述します。

対処不要です。

2.H.C.6–7
メッセージ

Verilog/VHDL: ドント ケア条件を代入した信号は、casex 文の選択式や、defalut 項で 'x' にしていない case 文の選択式に使用しない。

HDL Coder は、don't care 値を使用せず、n ビット選択信号の全空間を探索します。

対処不要です。

2.H.D don't care 制約

ルール/重要度メッセージ問題推奨事項
2.H.D.1-4
メッセージ

Verilog: casex 文、casez 文の使用は避けた方がよい。casex または casez 文には、ドント ケア条件を含める必要があり、複雑な項目条件を持つことができない。casex または casez 分岐内のドント ケア条件は適切なコーディング スタイルに従わなければならない。

HDL Coder は、casex または casez 構造を生成しないため、このルールに準拠しています。

対処不要です。

2.H.E 追加の case 制約

ルール/重要度メッセージ問題推奨事項
2.H.E.1–4
メッセージ

Verilog: 特定の論理合成ツールに依存する case 文のディレクティブで、強制的に parallel_case にしない。case 文の項目には、固定値、変数、式、論理演算、算術演算ビット演算、リダクション演算を記述しない。

HDL Coder は、parallel_case 命令を使用せず、これらの構造に従ったコードを生成します。

対処不要です。

2.I "for" ステートメント記述のガイドライン

2.I.A ループ本体の制約

ルール/重要度メッセージ問題推奨事項
2.I.A.2a-b
メッセージ

Verilog: "for" 文のループ変数と終了条件は定数の初期値をもたなければならない。

HDL Coder は、casex 文または casez 文を生成しないため、このルールに準拠しています。

対処不要です。

2.I.A.2c-e
メッセージ

Verilog: "for" 文のループ変数は外部では使用されない定数の初期値をその内部にもたなければならない。

HDL Coder は、適正な loop 文を生成するため、このルールに準拠しています。

対処不要です。

Verilog: ループ終了条件は定数にしない。

2.I.B 非定数演算制約

ルール/重要度メッセージ問題推奨事項
2.I.B.4
エラー

Verilog/VHDL: for ループは、リセット部、ロジック部と分離して使用する。

HDL Coder は、フリップフロップ記述のリセット部、ロジック部とで、別々の for ループを使用します。

対処不要です。

2.I.C exit 制約

ルール/重要度メッセージ問題推奨事項
2.I.C.1
エラー

VHDL: for-loop 文内で、exit、next は使用しない。

生成コードに for ループが含まれるのは、HDL Coder が反復回数を認識している場合のみです。ループ実行中に HDL Coder が for ループから抜けることはありません。

対処不要です。

2.J 演算子記述のガイドライン

2.J.A 比較と優先順位制約

ルール/重要度メッセージ問題推奨事項
2.J.A.4a-c
メッセージ

Verilog: 信号を、X や Z、または X や Z を含む値と比較しない。

既定では、HDL Coder はこれらの構造を含むコードを生成しません。

Simulink モデル設計に、[Architecture][Logic Value] に設定されている Constant ブロックが含まれており、これらの構造が使用されている場合、このメッセージが表示されます。

[Architecture][Logic Value] に設定されているときに Constant ブロックがこれらの構造を使用しないよう、Simulink モデル設計を変更してください。または、[Architecture][Constant] に変更してください。

2.J.A.4v
エラー

Verilog/VHDL: case 文の others 項以外で 'X' を代入しない。

既定では、HDL Coder は case ステートメントの others 項で X を使用しません。場合により、生成されたコードが [2.J.A.4a-c] に準拠しない場合に、HDL Coder が others 項に X を代入することがあります。

生成された HDL コードが [2.J.A.4a-c] のルールが指定する構造を使用しないよう、Simulink モデルの設計を変更してください。

2.J.A.5–6
警告

Verilog: 'X' や 'Z' を含む値を使用しない。

設計に未知の定数または高インピーダンスな定数が含まれている場合、HDL Coder は警告を表示します。

高インピーダンスの定数を含まないよう、Simulink モデルまたは MATLAB アルゴリズムを変更してください。

VHDL: 'X'、'Z'、'U'、'_'、'W'、'H'、'L' を含む値や定数を使用しない。

2.J.A.7–8
メッセージ

Verilog: RAM の出力を、default で 'x' を代入していない case 文の選択式や if 文の条件式に使用しない。

既定では、HDL Coder は、このルールに準拠しています。Simulink モデルに Switch ブロックまたは Multiport switch ブロックをもつ RAM 出力信号が使用されている場合、生成された HDL コードにこれらの構造が使用されることがあります。

Switch ブロックまたは Multiport switch ブロックへの RAM 出力信号がなくなるよう、Simulink モデルを変更してください。

2.J.B ベクトル演算子制約

ルール/重要度メッセージ問題推奨事項
2.J.B.3
メッセージ

Verilog/VHDL: ベクトルに対して論理否定を実行しない。

HDL Coder は、ベクトルに対して論理否定を実行しません。

対処不要です。

2.J.C 関係演算子制約

ルール/重要度メッセージ問題推奨事項
2.J.C.1–6
エラー

Verilog/VHDL: 関係演算子や論理演算子の左右のオペランドのビット幅を揃える。

HDL Coder では、関係式または論理式内のオペランドのデータ型は必ず一致します。

対処不要です。

Verilog/VHDL: 条件式などで使用される定数はビット幅を指定する。

2.J.D 符号付き信号、データ型制約

ルール/重要度メッセージ問題推奨事項
2.J.D.3–5
警告

Verilog/VHDL: integer を reg、wire ヘ代入するとき、および負の値の reg と integer を比較するときは注意する。integer には負の数を代入しない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.J.D.6
警告

VHDL: 符号付き演算は符号付きデータ型を利用し、符号なしの演算は std_logic_unsigned パッケージを呼び、std_logic_vector を利用する。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.J.D.8
警告

VHDL: VHDL93 ではファンクション To_stdlogicvector は使用しない。

HDL Coder は、ファンクション To_stdlogicvector をコードに使用しません。

対処不要です。

2.J.E 演算子の反復回数の制約

ルール/重要度メッセージ問題推奨事項
2.J.E.5
警告

Verilog: assign 文の条件演算子 (?) で算術演算を使用しない。

HDL Coder はこのルールに準拠しています。

対処不要です。

2.J.F 精度制約

ルール/重要度メッセージ問題推奨事項
2.J.F.5
警告
Verilog/VHDL: 大規模乗算器は RTL 記述で推定せず、乗算器の中身を論理式で記述する。

生成された HDL コードに乗算演算子 (*) が含まれており、その乗算出力のビット幅が 16 以上である。

設計内で、シフト演算と加算演算のアルゴリズムで乗算を実装するか、乗算の出力のデータ サイズが 16 以上のビット幅を必要としないようにしてください。

このルールをカスタマイズするには、HDL コーディング標準のカスタマイズ オブジェクトの MultiplierBitWidth プロパティを使用します。

2.J.G 共通部分の式の制約

ルール/重要度メッセージ問題推奨事項
2.J.G.2
警告
Verilog/VHDL: 共通な演算式は個別に記述する。

HDL Coder は、共通の演算式を特定し、分離して記述します。

対処不要です。

2.J.H 除算演算子制約

ルール/重要度メッセージ問題推奨事項
2.J.H.1
メッセージ
Verilog/VHDL: 除算、剰余の右辺左辺は演算式、論理式を使用しない。

HDL Coder は、除算演算子を同次化して別のステートメントにするため、このルールに準拠しています。

対処不要です。

2.J.H.2–3
メッセージ
Verilog/VHDL: 除算、剰余の左辺は 12 ビット以下にする。除算、剰余の右辺は 8 ビット以下にする (2 の累乗の値は除く)。

設計に含まれる除算もしくは剰余演算の左辺が 12 ビットを超えているか、右辺 (2 のべき乗ではない) が 8 ビットを超えています。

除算または剰余演算のオペランドのビット数が、ルールで規定された範囲に収まるよう、設計を変更してください。

2.K 有限ステート マシン記述のガイドライン

2.K.A 状態遷移制約

ルール/重要度メッセージ問題推奨事項
2.K.A.4
警告
Verilog/VHDL: ステート数は 40 以内とする。

モデル設計に、ステート数が 40 より多い Stateflow Chart または State Transition Table が含まれています。

ステート数が 40 以内になるよう、モデルを変更してください。

2.K.C ロジック分離制約

ルール/重要度メッセージ問題推奨事項
2.K.C.1
リファレンス
Verilog/VHDL: FF 文と状態を定義する case 文に分離させると検証に有利。クロックによる FF 動作は単独の always 文で記述する。状態の定義は if 文と case 文を用いて別の always 文で記述する。

既定では、HDL Coder は、有限ステート マシン (FSM) の逐次部分と組み合わせ部分を別々の always ブロックに入れます。

対処不要です。

2.K.E エンコード制約

ルール/重要度メッセージ問題推奨事項
2.K.E.2
警告
VHDL: タイプ宣言で定義された状態変数に対して、attribute によるロジック値の設定は行わない。

HDL Coder は、生成コード内の状態変数に属性を付加しません。

対処不要です。

参考

プロパティ

関連する例

詳細