[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gEDA-dev: Verilog: $fscanf and $sscanf don't correctly report matchcount



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
geda-dev@moria.seul.org
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev