Main Content

importhdl

Verilog コードのインポートと Simulink モデルの生成

説明

importhdl は、指定した Verilog® ファイルをインポートして解析し、対応する Simulink® モデルを生成します。

importhdl(FileNames) は指定した Verilog ファイルをインポートし、対応する Simulink モデルを生成するとともに、出力に直接影響しない未接続のコンポーネントを削除します。

importhdl(FileNames,Name,Value) は指定した Verilog ファイルをインポートし、1 つ以上の名前と値のペアの引数として指定したオプションを使用して対応する Simulink モデルを生成するとともに、出力に直接影響しない未接続のコンポーネントを削除します。

すべて折りたたむ

この例では、Verilog コードを含む 1 つのファイルをインポートして対応する Simulink™ モデルを生成する方法を示します。

入力 Verilog ファイルの指定

入力 HDL ファイルが構文エラーを含んでおらず、合成可能であり、HDL インポートでサポートされている構造を使用していることを確認します。この例は、比較器の Verilog コードを示します。

edit('comparator.v')

Verilog ファイルのインポート

HDL ファイルをインポートして Simulink™ モデルを生成するには、ファイル名を文字ベクトルとして関数 importhdl に渡します。

importhdl('comparator.v')
### Parsing <a href="matlab:edit('comparator.v')">comparator.v</a>. 
### Top Module of the source: 'comparator'. 
### Identified ClkName::clk. 
### Identified RstName::rst. 
### Hdl Import parsing done. 
### Creating Target model comparator
### Generating Dot Layout...
### Start Layout...
### Working on hierarchy at ---> 'comparator'.
### Laying out components.
### Working on hierarchy at ---> 'comparator/comparator'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Setting the model parameters.
### Generated model as C:\Temp\examples\examples\hdlcoder-ex77699673\hdlimport\comparator\comparator.slx.
### HDL Import completed.

HDL インポートは、入力ファイルを解析し、MATLAB™ コマンド ウィンドウにインポート処理のメッセージを表示します。インポートすると、生成された Simulink™ モデル comparator.slx へのリンクが示されます。生成されたモデルは、入力 Verilog ファイル内の最上位モジュールと同じ名前を使用します。

生成された Simulink™ モデルの確認

生成された Simulink™ モデルを開くには、リンクを選択します。このモデルは、現在のフォルダーに対して相対的なパス hdlimport/comparator に保存されます。モデルをシミュレートしてシミュレーション結果を確認できます。

addpath('hdlimport/comparator')
open_system('comparator.slx')
sim('comparator.slx')

この例では、Verilog コードを含む複数のファイルをインポートして対応する Simulink™ モデルを生成する方法を示します。

入力 Verilog ファイルの指定

入力 HDL ファイルが構文エラーを含んでおらず、合成可能であり、HDL インポートでサポートされている構造を使用していることを確認します。たとえば、次のコードは、モジュールのインスタンス化を使用して階層設計を形成する 3 つの Verilog ファイルを示しています。モジュール example1.v は、if-else 条件に基づく単純な順序回路を実装します。もう一方のモジュール example2.v は、単純な組み合わせ演算式を実装します。

edit('example1.v')
edit('example2.v')

ファイル example.v に含まれる最上位モジュールは、example1.v および example2.v 内の 2 つのモジュールをインスタンス化します。

edit('example.v')

Verilog ファイルのインポート

HDL ファイルをインポートして Simulink™ モデルを生成するには、ファイル名を文字ベクトルの cell 配列として関数 importhdl に渡します。既定では、HDL インポートは入力ファイルを解析する際、最上位モジュールとクロック バンドルを識別します。

importhdl({'example.v','example1.v','example2.v'})
### Parsing <a href="matlab:edit('example.v')">example.v</a>. 
### Parsing <a href="matlab:edit('example1.v')">example1.v</a>. 
### Parsing <a href="matlab:edit('example2.v')">example2.v</a>. 
### Top Module of the source: 'example'. 
### Identified ClkName::clk. 
### Hdl Import parsing done. 
### Creating Target model example
### Generating Dot Layout...
### Start Layout...
### Working on hierarchy at ---> 'example'.
### Laying out components.
### Working on hierarchy at ---> 'example/example'.
### Laying out components.
### Working on hierarchy at ---> 'example/example/example1'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Working on hierarchy at ---> 'example/example/example2'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Setting the model parameters.
### Generated model as C:\Temp\examples\examples\hdlcoder-ex56732899\hdlimport\example\example.slx.
### HDL Import completed.

HDL インポートは、入力ファイルを解析し、MATLAB™ コマンド ウィンドウにインポート処理のメッセージを表示します。インポートすると、生成された Simulink™ モデル example.slx へのリンクが示されます。生成されたモデルは、入力 Verilog ファイル example1.v に含まれる最上位モジュールと同じ名前を使用します。

生成された Simulink™ モデルの確認

生成された Simulink™ モデルを開くには、リンクを選択します。このモデルは、現在のフォルダーに対して相対的なパス hdlimport/example に保存されます。モデルをシミュレートしてシミュレーション結果を確認できます。

addpath('hdlimport/example')
open_system('example.slx')

ゼロ除算を避けるため、シミュレーション前に警告診断を非表示にすることができます。

Simulink.suppressDiagnostic({'example/example/example2/Div'}, ...
                                'SimulinkFixedPoint:util:fxpDivisionByZero')
sim('example')

モジュールのインスタンス化を使用する Verilog コードを実装するサブシステムの階層を表示できます。

open_system('example/example/example1')

open_system('example/example/example2')

この例では、Verilog コードを含む複数のファイルをインポートして対応する Simulink™ モデルを生成する方法を示します。複数のファイルをインポートする際、HDL コードを難読化する必要がある場合やファイルにベンダー固有 IP の HDL コードが含まれている場合、関数 importhdl を使用して HDL コードを BlackBox モジュールとしてインポートできます。

入力 Verilog ファイルの指定

入力 HDL ファイルが構文エラーを含んでおらず、合成可能であり、HDL インポートでサポートされている構造を使用していることを確認します。たとえば、次のコードは、モジュールのインスタンス化を使用して階層設計を形成する 3 つの Verilog ファイルを示しています。モジュール sequentialexp.v は、if-else 条件に基づく単純な順序回路を実装します。もう一方のモジュール comditionalcomb.v は、単純な組み合わせ演算式を実装します。

edit('conditionalcomb.v')
edit('sequentialexp.v')
edit('intelip.v')

sequentialexp.v モジュールが、単精度浮動小数点加算器を実装する Intel® IP をインスタンス化することを確認します。

ファイル blackboxtop.v に含まれる最上位モジュール top は、conditionalcomb.v および sequentialexp.v 内の 2 つのモジュールをインスタンス化します。

edit('blackboxtop.v')

Verilog ファイルのインポート

HDL ファイルをインポートして Simulink™ モデルを生成するには、ファイル名を文字ベクトルの cell 配列として関数 importhdl に渡します。既定では、HDL インポートは入力ファイルを解析する際、最上位モジュールとクロック バンドルを識別します。

importhdl({'blackboxtop.v','conditionalcomb.v','sequentialexp.v','intelip.v'}, ...
                            'topModule','top','blackBoxModule','intelip')
### Parsing <a href="matlab:edit('blackboxtop.v')">blackboxtop.v</a>. 
### Parsing <a href="matlab:edit('conditionalcomb.v')">conditionalcomb.v</a>. 
### Parsing <a href="matlab:edit('sequentialexp.v')">sequentialexp.v</a>. 
### Parsing <a href="matlab:edit('intelip.v')">intelip.v</a>. 
### Top Module of the source: 'top'. 
### Identified ClkName::clk. 
### Hdl Import parsing done. 
### Creating Target model top
### Generating Dot Layout...
### Start Layout...
### Working on hierarchy at ---> 'top'.
### Laying out components.
### Working on hierarchy at ---> 'top/top'.
### Laying out components.
### Working on hierarchy at ---> 'top/top/u_comb'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Working on hierarchy at ---> 'top/top/u_seq'.
### Laying out components.
### Working on hierarchy at ---> 'top/top/u_seq/u_intelip'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Setting the model parameters.
### Generated model as C:\Temp\examples\examples\hdlcoder-ex63017378\hdlimport\top\top.slx.
### HDL Import completed.

HDL インポートは、入力ファイルを解析し、MATLAB™ コマンド ウィンドウにインポート処理のメッセージを表示します。インポートすると、生成された Simulink™ モデル top.slx へのリンクが示されます。生成されたモデルは、入力 Verilog ファイル conditionalcomb.v に含まれる最上位モジュールと同じ名前を使用します。

生成された Simulink™ モデルの確認

生成された Simulink™ モデルを開くには、リンクを選択します。このモデルは、現在のフォルダーに対して相対的なパス hdlimport/top に保存されます。モデルをシミュレートしてシミュレーション結果を確認できます。

addpath('hdlimport/top')
open_system('top.slx')
set_param('top','SimulationCommand','update')

ゼロ除算を避けるため、シミュレーション前に警告診断を非表示にすることができます。

Simulink.suppressDiagnostic({'top/top/u_seq/Div'}, ...
                                'SimulinkFixedPoint:util:fxpDivisionByZero')
sim('top')

モジュールのインスタンス化を使用する Verilog コードを実装するサブシステムの階層を表示できます。

open_system('top/top/u_comb')

順序回路を実装するサブシステムを開くと、u_intelip サブシステムを開いて BlackBox 実装を表示できます。

open_system('top/top/u_seq')

open_system('top/top/u_seq/u_intelip')

この例では、以下の演算子を含む Verilog コードをインポートして、対応する Simulink™ モデルを生成する方法を示します。

  • 算術

  • 論理

  • XOR

  • ビット

  • 条件

  • 関係

  • 連結

入力 Verilog ファイルの指定

入力 HDL ファイルが構文エラーを含んでおらず、合成可能であり、さまざまな演算子の構造を使用していることを確認します。たとえば、次の Verilog コードはさまざまな演算子を示しています。

edit('VerilogOperators.v')

Verilog ファイルのインポート

HDL ファイルをインポートして Simulink™ モデルを生成するには、ファイル名を文字ベクトルとして関数 importhdl に渡します。

importhdl('VerilogOperators.v')
### Parsing <a href="matlab:edit('VerilogOperators.v')">VerilogOperators.v</a>. 
### Top Module of the source: 'VerilogOperators'. 
### Hdl Import parsing done. 
### Creating Target model VerilogOperators
### Generating Dot Layout...
### Start Layout...
### Working on hierarchy at ---> 'VerilogOperators'.
### Laying out components.
### Working on hierarchy at ---> 'VerilogOperators/VerilogOperators'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Generated model as C:\Temp\examples\examples\hdlcoder-ex29847655\hdlimport\VerilogOperators\VerilogOperators.slx.
### HDL Import completed.

HDL インポートは、入力ファイルを解析し、MATLAB™ コマンド ウィンドウにインポート処理のメッセージを表示します。インポートすると、生成された Simulink™ モデル VerilogOperators.slx へのリンクが示されます。生成されたモデルは、入力 Verilog ファイル内の最上位モジュールと同じ名前を使用します。

生成された Simulink™ モデルの確認

生成された Simulink™ モデルを開くには、リンクを選択します。このモデルは、現在のフォルダーに対して相対的なパス hdlimport/VerilogOperators に保存されます。モデルをシミュレートしてシミュレーション結果を確認できます。

addpath('hdlimport/VerilogOperators')
open_system('VerilogOperators.slx')
sim('VerilogOperators.slx')

この例では、暗黙的なデータ型変換を実行する Verilog コードを含む複数のファイルをインポートして、対応する Simulink™ モデルを生成する方法を示します。HDL インポートは、算術演算、データ型の変換、ビットの選択、ビットの連結などに含まれる暗黙的なデータ型変換を実行できます。

入力 Verilog ファイルの指定

入力 HDL ファイルが構文エラーを含んでおらず、合成可能であり、HDL インポートでサポートされている構造を使用していることを確認します。たとえば、次のコードは、モジュールのインスタンス化を使用して階層設計を形成する 3 つの Verilog ファイルを示しています。モジュール NG1_implicit.v および round_const.v は、暗黙的なデータ型変換を実行します。

edit('NG1_implicit.v')
edit('round_constant.v')

ファイル example.v に含まれる最上位モジュールは、NG1_implicit.v および round_constant.v 内の 2 つのモジュールをインスタンス化します。

edit('implicit_top.v')

Verilog ファイルのインポート

HDL ファイルをインポートして Simulink™ モデルを生成するには、ファイル名を文字ベクトルの cell 配列として関数 importhdl に渡します。既定では、HDL インポートは入力ファイルを解析する際、最上位モジュールを識別します。

importhdl({'implicit_top.v','NG1_implicit.v','round_constant.v'})
### Parsing <a href="matlab:edit('implicit_top.v')">implicit_top.v</a>. 
### Parsing <a href="matlab:edit('NG1_implicit.v')">NG1_implicit.v</a>. 
### Parsing <a href="matlab:edit('round_constant.v')">round_constant.v</a>. 
### Top Module name: 'top'. 
Warning: Unused input port 'i' in 'rconst' module. 
### Hdl Import parsing done. 
### Creating Target model top
### Generating Dot Layout...
### Start Layout...
### Working on hierarchy at ---> 'top'.
### Laying out components.
### Working on hierarchy at ---> 'top/top'.
### Laying out components.
### Working on hierarchy at ---> 'top/top/NG1'.
### Laying out components.
Configurable Subsystem block 'simulink/Ports & Subsystems/Configurable Subsystem' must be converted to a Variant Subsystem block. Variant subsystems offers enhanced capabilities while maintaining equivalant functionality. Support of Configurable Subsystem will be removed in a future release.
 
### Applying Dot Layout...
### Drawing block edges...
### Working on hierarchy at ---> 'top/top/rconst'.
### Laying out components.
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Generated model file C:\TEMP\Examples\hdlcoder-ex12503110\hdlimport\top\top.slx.
### Importhdl completed.

HDL インポートは、入力ファイルを解析し、MATLAB™ コマンド ウィンドウにインポート処理のメッセージを表示します。インポートすると、生成された Simulink™ モデル implicit_top.slx へのリンクが示されます。生成されたモデルは、入力 Verilog ファイル implicit_top.v に含まれる最上位モジュールと同じ名前を使用します。

生成された Simulink™ モデルの確認

生成された Simulink™ モデルを開くには、リンクを選択します。このモデルは、現在のフォルダーに対して相対的なパス hdlimport/example に保存されます。モデルをシミュレートしてシミュレーション結果を確認できます。

addpath('hdlimport/top');
open_system('top.slx')

rconst サブシステムで、入力端子の 1 つが未接続です。Terminator ブロックを追加して未終端の出力を避けることが推奨されます。

addterms('top');
sim('top');

モジュールのインスタンス化を使用する Verilog コードを実装するサブシステムの階層を表示できます。

open_system('top/top/NG1')

open_system('top/top/rconst')

この例では、Verilog コードを含むファイルをインポートして、生成される Simulink™ モデル内の RAM ブロックを推定する方法を示します。hdl.RAM System-Object に基づくブロックやブロック RAM など、HDL RAM ライブラリに含まれるさまざまな RAM のいずれかを推定する Verilog コードをインポートできます。

入力 Verilog ファイルの指定

入力 HDL ファイルが構文エラーを含んでおらず、合成可能であり、HDL インポートでサポートされている構造を使用していることを確認します。この例は Verilog コードを示します。

edit('simple_dual_port_ram.v')

Verilog ファイルのインポート

HDL ファイルをインポートして Simulink™ モデルを生成するには、ファイル名を文字ベクトルとして関数 importhdl に渡します。

importhdl('simple_dual_port_ram.v')
### Parsing <a href="matlab:edit('simple_dual_port_ram.v')">simple_dual_port_ram.v</a>. 
### Top Module name: 'SimpleDualPortRAM'. 
### Identified ClkName::clk. 
### Hdl Import parsing done. 
### Creating Target model SimpleDualPortRAM
### Generating Dot Layout...
### Start Layout...
### Working on hierarchy at ---> 'SimpleDualPortRAM'.
### Laying out components.
### Working on hierarchy at ---> 'SimpleDualPortRAM/SimpleDualPortRAM'.
### Laying out components.
Configurable Subsystem block 'simulink/Ports & Subsystems/Configurable Subsystem' must be converted to a Variant Subsystem block. Variant subsystems offers enhanced capabilities while maintaining equivalant functionality. Support of Configurable Subsystem will be removed in a future release.
 
### Applying Dot Layout...
### Drawing block edges...
### Applying Dot Layout...
### Drawing block edges...
### Setting model parameters.
### Generated model file C:\TEMP\Examples\hdlcoder-ex67646187\hdlimport\SimpleDualPortRAM\SimpleDualPortRAM.slx.
### Importhdl completed.

HDL インポートは、入力ファイルを解析し、MATLAB™ コマンド ウィンドウにインポート処理のメッセージを表示します。インポートすると、生成された Simulink™ モデル SimpleDualPortRAM.slx へのリンクが示されます。生成されたモデルは、入力 Verilog ファイル内の最上位モジュールと同じ名前を使用します。

生成された Simulink™ モデルの確認

生成された Simulink™ モデルを開くには、リンクを選択します。このモデルは、現在のフォルダーに対して相対的なパス hdlimport/SimpleDualPortRAM に保存されます。モデルをシミュレートしてシミュレーション結果を確認できます。

addpath('hdlimport/SimpleDualPortRAM');
open_system('SimpleDualPortRAM.slx');
sim('SimpleDualPortRAM.slx');

モデルをナビゲートすると、Simple Dual Port RAM ブロックが表示されます。

open_system('SimpleDualPortRAM/SimpleDualPortRAM')

入力引数

すべて折りたたむ

Simulink モデルの生成のためにインポートする HDL ファイルの名前。既定では、importhdl は Verilog ファイルをインポートします。インポート対象に応じて次を行います。

  • 1 つの HDL ファイルの場合、ファイル名を文字ベクトルとして指定します。

  • 複数の HDL ファイルの場合、ファイル名を文字ベクトルの cell 配列として指定します。

  • 1 つのフォルダー内のすべての HDL ファイルの場合、フォルダー名を文字ベクトルとして指定します。

  • 複数のフォルダー、およびファイルとフォルダーの組み合わせの場合、文字ベクトルの cell 配列として指定します。また、再帰的フォルダーを含むサブフォルダーも使用できます。

例: importhdl('example') は指定した Verilog ファイルをインポートします。example が現在の作業フォルダーのサブフォルダーである場合、HDL インポートはサブフォルダー example とそのサブフォルダー内のモジュールのインスタンス化を解析し、すべての .v ファイルに対する Simulink モデルを生成します。importhdlexample という名前のサブフォルダーを見つけられない場合、MATLAB® パス上で example という名前の HDL ファイルを検索します。

例: importhdl({'top.v','subsystem1.v','subsystem2.v'}) は、指定された Verilog ファイルをインポートし、対応する Simulink モデルを生成します。

例: importhdl(pwd) は、現在のフォルダーにあるすべての Verilog ファイルをインポートし、対応する Simulink モデルを生成します。

例: importhdl('root/example/hdlsrc') は、指定されたパス上にあるすべての Verilog ファイルをインポートし、対応する Simulink モデルを生成します。相対パスまたは絶対パスを指定できます。

例: importhdl('subfolder') は、指定されたサブフォルダーの配下にあるすべての Verilog ファイルをインポートし、対応する Simulink モデルを生成します。既定では、importhdl は再帰的フォルダーを含むサブフォルダーを解析します。

名前と値の引数

オプションの引数ペアを Name1=Value1,...,NameN=ValueN で指定します。Name は引数名で、Value は対応する値です。名前と値の引数は他の引数より後に配置する必要がありますが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切りName を引用符で囲みます。

例: importhdl('root/example/hdlsrc') は、指定されたパスにあるすべての Verilog ファイルをインポートし、対応する Simulink モデルを生成します。相対パスまたは絶対パスを指定できます。

HDL コードを含む入力ソース ファイルの言語。文字ベクトルとして指定します。VHDL® ファイルを指定した場合、HDL インポートはエラーを生成します。

例: importhdl('fifo.v','Language','Verilog') は、Verilog ファイル fifo.v をインポートし、対応する Simulink モデル fifo.slx を生成します。

HDL コードの最上位モジュールの名前。文字ベクトルとして指定します。この名前は、生成された Simulink モデル内で最上位 Subsystem の名前になり、HDL インポートはこの下にサブシステム階層を作成します。入力 HDL ファイルに複数の最上位モジュールが含まれている場合、TopModule プロパティを使用して Simulink モデルの生成に使用する最上位モジュールを指定します。

例: importhdl('full_adder.v','TopModule','two_half_adders') は、Verilog ファイル full_adder.v をインポートし、two_half_adders を最上位サブシステムとして、対応する Simulink モデル full_adder.slx を生成します。

順序回路のクロック、リセット、クロック イネーブル信号の名前。文字ベクトルの cell 配列として指定します。クロック バンドル信号の既定の名前は次のとおりです。

  • クロック信号 - clkclock

  • リセット信号 - rstreset

  • クロック イネーブル信号 - clk_enbclk_enclk_enableenbenable

クロック バンドル情報を指定しない場合、HDL インポートは既定の値を使用します。入力ファイルの解析時に、HDL インポートが ClockBundle で指定されたクロック名と異なるクロック名を識別した場合、インポートはエラーを生成します。

例: importhdl('example.v','clockBundle',{'clk','rst','clk_enb'}) は、指定されたクロック バンドル情報をもつ Verilog ファイル example.v をインポートします。

生成された Simulink モデルに BlackBox サブシステムとしてインポートされる Verilog 入力ファイル内の 1 つ以上のモジュールの名前。BlackBox としてインポートされる Subsystem ブロックは、モジュール定義に指定した入力端子と出力端子を使用します。サブシステムの内部では、入力端子は Terminator ブロックに接続され、zero の値をもつ Constant ブロックは出力端子に接続されています。この機能を使用して、ベンダー固有の IP を BlackBox サブシステムとしてモデルにインポートします。

例: importhdl({'example.v,'example1.v','example2.v','xilinxIP.v},'topModule','top','blackBoxModule','xilinxIP') は、xilinxIP を BlackBox モジュールとして、指定した Verilog ファイルをインポートします。Simulink モデル内の対応するサブシステムでは、入力端子が Terminator ブロックに接続され、定数値 0 をもつ Constant ブロックが出力端子に接続されます。

importhdl の実行によって生成された Simulink モデル内のブロックを自動的に調整します。既定では、autoPlaceon です。importhdl は、Simulink.BlockDiagram.arrangeSystem を使用してブロックの再配置、サイズ変更、移動を行ったり、信号線をまっすぐにすることで、モデル レイアウトを改良します。

例: importhdl('example.v','autoPlace','on') は、Verilog ファイル example.v をインポートし、改良されたモデル レイアウトをもつ Simulink モデルを生成します。

制限

関数 importhdlMac プラットフォームではサポートされていません。

バージョン履歴

R2018b で導入