説明した通り、プログラムをモジュール単位で記述します。このモジュールを定義する場合、図1のようなmodule文を使用します。module文は、最初から順番にモジュール名、ポートリスト、ポート宣言と回路記述を記入します。module文の最後には”endmodule”で終了するというルールがあります。モジュール名は、例1、例2に示したmodule文では”top_module”になります。このモジュール名は、アルファベット、アンダーバー、数字で記述します。”module”、”endmodule”、”input”、”output”などの予約語は、モジュール名として使用できません。モジュール名の最後を数字で終わることはできません。ポートリストは、このモジュールへ入力、またはモジュールから出力される信号名を記入します。例1のmodule文では”i_data”、”o_data”、”clk”が信号名になります。ポート宣言は、ポートリストに記述した信号線の属性やデータ幅を指定します。属性には、input(入力)、output(出力)の他にinout(入出力)で設定します。inoutはトップモジュールでのみ使用できます(内部モジュールでは使用不可)。例1のmodule文では、”i_data”と”clk”は入力、”o_data”は出力になり、”i_data”と”o_data”は8ビットの信号線になります。例2のmodule文のように、ポートリストの中でポート宣言を一緒に記述することが可能です。図1の回路記述で使用する、wire文とreg文について説明します。wire文は、モジュール間や回路の信号名を定義するときに使用します。data1;と記述します。reg文は、レジスタ名を定義するときに使用します。言い換えれば、図1のフリップフロップff0、ff1を定義するときです。ff1;と記述します。図2のAND回路とフリップフロップff0、ff1を結線するときは、assign文を使用します。技術資料お問い合わせ。