Example #1
0
def test_btn_led():

    clock = Clock(0, frequency=500e3)
    reset = Reset(0, active=0, async=False)
    leds = Signal(intbv(0)[8:])
    btns = Signal(intbv(0)[4:])

    def _test():

        # bus_type = ('A', 'B', 'W', 'X') # avalon, barebone, wishbon, AXI
        tbdut = m_btn_led_mm(clock, reset, leds, btns, bus_type='A')

        def dumpg(glist):
            for gg in glist:
                if isinstance(gg, (list,tuple)):
                    dumpg(gg)
                elif gg is not None:
                    print("{:16}:  {}".format(gg.func.func_name, 
                                              gg.func.func_code.co_filename))
        dumpg(tbdut)

        tbclk = clock.gen()

        @instance
        def tbstim():
            reset.next = reset.active
            yield delay(10)
            reset.next = not reset.active
            yield clock.posedge

            #assert leds == 0
            
            for ii in range(3):
                # simulate a button press
                btns.next = 1 << ii
                yield delay(12)
                btns.next = 0

                for cc in range(8):
                    yield clock.posedge
                    
                # @todo: a more interesting check
                #assert leds != 0
            yield delay(100)

            raise StopSimulation

        return tbdut, tbclk, tbstim

    tb_clean_vcd(_test.func_name)
    Simulation(traceSignals(_test)).run()
    #Simulation(_test()).run()
    # currently an error when converting to both at once,
    # only convert to one at a time.
    toVerilog(m_btn_led_mm, clock, reset, leds, btns)
Example #2
0
def test_btn_led():

    clock = Clock(0, frequency=500e3)
    reset = Reset(0, active=0, async=False)
    leds = Signal(intbv(0)[8:])
    btns = Signal(intbv(0)[4:])

    def _test():

        # bus_type = ('A', 'B', 'W', 'X') # avalon, barebone, wishbon, AXI
        tbdut = m_btn_led_mm(clock, reset, leds, btns, bus_type="A")

        def dumpg(glist):
            for gg in glist:
                if isinstance(gg, (list, tuple)):
                    dumpg(gg)
                elif gg is not None:
                    print("{:16}:  {}".format(gg.func.func_name, gg.func.func_code.co_filename))

        dumpg(tbdut)

        tbclk = clock.gen()

        @instance
        def tbstim():
            reset.next = reset.active
            yield delay(10)
            reset.next = not reset.active
            yield clock.posedge

            # assert leds == 0

            for ii in range(3):
                # simulate a button press
                btns.next = 1 << ii
                yield delay(12)
                btns.next = 0

                for cc in range(8):
                    yield clock.posedge

                # @todo: a more interesting check
                # assert leds != 0
            yield delay(100)

            raise StopSimulation

        return tbdut, tbclk, tbstim

    tb_clean_vcd(_test.func_name)
    Simulation(traceSignals(_test)).run()
    # Simulation(_test()).run()
    # currently an error when converting to both at once,
    # only convert to one at a time.
    toVerilog(m_btn_led_mm, clock, reset, leds, btns)
Example #3
0
            reset.next = not reset.active
            yield clock.posedge

            try:
                for ii in range(100):
                    yield delay(100)
                
            except AssertionError, err:
                print("@E: assertion error @ %d ns" % (now(),))
                print("    %s" % (str(err),))
                # additional simulation cycles after the error
                yield delay(111)
                raise err

            except Exception, err:
                print("@E: error occurred")
                print("    %s" % (str(err),))
                raise err

            raise StopSimulation

        return tbclk, tbstim

    # run the above test
    vcd = tb_clean_vcd('_test')
    traceSignals.timescale = '1ns'
    traceSignals.name = vcd
    #Simulation((traceSignals(_test), tbdut,)).run()