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
備考
近日中に追記予定