暗黙のポート宣言
従来の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