k0b0's record.

Computer Engineering, Arts and Books

SystemVerilogの”暗黙のポート宣言”を試してみる

暗黙のポート宣言

 従来のVerilogHDLではテストベンチの記述などでモジュールを呼び出す際にポート名と信号名を指定する必要がある。これはポート数が多くなるほど、その記述量は多くなり冗長となる。SystemVerilogではこのような冗長な記述を取り除くために”暗黙のポート宣言”が用意されている。以下に従来のモジュール呼び出しの記述と暗黙のポート宣言を用いた記述を示す。

従来のVerilogHDLのモジュール呼び出しの例

sample sample_0(.A(a), .B(b), .C(c), .D(d), .E(e), .O(o));

SystemVerilogの暗黙のポート宣言の例

暗黙のポート宣言を行う際には、”呼び出し対象のモジュールのポート名”と”呼び出す側(テストベンチ)の信号名(wire, reg, logic)”が同じでなければならない。

sample sample_0(.*);

暗黙のポート宣言を用いた記述例

呼び出し対象モジュール

/* module adder.sv*/
module adder(input a_i, b_i, output o);

assign o = a_i + b_i;

endmodule

呼び出し側モジュール(テストベンチ)

/* module adder_tb.sv */
`timescale 1ps/1ps

module adder_tb;
parameter STEP = 10;

/* 暗黙のポート宣言を行うため、信号名は対象モジュールのポート名と同じにする */
reg a_i, b_i;
wire o;

/* 暗黙のポート宣言によるモジュール呼び出し */
adder adder_1(.*);

initial begin
    $dumpfile("adder.vcd");
    $dumpvars(0, adder_1);
    #STEP;
    a_i <= 1'b0;
    b_i <= 1'b0;
    #STEP;
    display();
    a_i <= 1'b0;
    b_i <= 1'b1;
    #STEP;
    display();
    a_i <= 1'b1;
    b_i <= 1'b0;
    #STEP;
    display();
    a_i <= 1'b1;
    b_i <= 1'b1;
    #STEP;
    display();
    $finish;
end

task display;
    begin
	$display("a:%b b:%b s:%b", a_i, b_i, o);
    end
endtask
endmodule