[Verilog] 特定の書式から値の読み取り、文字列から数値へ変換 $sscanf

特定の書式から値の読み取り、文字列から数値へ変換

"A = 0" など、ある書式に従った文字列から、必要な値を取得する方法です。

$sscanf を使えば、書式を指定して値を読み取れます。
"reg1 = 0xc0ffee" という文字列から、"%s = 0x%h" という書式を指定して、reg1 と c0ffee を読み取ります。

gistfile1.v
initial begin : test
    integer code;
    reg [63:0] name;
    reg [31:0] value;

    code = $sscanf("reg1 = 0xc0ffee", "%s = 0x%h", name, value);

    $display("code = %0d", code); // code = 2
    $display("name = %0s", name); // name = reg1
    $display("value = %h", value); // value = 00c0ffee
end

$sscanf は 値の読み取りに成功した個数を返します。上記では 2、最初から書式に合わなかった場合は 0 です。最初の変換より前に文字列が終わった場合は EOF(-1)を返します。

次のように文字列から数値への変換にも使えます。

gistfile1.v
reg [63:0] val;
integer code;
code = $sscanf("FFFF_FFFF_FFFF_FFFF", "%h", val);
$display("%h", val);

ファイルからリード時に、書式から値を読み取る $fscanf もあります。

See Also

  • IEEE Std 1364™-2005: 17.2.4.3 Reading formatted data