import "simlib.act"; import "mult_wrapper.act"; import "globals.act"; template defproc mul_model (chan(int)? A,B; chan(int)! RES; bool reset) { int a, b; intres; chp { *[ [#A]; B?b, A?a; RES!(a*b) ] } } defproc tb() { pint IN_WIDTH = 4; pint OUT_WIDTH = 8; pint IN_SEQ_L = 5; pint in_seq_a[IN_SEQ_L]; pint in_seq_b[IN_SEQ_L]; in_seq_a = {7, 6, 5, 1, 3}; in_seq_b = {4, 0, 3, 5, 9}; // model and DUT mul_model model; pipelined_mult dut; // simulation harness lockstep sb; source_sequence_multi a_src; source_sequence_multi b_src; // model inputs model.A = a_src.O[0]; model.B = b_src.O[0]; // DUT inputs dut.A = a_src.O[1]; dut.B = b_src.O[1]; // scoreboard inputs sb.IN[0] = a_src.O[2]; sb.IN[1] = b_src.O[2]; sb.OUT_M[0] = model.RES; sb.OUT_D[0] = dut.RES; } Initialize { actions { Reset+ }; actions { Reset- } }