|
|
Verilog-HDL 階層構造とサブプログラム |
|
すでに定義したモジュールを、別のモジュール内からインスタンス化することで階層構造を構築します。下位モジュールがパラメータを持つ場合には、インスタンス化する際にパラメータ値を渡すことができます。入出力ビット幅をパラメータ化した機能モジュールを用意することで、機能モジュールを組み合わせながら設計を進めていく、 構造的な設計手法を取ることができます。
・ モジュールのインスタンス化
モジュールのポート接続には、ポート順接続とポート名接続の2種類があります。ポート順接続では、下位モジュールのポート順と等しい順にネットを指定し接続します。ポート名接続では、下位ポート名をピリオド記号の後に指定し、括弧内に上位のネット名を指定し、明示的に接続を指示します。
・ モジュール・パラメータ
#で定義した値は、下位モジュールで宣言されたパラメータの順序に従ってパラメータ値を書き換えることができます。このようなポートのビット幅を可変長にした機能モジュールを用意することで、マクロレベルの設計ができます。 サブプログラムを用いることで、記述内の異なった部分から共通の手続きを実行し、ソース記述を読みやすくすることができます。サブプログラムには、ファンクション(function)とタスク(task)があります。ファンクションは、1つ以上の入力パラメータを受け取り、1つだけの値を戻します 。ファンクションは、すべての式を遅延ゼロで評価する必要があるため、内部にタイミング制御を持つことはできません。タスクは、複数の入力、出力、入出力パラメータの受け渡しができ、内部にタイミング制御文を持つことができます。
・ ファンクション
ファンクションの戻り幅を指定しない場合には、1ビットのレジスタとなります。ファンクションでは、定義と同時に暗黙のうちにファンクション名と同一の名前を持つ内部レジスタが定義され、その内部レジスタに値を代入することで、ファンクションからの値を戻します。ファンクションには、少なくとも1つの入力パラメータが必要です。
ファンクションの実行結果は、ネットまたはレジスタに戻すことができ、式の中でオペランドとして使用できます。以下に、上記のファンクションを呼び出す例を示す。
戻り値は、タスク内で出力として宣言し、その信号に対して値を代入されます。以下にタスクの記述例を示します。
|
Copyright© 2007, Takashi Sakurai, All right reserved.