Main Content

基本的なコーディング方法

HDL Coder™ は以下の命名規則および基本的なコーディング ガイドラインに従い、これらのルールに違反するモデル構造をチェックします。HDL Coder は、HDL コーディング標準レポートに、ルール違反の可能性がある箇所をレポートします。違反を防ぐには、ルールの推奨事項を参照してください。

1.A 一般的な命名規則

1.A.A 設計と最上位レベルの命名規則

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

Verilog/SystemVerilog: ファイル名は、"<モジュール名>.v" または "<モジュール名>.sv" とする。

既定では、HDL Coder は同じモジュール名およびファイル名をもつコードを生成します。サブシステムに [BlackBox] アーキテクチャを使用してコードを生成した場合、ソース名およびファイル名が相違することがあります。

サブシステムに [BlackBox] アーキテクチャを使用している場合、ソース ファイル名とモジュール名が同じであることを確認してください。

VHDL: ファイル名は、"<エンティティ名>.vhd" とする。

ソース ファイル名は、一定の推奨命名規則およびファイル拡張子を使用しなければなりません。

HDL ワークフロー アドバイザーの [VHDL ファイルの拡張子] オプションを使用するか、コマンド ラインから VHDLFileExtension プロパティを使用します。

1.A.A.2
メッセージ
Verilog/VHDL/SystemVerilog: 使用文字は英数字と '_'、最初の文字は英字のみ // で囲んだエスケープ文字を使用しない。

設計内の名前が文字以外で始まるか、数字、文字またはアンダースコア以外の文字が含まれている。

設計内の名前がアルファベットの文字 (a-zA-Z) で始まり、英数文字 (a-zA-Z0-9) とアンダースコア (_) のみを含むように更新します。

1.A.A.3
メッセージ
Verilog/VHDL/SystemVerilog: Verilog(IEEE1364) のキーワード、SystemVerilog(v3.1a)、VHDL(IEEE1076.X) のキーワードは使用しない。

設計内の名前に Verilog®、SystemVerilog または VHDL® のキーワードがある。

設計を更新し、Verilog、SystemVerilog または VHDL のキーワードが含まれないようにします。

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

1.A.A.3vb
メッセージ
VHDL: VHDL の標準の名前は使用しない。

HDL Coder は、標準の VHDL 名は使用しません。

対処不要です。

1.A.A.4
エラー

Verilog/VHDL/SystemVerilog: "VDD"、"VSS"、"VCC"、"GND"、"VREF" で始まる名前は、使用しない (大小文字とも)。

設計内の 1 つ以上の名前が標準の命名規則を使用していません。

設計内の名前がアルファベットの文字 (a-zA-Z) で始まり、英数文字 (a-zA-Z0-9) とアンダースコア (_) のみを含むように更新します。

1.A.A.5
エラー

Verilog/VHDL/SystemVerilog: 英字の大文字/小文字で名称を区別しない (Abc、abc など)。

設計の同じ範囲内に、 大文字小文字の違いを除いて同一の名前が 2 つ以上ある。

たとえば、fooFoo を同じ範囲に含めることはできません。

同じ範囲内の 2 つの名前で大文字と小文字のみが異なることのないように、設計内の名前を更新します。

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

1.A.A.6
警告

Verilog/SystemVerilog: 最上位のポート名、モジュール名は、推奨されている命名規則に従う。

HDL Coder は、Verilog、SystemVerilog、および VHDL について、本ルールに準拠したコードを生成します。

対処不要です。

VHDL: エンティティ名とコンポーネント名は同一。

1.A.A.9
警告
Verilog/VHDL/SystemVerilog: 最上位のモジュール名、ポート名は 16 文字以内で大文字/小文字を混在させない。

生成されたコード内の最上位モジュール、エンティティまたは端子の名前が 16 文字を超えているか、大文字小文字が混在している。

設計内の指摘された名前を 16 文字以下ですべての文字が小文字のみになるように更新します。すべての文字は、大文字のみまたは小文字のみでなければなりません。

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

1.A.B モジュールの命名規則

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

Verilog/SystemVerilog: モジュール名、インスタンス名は 2 文字以上、32 文字以下とする。16 文字以下を推奨する。階層を含んだインスタンス名は 128 文字以内とする。

生成されたコード内のモジュール、インスタンスまたはエンティティの名前が 2 文字に満たないか、32 文字を超えている。

設計内の指摘された名前を 2 文字以上 32 文字以下になるように更新します。

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

VHDL: エンティティ名、インスタンス名は 2 文字以上、32 文字以下とする。16 文字以下を推奨する。階層を含んだインスタンス名は 128 文字以内とする。

1.A.C 信号の命名規則

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

Verilog/SystemVerilog: 信号名、端子名、パラメーター名、define 名およびファンクション名は、2 文字以上、40 文字以下とする。

生成されたコード内の信号、端子、パラメーター、定義または関数の名前が 2 文字に満たないか、40 文字を超えている。

設計内の関数名またはサブシステム名を 2 文字以上 40 文字以下になるように更新します。

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

VHDL: 信号名、変数名、タイプ名、ラベル名、ファンクション名は、2 文字以上、40 文字以下とする。24 文字以下を推奨する。

1.A.D ファイル、パッケージ、パラメーターの命名規則

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

Verilog/SystemVerilog: include ファイルは、RTL 記述に対しては ".h"、".vh"、".inc"、テストベンチに対しては ".h"、".inc"、".ht"、".tsk" とする。

生成された include ファイルでは、これらの拡張子はテストベンチと一致しています。

対処不要です。

VHDL: パッケージ ファイルは、"<名称>"+"PAC.vhd"。

既定では、生成されたパッケージ ファイルの接尾辞は _pkg です。

[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成][グローバル設定][一般] ペインで、[パッケージの接尾辞][_pac] に指定します。

1.A.D.4
警告

Verilog/SystemVerilog: define は、同一モジュール内で宣言されたもののみを使用する。

HDL Coder は Verilog コードまたは SystemVerilog コード内でマクロを生成しません。また、VHDL コード内の定数を再定義しません。

対処不要です。

VHDL: constant を二重定義しない。

1.A.D.9
警告

Verilog/SystemVerilog: 32 ビットを超えるパラメーターには、ビット幅を指定する必要がある。

HDL Coder は、生成コード内に 32 ビットより大きいビット幅を指定しません。

対処不要です。

VHDL: generic は、最上位階層では使用しない。

最上位モジュールでジェネリックが使用されている場合、または、設計内にマスク パラメーターが含まれており MaskParameterAsGeneric プロパティが設定されている場合、HDL Coder はこの違反をレポートします。

設計内にマスク パラメーターが含まれている場合は、MaskParameterAsGeneric[off] に設定します。

1.A.E レジスタとクロックの命名規則

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

Verilog/VHDL/SystemVerilog: クロック信号名は CLK または CK、リセット信号は RST_X または RESET_X、イネーブル信号は EN を基本とし、末尾に種別を付加する。

クロック信号、リセット信号、およびイネーブル信号が推奨される命名規則を使用していません。

[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成][グローバル設定] ペインで、[クロックの入力端子][リセットの入力端子][クロック イネーブルの入力端子] オプションを使用して、クロック信号、リセット信号、およびイネーブル信号の名前をそれぞれ更新します。次の命名規則に従います。

  • クロック信号の名前は clk または ck でなければなりません。

  • クロック イネーブル信号の名前は en でなければなりません。

  • 'アクティブ High' のリセットの場合、リセット信号の名前は rst または reset でなければなりません。

  • 'アクティブ Low' のリセットの場合、リセット信号の名前は rstresetrst_nreset_nrst_x、または reset_x でなければなりません。

1.A.F アーキテクチャの命名規則

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

VHDL: RTL 記述のアーキテクチャ名は "RTL" と命名。

生成された VHDL コードのアーキテクチャ名に RTL が含まれていません。

[HDL コード生成][グローバル設定][一般] タブで、RTL を含むアーキテクチャ名を使用するよう [VHDL アーキテクチャ名] を更新します。

1.A.F.4
警告

VHDL: エンティティ記述と RTL のアーキテクチャ記述は同一ファイルで行う。

既定で、HDL Coder はエンティティ記述と VHDL コードのアーキテクチャ記述を同一ファイルで行います。

SplitEntityArch プロパティを [on] に設定して生成した VHDL コードでは、エンティティとアーキテクチャが別ファイルに記述されるため、HDL Coder は警告をレポートします。

HDL Coder がエンティティ記述と VHDL コードのアーキテクチャ記述を同一ファイルで行うよう、SplitEntityArch を [off] に設定します。

1.B クロックおよびリセットの一般的なガイドライン

1.B.A クロック制約

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

VHDL: 単一クロック、単一エッジで設計する。

設計に 1 より多いクロック エッジが使用されているか、1 より多いクロック信号が含まれています。

[ClockInputs] プロパティが [multiple] に設定されている場合、または、TriggerAsClock を使用して Triggered Subsystem のトリガー信号をクロックとして使用している場合、HDL Coder はこのメッセージを生成します。

単一のクロック信号を使用するよう、設計を変更します。[HDL コード生成][グローバル設定] パネルで、[クロックの入力][単一] に設定し、[クロック エッジ][立ち上がり] または [立ち下がり] に設定します。

1.B.A.2
エラー

Verilog/VHDL/SystemVerilog: AND、OR などのプリミティブ セルで RS ラッチ、FF を作成しない。

HDL Coder はラッチを作成しないため、このルールに準拠しています。

対処不要です。

1.B.A.3
エラー

Verilog/VHDL/SystemVerilog: 組み合わせ回路のフィードバックは使用しない。

HDL Coder は、組み合わせ回路のフィードバックは使用しません。

対処不要です。

1.C 初期リセットのガイドライン

1.C.A フリップフロップのクロック制約

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

Verilog/VHDL/SystemVerilog: 初期リセット以外では、非同期セット/リセット端子を使用しない。

HDL Coder は、非同期リセット信号を非リセット信号または同期リセット信号として使用しません。

対処不要です。

1.C.A.6
エラー

Verilog/VHDL/SystemVerilog: 同一リセット ラインで非同期リセットと同期リセットを混在させない。

HDL Coder は DUT の外にリセット制御ロジックを追加します。そのため、非同期リセット信号と同期リセット信号の両方は生成しません。

対処不要です。

1.C.A.7
警告

Verilog/VHDL/SystemVerilog: 非同期セット、非同期リセット、両方付きの FF は使用しない。

HDL Coder は、非同期セット信号と非同期リセット信号の両方をもつコードを生成しません。

対処不要です。

1.C.B リセット規則

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

Verilog/VHDL/SystemVerilog: リセット ラインには、ローカルな階層で論理素子 (AND、OR、XOR) を挿入せず、リセットを供給する回路は別モジュールに分離する。合成によって論理の順序が入れ替わる。RTL 記述ではハザードを防止できない。

HDL Coder は、非同期セット信号または非同期リセット信号をゲート構成しません。

対処不要です。

1.C.B.1b
メッセージ

Verilog/VHDL/SystemVerilog: リセットは、最上位レベルでインスタンス化された別モジュールで生成する。

DUT にはリセットのインスタンス化が含まれないため、生成されたコードはこのルールに準拠しています。

対処不要です。

1.C.B.2
警告

Verilog/VHDL/SystemVerilog: 初期リセット以外の信号を、FF の非同期リセット端子に入力しない。

HDL Coder は、フリップフロップの非同期リセット入力に初期リセット信号のみを使用します。

対処不要です。

1.D クロックのガイドライン

1.D.A クロック パッケージング制約

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

Verilog/VHDL/SystemVerilog: クロックを供給する回路は別モジュール化する。

DUT にはクロックのインスタンス化が含まれないため、HDL Coder が生成するコードはこのルールに準拠しています。

対処不要です。

1.D.C クロック ゲーティング制約

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

Verilog/VHDL/SystemVerilog: フリップフロップの出力を他のフリップフロップのクロックとして使用したり、フリップフロップのクロック信号をクロック端子以外には供給しない。

HDL Coder は、フリップフロップの出力を他のフリップフロップのクロックとして使用しません。また、フリップフロップ クロック信号を非クロック信号として使用しません。

対処不要です。

1.D.C.6
メッセージ

Verilog/VHDL/SystemVerilog: 反転エッジの FF を使用しない。

Simulink® モデルに、立ち上がりトリガーと立ち下がりトリガーをもつ Triggered Subsystem ブロックが使用されており、TriggerAsClock が有効な場合、HDL Coder はこのルールに違反します。

TriggerAsClock を無効にするか、Simulink モデル内で、立ち上がりトリガーと立ち下がりトリガーの両方をもつ Triggered Subsystem ブロックの使用をやめます。

1.D.D クロック階層制約

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

Verilog/SystemVerilog: 1 つの階層レベルは単一のクロックのみをもつ。

Simulink モデルが複数のクロック信号を使用しています。

単一のクロック信号を使用するよう、設計を変更します。[HDL コード生成][グローバル設定] パネルで、[クロックの入力][単一] に設定します。

1.F 階層設計のガイドライン

1.F.A 基本ブロック サイズのガイドライン

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

Verilog/VHDL/SystemVerilog: 最上位階層には以下のもの以外は配置しない。クロック生成エンティティ、リセット生成エンティティ、RAM、ROM、I/O セル、RTL 記述 TOP 階層。

HDL Coder は、DUT、RAM、タイミング コントローラーに別のモジュールを生成するため、このルールに準拠しています。

対処不要です。

参考

プロパティ

関連する例

詳細