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

Reply via email to