logic
SystemVerilogで追加されたデータ型の一つ。regと似た型で、概ねregと同じ使い方ができる。regとの違いはポートリストの型として使う場合。1995/2001では入力はwire、出力はreg、入出力はwireだが、logicは入力にも使える。SystemVerilogでは入出力の型を合わせる必要があり、接続相手がlogicであれば、入力ポートであってもlogicとする。ただし、1995/2001と同様にwireはreg型など別の型と接続でき、インスタンス間の接続はwireで行う。SystemVerilogでも双方向ポートはwireで宣言する。
function
functionはその名の通り関数なので、引数と戻り値を持つ。1995/2001では戻り値としてビット幅を指定できるが、型は呼び出し側で指定する。SystemVerilogでは型の指定ができる。戻り値を持たないvoid型もある。void型以外は1995/2001同様に呼び出し側に代入して使う。void型では引数に出力を指定することでデータを渡す。
Verilog HDL 1995
wire [31:0] IFStage;
function [31:0] FUNC_IF;
input [31:0] PC;
begin
FUNC_IF = mem[PC];
end
endfunction // FUNC_IF
assign IFStage = FUNC_IF(PC);
- 戻り値の型は指定できない。型は呼び出し時に決定する。
- functionは関数定義なので、呼び出し側でwireやregに戻り値を代入する定義分が必要。
- ステートメントが複数行ある場合、begin~endで括る必要がある
Verilog HDL 2001
wire [31:0] IFStage;
function [31:0] FUNC_IF(
input [31:0] PC
);
begin
FUNC_IF = mem[PC];
end
endfunction // FUNC_IF
assign IFStage = FUNC_IF(PC);
- 引数をANSI Cのようにfunction名の後の丸括弧内に記述できる。
SystemVerilog
bit [31:0] IFStage;
function bit [31:0] FUNC_IF(
input [31:0] PC
);
return mem[PC];
endfunction : FUNC_IF
IFStage = FUNC_IF(PC);
- 戻り値の型(function [<型>] [<ビット幅>] <名前>(<ポート宣言>) を指定できる
- 戻り値を関数名とせず、retrunで指定できる
- ステートメントが複数行あってもbegin~endは必要ない
- function~endfinction : [<コメント>] とラベルが貼れる
- 呼び出して使うのは従来通り。
0 件のコメント:
コメントを投稿