SystemVerilog $left/$right/$low/$high/$size/$dimensions システムタスク

はじめに

SystemVerilogのLRMを読んでいると配列に関する面白い?システムタスクがあったので紹介します。

$left 配列の左側

bit [10:12] a;
int b;
initial begin
    b = $left(a);
    $display("%d", b);  // 10
end

$right 配列の右側

bit [10:12] a;
int b;
initial begin
    b = $right(a);
    $display("%d", b);  // 12
end

$low 小さい方

bit [10:12] a;
int b;
initial begin
    b = $low(a);
    $display("%d", b);  // 10
end

$high 大きい方

bit [10:12] a;
int b;
initial begin
    b = $high(a);
    $display("%d", b);  // 12
end

$size 配列の幅

bit [10:12] a;
int b;
initial begin
    b = $size(a);
    $display("%d", b);  // 3
end

$dimension 次元数

bit [10:12] a;
bit [10:12] c[1:0];
int b;
initial begin
    b = $size(a);
    $display("%d", b);  // 1
    b = $size(c);
    $display("%d", b);  // 2
end

まとめ

配列に使用できるシステムタスクを紹介しました。

コメント

タイトルとURLをコピーしました