Using Icarus Verilog version 0.9.devel ($Name: s20070227 $),
$fscanf and $sscanf don't correctly return the number of input arguments
successfully matched by the specified format, as defined in Std 1364-2001:
The number of successfully matched and assigned input items is
returned in code; this number can be 0 in the event of an early
matching failure between an input character and the control
string...
Instead, they always return the argument count, even if none of them were
matched in the input. The behaviour can be readily demonstrated:
$ cat bar.v
`define EOF -1
module bar;
integer line, rc, file, a, b, c;
reg [8*256:1] str;
initial begin
file = $fopen ("bar_tests.v_vec", "r");
if (file == 0)
$finish;
for (line = 1; line <= 5; line = line + 1) begin
rc = $fgets (str, file);
if (rc == `EOF)
$finish;
rc = $sscanf (str, "%h %h %h\n", a, b, c);
$display ("\tLine %d matches %d args: %h %h %h", line, rc, a,
b, c);
end
$fclose (file);
$finish;
end
endmodule
$ cat bar_tests.v_vec
0 1 2
3 4 5 // comment at end
6 7
// another comment
9 a b
$ iverilog -obar.vvp -tvvp bar.v; vvp bar.vvp
Line 1 matches 3 args: 00000000 00000001 00000002
Line 2 matches 3 args: 00000003 00000004 00000005
Line 3 matches 3 args: 00000006 00000007 00000000
Line 4 matches 3 args: 00000000 00000000 00000000
Line 5 matches 3 args: 00000009 0000000a 0000000b
I would expect the behaviour I observe when I compile the same code with
ModelSim:
# Line 1 matches 3 args: 00000000 00000001 00000002
# Line 2 matches 3 args: 00000003 00000004 00000005
# Line 3 matches 2 args: 00000006 00000007 00000005
# Line 4 matches 0 args: 00000000 00000007 00000005
# Line 5 matches 3 args: 00000009 0000000a 0000000b
--
Roger Williams Coelacanth Engineering Inc, Westport, MA
tel +1 508 287-1420 * fax +1 508 302-0230 * http://www.coelacanth.com/
_______________________________________________
geda-dev mailing list
[email protected]
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev