[Verilog] 特定の書式から値の読み取り、文字列から数値へ変換 $sscanf
特定の書式から値の読み取り、文字列から数値へ変換
"A = 0" など、ある書式に従った文字列から、必要な値を取得する方法です。
$sscanf を使えば、書式を指定して値を読み取れます。
"reg1 = 0xc0ffee" という文字列から、"%s = 0x%h" という書式を指定して、reg1 と c0ffee を読み取ります。
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)を返します。
次のように文字列から数値への変換にも使えます。
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
