k0b0's record.

Computer Engineering, Arts and Books

Introduction to SystemVerilog. Module and port

SystemVerilogってVerilogHDLと何が違うの?

 SystemVerilogはVerilogHDLを拡張した言語であり、主に検証に関する機能が拡張されている。具体的にはVerilog-2005 の拡張であり、機能的には上位互換となっている。
 2005年にSystemVerilog は IEEE Standard 1800-2005 として標準化し、2009年に IEEE 1800-2009として改定した。

特徴

  • 回路をコンパクトに記述できる記法を導入 => 可読性・保守性の向上
  • 曖昧な回路記述を排除 => 意図しない回路の論理合成を防止
  • 抽象度の高い記法を導入 => Cなどで記述した抽象度の高いモデルと接続が可能
  • 高度な機能検証手法を導入 => アサーションベース検証等を導入

モジュール

 SystemVerilog では以下の書式でモジュールを記述する。従来のVerilogHDLとはモジュール名の後にポート宣言を記述する。

モジュールの書式

module モジュール名(ポート宣言);
...(回路記述)
endmodule

4bit加算器(adder.sv)

 4bit加算器の記述例を以下に示す。以下の記述例ではモジュール名をadderとしてポート宣言で4bitの入出力ポートを定義している。そして、assign文により定義した4bitの信号を加算している。

/*adder.sv*/
//4bitの入出力ポートを宣言
module adder(input [3:0] a_i, b_i, output [3:0] o);

//4bit加算器の記述
assign o = a_i + b_i;

endmodule

adder.svのテストベンチadder_tb.sv

 モジュールadderのテストベンチ。

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

parameter STEP = 10;

reg [3:0] a_i, b_i;
wire [3:0] o;

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

initial begin
    $dumpfile("adder.vcd");
    $dumpvars(0, adder_1);

    #STEP;
    a_i <= 4'b0000;
    b_i <= 4'b0000;
    #STEP;
    display();
    a_i <= 4'b0000;
    b_i <= 4'b0001;
    #STEP;
    display();
    a_i <= 4'b0001;
    b_i <= 4'b0000;
    #STEP;
    display();
    a_i <= 4'b0001;
    b_i <= 4'b0001;
    #STEP;
    display();
    $finish;
end

//タスク
task display;
    begin
	$display("a:%b b:%b s:%b", a_i, b_i, o);
    end
endtask

endmodule

備考

近日中に追記予定