The revised concurrency implementation (which I checked in last night)
works fine with your example:

  $ rake -f test2_runner.rake cver
  (in /home/sun/tmp/calvin)
  cver 
+loadvpi=/home/sun/src/ruby-vpi/obj/cver.so:vlog_startup_routines_bootstrap
test2.v
  GPLCVER_2.11a of 07/05/05 (Linux-elf).
  Copyright (c) 1991-2005 Pragmatic C Software Corp.
    All Rights reserved.  Licensed under the GNU General Public License (GPL).
    See the 'COPYING' file for details.  NO WARRANTY provided.
  Today is Thu Aug  9 09:14:22 2007.
  Compiling source file "test2.v"
  Highest level modules:
  test2

  @5 clk0 seen 1 times
  @7 clk1 seen 1 times
  @15 clk0 seen 2 times
  @21 clk1 seen 2 times
  @25 clk0 seen 3 times
  @35 clk1 seen 3 times
  @35 clk0 seen 4 times
  @45 clk0 seen 5 times
  @49 clk1 seen 4 times
  @63 clk1 seen 5 times
  Halted at location **test2.v(8) time 50000 from call to $finish.
    There were 3 error(s), 50001 warning(s), and 0 inform(s).


Here is the relevant source code for this example:

File "test2.v":

  module test2;
    reg clk0; initial clk0 = 1'b0;
    reg clk1; initial clk1 = 1'b0;

    initial forever #5 clk0 =~ clk0;
    initial forever #7 clk1 =~ clk1;

    initial #50000 $finish;
  endmodule


File "test2_spec.rb":

  process do
    5.times do |i|
      wait until Test2.clk0.posedge?
      puts "@#{simulation_time} clk0 seen #{i+1} times"
    end
  end

  process do
    5.times do |i|
      wait until Test2.clk1.posedge?
      puts "@#{simulation_time} clk1 seen #{i+1} times"
    end
  end


See if you can reproduce the same output.

Reply via email to