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
bit <= a[2];
sub0 <= a[5: 2]; // 5ビット目から2ビット目を取得
sub1 <= a[5 -: 4]; // 5ビット目より下位4ビットを取得
sub2 <= a[2 +: 4]; // 2ビット目より上位4ビットを取得
merge <= {a, b};
{a, b} <= splice;
if文
if (a[0] == 0) begin
//
end
if (a[0] == 0) begin
//
end else if (a[1] == 0) begin
//
end else begin
//
end
モジュール接続
SubModuleName instance_name (
.port_name0(sgnal_name0),
...
.port_namen(signal_namen)
);
SubModuleName #(
.SUBMODULE_PARAMETER_NAME(PARAMETER_NAME)
) instance_name (
.port_name0(sgnal_name0),
...
.port_namen(signal_namen)
);