module mkTest (Empty); Reg#(int) state <- mkReg(0); Mult_ifc m <- mkMult1(0); rule go (state == 0); m.start(9, 5); state <= 1; endrule rule finish (state == 1); $display("Product = %d", m.result ()); state <= 2; endrule endmodule: mkTest | interface Mult_ifc; method Action start (Tin x, Tin y); method Tout result(); endinterface:Mult_ifc module mkMult1 (Mult_ifc); Reg#(Tout) product <- mkReg(0); Reg#(Tout) d <- mkReg(0); Reg#(Tin) r <- mkReg(0); rule cycle (r!=0 ); if (r[0] == 1) product <= product + d' d <= d << 1; r <= r >> 1; endrule method Action start (x,y) if (r==0); d <=x; r <= y; product <= 0; endmethod method result () if (r==0); return product; endmethod endmodule: mkMult1 |