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.