|
下位モジュールのインスタンス生成
下位モジュールのインスタンス生成は、
モジュール名 インスタンス名(ポートリスト);
となる。あるモジュール内で下位モジュールを生成する際に一つの時は、「モジュール名=インスタンス名」でも構わないが、複数のサブモジュールのインスタンスを生成する時は、 別々に名前をつけてあげる必要がある。
ポートの接続
ポートの接続は、順番による接続と名前による接続がある。
順番による接続は、下位モジュールの宣言と同じ順番に接続する。名前による接続は、
.接続先のポート名(接続信号),
下位モジュールの呼び出しと接続の例
/////////////////////////////////////////////////////////////////////////////////
//TESTBENCH
// テストベンチ
/////////////////////////////////////////////////////////////////////////////////
module TESTBENCH;
reg [3:0] INA;
reg CLK;
wire [3:0] XOUT;
// 1周期1000ユニットに設定
parameter STEP = 10;
// クロックの定義
always #(STEP/2) CLK = ~CLK;
DFF4 DFF4(CLK, INA, XOUT);
initial begin
$dumpfile("test.vcd");
$dumpvars(0, TESTBENCH);
$monitor ("%t: INA = %b, XOUT = %b", $time, INA, XOUT);
CLK = 0;
INA = 0;
#STEP INA = 1;
#STEP INA = 2;
#STEP INA = 5;
#STEP INA = 4'hF;
#STEP INA = 4'hF;
#STEP;
$finish;
end
endmodule
////////////////////////////////////////////////////////////////////////////////
//親モジュール
////////////////////////////////////////////////////////////////////////////////
module DFF4(CLK, INA, XOUT);
input CLK;
input [3:0] INA;
output [3:0] XOUT;
//順番に接続
DFF DFF_0(CLK, INA[0], XOUT[0]);
DFF DFF_1(CLK, INA[1], XOUT[1]);
//名前による接続
DFF DFF_2(
.CLK(CLK),
.INA(INA[2]),
.XOUT(XOUT[2])
);
DFF DFF_3(
.CLK(CLK),
.INA(INA[3]),
.XOUT(XOUT[])
);
endmodule
///////////////////////////////////////////////////////////////////////////////
//下位モジュール
///////////////////////////////////////////////////////////////////////////////
module DFF(CLK, INA, XOUT);
input CLK;
input INA;
output XOUT;
reg XOUT;
always@(posedge CLK)
begin
XOUT <= INA;
end
endmodule
|