def muxed_block_gens(mux_out, reset, clock): mux_sel, bg0_en, bg1_en = [Signal(bool(0)) for i in range(3)] bg0_out, bg1_out = [Signal(intbv(0)[2:]) for i in range(2)] bg0 = block_gen(bg0_out, bg0_en, clock, reset, n=4) bg1 = block_gen(bg1_out, bg1_en, clock, reset, n=4) my_mux = mux(mux_out, bg0_out, bg1_out, mux_sel) return bg0, bg1, my_mux
def tb_block_gen(): count, enable, clock = [Signal(intbv(0)) for i in range(3)] reset = ResetSignal(0, active=ACTIVE_LOW, async=True) bg = block_gen(count, enable, clock, reset, n=4) HALF_PERIOD = delay(10) @always(HALF_PERIOD) def clockGen(): clock.next = not clock @instance def stimulus(): reset.next = ACTIVE_LOW yield clock.negedge reset.next = INACTIVE_HIGH for i in range(12): enable.next = min(1, randrange(3)) yield clock.negedge raise StopSimulation @instance def monitor(): print "enable count" yield reset.posedge while 1: yield clock.posedge yield delay(1) print " %s %s" % (enable, count) return clockGen, stimulus, bg, monitor