module ModuleName #(
// パラメータを宣言
parameter
PARAMETER_NAME = 8,
WIDTH = 8
) (
// 出力ポートの宣言
output wire wire_output_port_name,
output reg reg_output_port_name,
output reg [WIDTH-1:0] multibyte_reg_output_port_name,
// 入力ポートの宣言
input input_port_name,
input [WIDTH-1:0] multibyte_input_port_name,
input reset,
input clock
);
// パラメータの宣言
localparam LOCAL_PARAMETER_NAME = 8;
localparam DEPTH = 8;
// 信号の宣言
wire wire_signal;
wire [WIDTH-1:0] multibyte_wire_signal;
wire [WIDTH-1:0] wire_array[DEPTH - 1: 0];
reg reg_signal;
reg [WIDTH-1:0] multibyte_reg_signal;
reg [WIDTH-1:0] reg_array[DEPTH - 1: 0];
reg [1:0] r0, r1;
wire [1:0] w0;
wire w1, w2;
wire submodule_output;
// wireへの接続
assign w0 = w1 + w2;
wire [1:0] w = w1 + w2;
// regへの接続(clockの立ち上がりに応じてregの値を変化)
always @(posedge clock) begin
if (reset) begin
r0 <= 0;
r1 <= 0;
end else begin
r0 <= w1 + w2;
r1 <= r0[1: 0];
end
end
// サブモジュールの接続
Submodule #(
// サブモジュールのパラメータ上書き
.SUBMODULE_PARAMETER_NAME(PARAMETER_NAME),
.DEPTH(DEPTH)
) instance_name (
.submodule_port_name(r0),
.submodule_output(submodule_output), // サブモジュールの出力はwireのみ接続することができる
.clock(clock)
);
endmodule
|