示例#1
0
def bench():
    """ Unit test for dac_controller. """
    
    clock = Signal(bool(False))
    reset = Signal(bool(False))
    rxf = Signal(bool(False))
    txe = Signal(bool(False))
    rd = Signal(bool(False))
    wr = Signal(bool(False))
    oe = Signal(bool(False))
    siwu = Signal(bool(False))
    adbus = TristateSignal(intbv(0)[8:])
    dataIn = Signal(intbv(0)[8:])
    dataOut = Signal(intbv(0)[8:])
    rw = Signal(bool(False))
    busy = Signal(bool(False))
    dataWaitIn = Signal(bool(False))
    dataWaitOut = Signal(bool(False))
    strobe = Signal(bool(False))

    adbus_drv = adbus.driver()

    dut_ft245sync = ft245sync(clock, reset, rxf, txe, rd, wr, oe, siwu, adbus, dataIn, dataOut, rw, busy, dataWaitIn, dataWaitOut, strobe)
    
    @always(delay(PERIOD//2))
    def clkgen():
        clock.next = not clock

    @instance
    def stimulus():
        reset.next = True
        strobe.next = False
        dataWaitIn.next = False
        rw.next = False
        adbus_drv.next = None
        rxf.next = True
        txe.next = True
        yield delay(32)
        reset.next = False
        yield busy.negedge
        print ("FT245 ready")
        rw.next = True
        strobe.next = True
        yield busy.posedge
        print ("FT245 in work")
        strobe.next = False
        txe.next = False
        yield clock.posedge
        dataIn.next = 113
        if(wr == 0):
            print ("Wr is low .. OK .. Written data:")
            print (adbus)
        else:
            print ("Error .. Wr was not LOW")
            yield (wr.negedge)
            yield clock.posedge
            print (adbus)
        i = 25
        while(dataWaitOut == 0):
            yield clock.negedge
            dataIn.next = i
            i = i + 1
            yield clock.posedge
            print ("data:")
            print (adbus)
            if(i == 50):
                txe.next = True
        
        yield clock.posedge
        if(busy != 0):
            print ("Error: Busy should be low")
            yield busy.negedge
        print ("FT245 ready again")
        rw.next = False
        strobe.next = True
        yield busy.posedge
        print ("FT245 in work again")
        strobe.next = False
        rxf.next = False
        yield clock.posedge
        if(oe == 0):
            print ("OE is low .. OK .. reading data")
            adbus_drv.next = 115
        else:
            print ("Error .. OE was not LOW")
            yield (oe.negedge)
            adbus_drv.next = 115
        i = 28
        while(rxf == 0):
            yield clock.negedge
            if(not dataWaitIn):
                adbus_drv.next = i
            yield clock.posedge
            print ("data")
            print (dataOut)
            if(i == 50):
                rxf.next = 1
            if(i == 40):
                dataWaitIn.next = True
            if(i == 43):
                dataWaitIn.next = False
            i = i + 1
        yield clock.posedge
        if(busy != 0):
            print ("Error: Busy should be low")
            yield busy.negedge
        
        raise StopSimulation

    return dut_ft245sync, clkgen, stimulus
def bench():
    """ Integration test for controller. """

    clock = Signal(bool(False))
    clockFtdi = Signal(bool(False))
    reset = Signal(bool(False))
    
    ft245din = Signal(intbv(0)[8:])
    ft245dout = Signal(intbv(0)[8:])
    ft245rw = Signal(bool(False))
    ft245clock = Signal(bool(False))
    ft245reset = Signal(bool(False))
    ft245busy = Signal(bool(False))
    ft245oe = Signal(bool(False))
    ft245dataWaitIn = Signal(bool(False))
    ft245dataWaitOut = Signal(bool(False))
    ft245strobe = Signal(bool(False))
    dacReset = Signal(bool(False))
    dacBusy = Signal(bool(False))
    dacStrobe = Signal(bool(False))
    dacVrefTopA = Signal(intbv(0)[8:])
    dacVrefTopB = Signal(intbv(0)[8:])
    dacVrefBotA = Signal(intbv(0)[8:])
    dacVrefBotB = Signal(intbv(0)[8:])
    digipotValue = Signal(intbv(0)[7:])
    digipotReset = Signal(bool(False))
    digipotBusy = Signal(bool(False))
    digipotStrobe = Signal(bool(False))
    bufferclock = Signal(bool(False))
    bufferReset = Signal(bool(False))
    bufferDataIn = Signal(intbv(0)[16:])
    bufferDataOut = Signal(intbv(0)[16:])
    bufferReady = Signal(bool(False))
    bufferOutputInputReady = Signal(bool(False))
    bufferAllowWriteOverlap = Signal(bool(False))
    bufferUseSdram = Signal(bool(False))
    bufferDataDirection = Signal(bool(False))
    decimatorclockOut = Signal(bool(False))
    decimationRatioBase = Signal(intbv(0, min = 0, max = 11))
    decimationStyle = Signal(intbv(0)[2:])
    analogTrigger1Reset = Signal(bool(False))
    trigger1Type = Signal(bool(False))
    trigger1Slope = Signal(bool(False))
    analog1Trigger = Signal(bool(False))
    trigger1Value = Signal(intbv(0)[8:])
    analogTrigger2Reset = Signal(bool(False))
    trigger2Type = Signal(bool(False))
    trigger2Slope = Signal(bool(False))
    analog2Trigger = Signal(bool(False))
    trigger2Value = Signal(intbv(0)[8:])
    digitalTriggerReset = Signal(bool(False))
    digiTrigger = Signal(bool(False))
    triggerPattern = Signal(intbv(0)[64:])
    triggerSamples = Signal(intbv(0, min = 0, max = 4))
    decimator1out = Signal(intbv(0)[8:])
    decimator2out = Signal(intbv(0)[8:])
    decimator1in = Signal(intbv(0)[8:])
    decimator2in = Signal(intbv(0)[8:])
    adc1pd = Signal(bool(False))
    adc2pd = Signal(bool(False))
    adc1relatt = Signal(bool(False))
    adc2relatt = Signal(bool(False))
    adc1relco = Signal(bool(False))
    adc2relco = Signal(bool(False))
    led0 = Signal(bool(False))
    led1 = Signal(bool(False))
    logicAnalyzer = Signal(intbv(0)[16:])
    la1dir = Signal(bool(False))
    la2dir = Signal(bool(False))
    la1oe  = Signal(bool(False))
    la2oe  = Signal(bool(False))
    
    decimator1clockOut = Signal(bool(False))
    decimator2clockOut = Signal(bool(False))
    
    serialOut = Signal(bool(False))
    load = Signal(bool(False))
    ldac = Signal(bool(False))
    clkDacOut = Signal(bool(False))
    
    sda = TristateSignal(bool(False))
    scl = TristateSignal(bool(False))
    sda_d = sda.driver()
    scl_d = scl.driver()
    sda_dpull = sda.driver()
    scl_dpull = scl.driver()
    
    rxf = Signal(bool(False))
    txe = Signal(bool(False))
    rd = Signal(bool(False))
    wr = Signal(bool(False))
    siwu = Signal(bool(False))
    adbus = TristateSignal(intbv(0)[8:])
    
    lfsr = Signal(intbv(0)[LFSR_WIDTH:])
    adbus_drv = adbus.driver()
    data = [Signal(intbv(0)[8:]) for i in range(9)]
    
    dut_controller = controller(clockFtdi, reset, ft245din, ft245dout, ft245clock, ft245rw, ft245busy, ft245oe,
                   ft245dataWaitIn, ft245dataWaitOut, ft245strobe, ft245reset, dacReset, 
                   dacVrefTopA, dacVrefTopB, dacVrefBotA, dacVrefBotB, dacStrobe, dacBusy,
                   digipotReset, digipotValue, digipotStrobe, digipotBusy, bufferReset, 
                   bufferDataOut, bufferDataIn, bufferReady, bufferOutputInputReady, bufferclock,
                   bufferAllowWriteOverlap, bufferUseSdram, bufferDataDirection, decimator1clockOut,
                   decimationRatioBase, decimationStyle, decimator1out, decimator2out,
                   trigger1Type, trigger1Slope, analogTrigger1Reset, trigger1Value,
                   analog1Trigger, trigger2Type, trigger2Slope, analogTrigger2Reset,
                   trigger2Value, analog2Trigger, digitalTriggerReset, triggerPattern, 
                   triggerSamples, digiTrigger, adc1pd, adc2pd, adc1relatt, adc2relatt, 
                   adc1relco, adc2relco, led0, led1, logicAnalyzer, la1dir, la2dir, la1oe, la2oe)
               
    inst_decimator1 = decimator(clock, reset, decimator1in, decimator1out, decimationRatioBase, decimationStyle, decimator1clockOut)
    inst_decimator2 = decimator(clock, reset, decimator2in, decimator2out, decimationRatioBase, decimationStyle, decimator2clockOut)
    inst_trigger_analog1 = trigger_analog(decimator1clockOut, analogTrigger1Reset, decimator1out, 
                                        trigger1Type, trigger1Slope, trigger1Value, analog1Trigger)
    inst_trigger_analog2 = trigger_analog(decimator2clockOut, analogTrigger2Reset, decimator2out, 
                                        trigger2Type, trigger2Slope, trigger2Value, analog2Trigger)
    inst_trigger_digital = trigger_digital(clock, digitalTriggerReset, logicAnalyzer, triggerPattern, triggerSamples, digiTrigger)
    inst_dac_controller = dac_controller(clock, dacReset, dacVrefTopA, dacVrefTopB, dacVrefBotA, dacVrefBotB, dacStrobe, 
                                       serialOut, load, ldac, clkDacOut, dacBusy)
    inst_digipot_controller = digipot_controller(clock, digipotReset, digipotValue, digipotStrobe, digipotBusy, sda, scl)
    inst_ft245sync = ft245sync(clockFtdi, ft245reset, rxf, txe, rd, wr, ft245oe, siwu, adbus, ft245din, ft245dout, 
                               ft245rw, ft245busy, ft245dataWaitIn, ft245dataWaitOut, ft245strobe)
    inst_buffer = buff(bufferclock, bufferReset, bufferDataIn, bufferDataOut, bufferReady, bufferOutputInputReady, 
                        bufferAllowWriteOverlap, bufferUseSdram, bufferDataDirection)

    @instance
    def clkgen():
        clock.next = not clock
        yield delay(HALF_PERIOD)
    
    @instance
    def clkgen_f():
        clockFtdi.next = not clockFtdi
        yield delay(HALF_PERIOD_FTDI)
    
    @always(clock.posedge, reset.posedge)
    def lfsr_proc():
        if(reset == 1):
            lfsr.next = LFSR_SEED
        else:
            lfsr.next = concat(lfsr[LFSR_WIDTH-1:0], lfsr[9] ^ lfsr[6])
    
    @always_comb
    def adcGen():
        if(reset == 1):
            decimator1in.next = 0
            decimator2in.next = 0
        else:
            if(adc1pd):
                decimator1in.next = 0
            else:
                decimator1in.next = lfsr[10:2]
            if(adc2pd):
                decimator2in.next = 0
            else:
                decimator2in.next = lfsr[8:]
    
    @instance
    def stimulus():
        i = int(0)
        reset.next = True
        adbus_drv.next = None
        rxf.next = True
        txe.next = True
        sda_d.next = None
        scl_d.next = None
        sda_dpull.next = None
        scl_dpull.next = None
        yield delay(32)
        reset.next = False
        #set VREF
        yield ft245busy.negedge
        print ("FT245 ready")
        rxf.next = False
        print ("FT245 RXF low")
        yield clockFtdi.posedge
        yield (ft245oe.negedge)
        print ("OE came low, pushing data from FTDI")
        adbus_drv.next = 0x10
        i = 0
        data[0].next = 100
        data[1].next = 80
        data[2].next = 150
        data[3].next = 40
        data[4].next = 0
        data[5].next = 0
        data[6].next = 0
        data[7].next = 0
        data[8].next = 0
        while(rxf == 0):
            yield clockFtdi.negedge
            adbus_drv.next = data[i]
            if(i == 8):
                break
            i = i + 1
            yield clockFtdi.posedge
        yield clockFtdi.negedge
        adbus_drv.next = None
        rxf.next = True
        if(ft245busy != 0):
            print ("Error: Busy should be low")
            yield ft245busy.negedge
        #SET decimation
        print ("FT245 ready")
        rxf.next = False
        print ("FT245 RXF low")
        yield clockFtdi.posedge
        yield (ft245oe.negedge)
        print ("OE came low, pushing data from FTDI")
        adbus_drv.next = 0x30
        i = 0
        data[0].next = 0x00
        data[1].next = 0x00
        data[2].next = 0
        data[3].next = 0
        data[4].next = 0
        data[5].next = 0
        data[6].next = 0
        data[7].next = 0
        data[8].next = 0
        while(rxf == 0):
            yield clockFtdi.negedge
            adbus_drv.next = data[i]
            if(i == 8):
                break
            i = i + 1
            yield clockFtdi.posedge
        yield clockFtdi.negedge
        adbus_drv.next = None
        rxf.next = True
        if(ft245busy != 0):
            print ("Error: Busy should be low")
            yield ft245busy.negedge
        #SET attenuators
        print ("FT245 ready")
        rxf.next = False
        print ("FT245 RXF low")
        yield clockFtdi.posedge
        yield (ft245oe.negedge)
        print ("OE came low, pushing data from FTDI")
        adbus_drv.next = 0x20
        i = 0
        data[0].next = 0xFF
        data[1].next = 0xFF
        data[2].next = 0
        data[3].next = 0
        data[4].next = 0
        data[5].next = 0
        data[6].next = 0
        data[7].next = 0
        data[8].next = 0
        while(rxf == 0):
            yield clockFtdi.negedge
            adbus_drv.next = data[i]
            if(i == 8):
                break
            i = i + 1
            yield clockFtdi.posedge
        yield clockFtdi.negedge
        adbus_drv.next = None
        rxf.next = True
        if(ft245busy != 0):
            print ("Error: Busy should be low")
            yield ft245busy.negedge
        
        #SET trigger
        print ("FT245 ready")
        rxf.next = False
        print ("FT245 RXF low")
        yield clockFtdi.posedge
        yield (ft245oe.negedge)
        print ("OE came low, pushing data from FTDI")
        adbus_drv.next = 0x31
        i = 0
        data[0].next = 120
        data[1].next = 0
        data[2].next = 145
        data[3].next = 0
        data[4].next = 0
        data[5].next = 0
        data[6].next = 0
        data[7].next = 0
        data[8].next = 0
        while(rxf == 0):
            yield clockFtdi.negedge
            adbus_drv.next = data[i]
            if(i == 8):
                break
            i = i + 1
            yield clockFtdi.posedge
        yield clockFtdi.negedge
        rxf.next = True
        adbus_drv.next = None
        if(ft245busy != 0):
            print ("Error: Busy should be low")
            yield ft245busy.negedge
        #Start capture
        print ("FT245 ready")
        rxf.next = False
        print ("FT245 RXF low")
        yield clockFtdi.posedge
        yield (ft245oe.negedge)
        print ("OE came low, pushing data from FTDI")
        adbus_drv.next = 0x40
        i = 0
        data[0].next = 0xF0
        data[1].next = 0
        data[2].next = 0
        data[3].next = 0
        data[4].next = 0
        data[5].next = 0
        data[6].next = 0
        data[7].next = 0
        data[8].next = 0
        while(rxf == 0):
            yield clockFtdi.negedge
            adbus_drv.next = data[i]
            if(i == 8):
                break
            i = i + 1
            yield clockFtdi.posedge
        yield clockFtdi.negedge
        rxf.next = True
        adbus_drv.next = None
        if(ft245busy != 0):
            print ("Error: Busy should be low")
            yield ft245busy.negedge
        yield bufferDataDirection.negedge
        yield ft245busy.posedge
        txe.next = False
        yield clockFtdi.posedge
        for i in range(0, 100000):
            if(ft245dataWaitOut):
                print("Data wait out")
            print("Data:")
            print(adbus)
            yield clockFtdi.posedge
            if(bufferReady == 0):
                break
        
        raise StopSimulation

    return inst_buffer, inst_ft245sync, inst_digipot_controller, inst_dac_controller, inst_trigger_digital, lfsr_proc, adcGen, \
           inst_trigger_analog2, inst_trigger_analog1, inst_decimator2, inst_decimator1, dut_controller, clkgen, clkgen_f, stimulus
def top(reset, clock, clockFtdi, adc1data, adc2data, adc1pd, adc2pd, adc1relatt, adc2relatt, 
        adc1relco, adc2relco, led0, led1, logicAnalyzer, la1dir, la2dir, la1oe, la2oe,
        serialOut, load, ldac, clkDacOut, sda, scl, rxf, oe, txe, rd, wr, siwu, adbus):
    
    decimatorNewValueFlag = Signal(bool(False))
    ft245din = Signal(intbv(0)[8:])
    ft245din.driven = 'reg'
    ft245dout = Signal(intbv(0)[8:])
    ft245dout.driven = 'reg'
    ft245rw = Signal(bool(False))
    ft245rw.driven = 'reg'
    ft245reset = Signal(bool(False))
    ft245reset.driven = 'wire'
    ft245busy = Signal(bool(False))
    ft245busy.driven = 'wire'
    ft245dataWaitIn = Signal(bool(False))
    ft245dataWaitIn.driven = 'wire'
    ft245dataWaitOut = Signal(bool(False))
    ft245dataWaitOut.driven = 'wire'
    ft245strobe = Signal(bool(False))
    ft245strobe.driven = 'wire'
    dacReset = Signal(bool(False))
    dacReset.driven = 'wire'
    dacBusy = Signal(bool(False))
    dacBusy.driven = 'wire'
    dacStrobe = Signal(bool(False))
    dacStrobe.driven = 'wire'
    dacVrefTopA = Signal(intbv(0)[8:])
    dacVrefTopA.driven = 'reg'
    dacVrefTopB = Signal(intbv(0)[8:])
    dacVrefTopB.driven = 'reg'
    dacVrefBotA = Signal(intbv(0)[8:])
    dacVrefBotA.driven = 'reg'
    dacVrefBotB = Signal(intbv(0)[8:])
    dacVrefBotB.driven = 'reg'
    digipotValue = Signal(intbv(0)[7:])
    digipotValue.driven = 'reg'
    digipotReset = Signal(bool(False))
    digipotReset.driven = 'wire'
    digipotBusy = Signal(bool(False))
    digipotBusy.driven = 'wire'
    digipotStrobe = Signal(bool(False))
    digipotStrobe.driven = 'wire'
    bufferclock = Signal(bool(False))
    bufferclock.driven = 'wire'
    bufferReset = Signal(bool(False))
    bufferReset.driven = 'wire'
    bufferDataIn = Signal(intbv(0)[32:])
    bufferDataIn.driven = 'reg'
    bufferDataOut = Signal(intbv(0)[32:])
    bufferDataOut.driven = 'reg'
    bufferReady = Signal(bool(False))
    bufferReady.driven = 'wire'
    bufferOutputInputReady = Signal(bool(False))
    bufferOutputInputReady.driven = 'wire'
    bufferAllowWriteOverlap = Signal(bool(False))
    bufferAllowWriteOverlap.driven = 'wire'
    bufferUseSdram = Signal(bool(False))
    bufferUseSdram.driven = 'wire'
    bufferDataDirection = Signal(bool(False))
    bufferDataDirection.driven = 'wire'
    decimationRatioBase = Signal(intbv(0, min = 0, max = 9))
    decimationRatioBase.driven = 'reg'
    decimationRatio = Signal(intbv(0, min = 0, max = MAXIMAL_RATIO+1))
    
    decimationStyle = Signal(intbv(0)[2:])
    decimationStyle.driven = 'reg'
    analogTrigger1Reset = Signal(bool(False))
    analogTrigger1Reset.driven = 'wire'
    trigger1Type = Signal(bool(False))
    trigger1Type.driven = 'wire'
    trigger1Slope = Signal(bool(False))
    trigger1Slope.driven = 'wire'
    analog1Trigger = Signal(bool(False))
    analog1Trigger.driven = 'wire'
    trigger1Value = Signal(intbv(0)[8:])
    trigger1Value.driven = 'reg'
    analogTrigger2Reset = Signal(bool(False))
    analogTrigger2Reset.driven = 'wire'
    trigger2Type = Signal(bool(False))
    trigger2Type.driven = 'wire'
    trigger2Slope = Signal(bool(False))
    trigger2Slope.driven = 'wire'
    analog2Trigger = Signal(bool(False))
    analog2Trigger.driven = 'wire'
    trigger2Value = Signal(intbv(0)[8:])
    trigger2Value.driven = 'reg'
    digitalTriggerReset = Signal(bool(False))
    digitalTriggerReset.driven = 'wire'
    digiTrigger = Signal(bool(False))
    digiTrigger.driven = 'wire'
    triggerPattern = Signal(intbv(0)[64:])
    triggerPattern.driven = 'reg'
    triggerSamples = Signal(intbv(0, min = 0, max = 4))
    triggerSamples.driven = 'reg'
    decimator1out = Signal(intbv(0)[8:])
    decimator1out.driven = 'reg'
    decimator2out = Signal(intbv(0)[8:])
    decimator2out.driven = 'reg'
    decimatorclock = Signal(bool(False))
    #decimatorclock.driven = 'wire'
    decimator1in = Signal(intbv(0)[8:])
    decimator2in = Signal(intbv(0)[8:])
    oe_i = Signal(bool(False))
    rxf_i = Signal(bool(False))
    txe_i = Signal(bool(False))
    rd_i = Signal(bool(False))
    wr_i = Signal(bool(False))
    siwu_i = Signal(bool(False))
    serialOut_i = Signal(bool(False))
    load_i = Signal(bool(False))
    ldac_i = Signal(bool(False))
    clkDacOut_i = Signal(bool(False))
    adc1pd_i = Signal(bool(False))
    adc2pd_i = Signal(bool(False))
    adc1relatt_i = Signal(bool(False))
    adc2relatt_i = Signal(bool(False))
    adc1relco_i = Signal(bool(False))
    adc2relco_i = Signal(bool(False))
    led0_i = Signal(bool(False))
    led1_i = Signal(bool(False))
    logicAnalyzer_i = Signal(intbv(0)[16:])
    logicAnalyzer_dec = Signal(intbv(0)[16:])
    la1dir_i = Signal(bool(False))
    la2dir_i = Signal(bool(False))
    la1oe_i  = Signal(bool(False))
    la2oe_i  = Signal(bool(False))
    clock_i = Signal(bool(False))
    clockFtdi_i = Signal(bool(False))
    reset_i = Signal(bool(False))
    alwaysEn  = Signal(bool(False))
    
    @always_comb
    def connectSignals():
        decimator1in.next = adc1data
        decimator2in.next = adc2data
        oe.next = oe_i
        rxf_i.next = rxf
        txe_i.next = txe
        rd.next = rd_i
        wr.next = wr_i
        siwu.next = siwu_i
        serialOut.next = serialOut_i
        load.next = load_i
        ldac.next = ldac_i
        clkDacOut.next = clkDacOut_i
        adc1pd.next = adc1pd_i
        adc2pd.next = adc2pd_i
        adc1relatt.next = adc1relatt_i
        adc2relatt.next = adc2relatt_i
        adc1relco.next = adc1relco_i
        adc2relco.next = adc2relco_i
        led0.next = led0_i
        led1.next = led1_i
        logicAnalyzer_i.next = logicAnalyzer
        la1dir.next = la1dir_i
        la2dir.next = la2dir_i
        la1oe.next  = la1oe_i
        la2oe.next  = la2oe_i
        clock_i.next = clock
        clockFtdi_i.next = clockFtdi
        reset_i.next = reset
    
    
    controller.vhdl_instance = "controller"
    inst_controller = controller(clockFtdi_i, reset_i, ft245din, ft245dout, ft245rw, ft245busy, oe_i, wr_i,
                   ft245dataWaitIn, ft245dataWaitOut, ft245strobe, ft245reset, dacReset, 
                   dacVrefTopA, dacVrefTopB, dacVrefBotA, dacVrefBotB, dacStrobe, dacBusy,
                   digipotReset, digipotValue, digipotStrobe, digipotBusy, bufferReset, 
                   bufferDataOut, bufferDataIn, bufferReady, bufferOutputInputReady,
                   bufferAllowWriteOverlap, bufferDataDirection, decimatorNewValueFlag,
                   decimationRatioBase, decimationStyle, decimator1out, decimator2out,
                   trigger1Type, trigger1Slope, analogTrigger1Reset, trigger1Value,
                   analog1Trigger, trigger2Type, trigger2Slope, analogTrigger2Reset,
                   trigger2Value, analog2Trigger, digitalTriggerReset, triggerPattern, 
                   triggerSamples, digiTrigger, adc1pd_i, adc2pd_i, adc1relatt_i, adc2relatt_i, 
                   adc1relco_i, adc2relco_i, led0_i, led1_i, logicAnalyzer_dec, la1dir_i, la2dir_i, la1oe_i, la2oe_i, clock_i)
    
    decimator_clock_divisor.vhdl_instance = "decimator_clock_divisor"
    inst_decimator_clock_divisor = decimator_clock_divisor(clock_i, reset_i, decimationRatioBase, decimationRatio, decimatorclock, decimatorNewValueFlag, alwaysEn)
    
    digital_decimator.vhdl_instance = "digital_decimator"
    inst_digital_decimator = digital_decimator(clock_i, reset_i, logicAnalyzer_i, logicAnalyzer_dec, decimationRatio, decimatorclock)
    
    decimator.vhdl_instance = "decimator"
    inst_decimator1 = decimator(clock_i, reset_i, decimator1in, decimator1out, decimationRatio, decimationRatioBase, decimationStyle, decimatorclock, decimatorNewValueFlag)
    inst_decimator2 = decimator(clock_i, reset_i, decimator2in, decimator2out, decimationRatio, decimationRatioBase, decimationStyle, decimatorclock, decimatorNewValueFlag)
    trigger_analog.vhdl_instance = "trigger_analog"
    inst_trigger_analog1 = trigger_analog(clock_i, analogTrigger1Reset, decimator1out, 
                                        trigger1Type, trigger1Slope, trigger1Value, analog1Trigger, decimatorclock, alwaysEn)
    inst_trigger_analog2 = trigger_analog(clock_i, analogTrigger2Reset, decimator2out, 
                                        trigger2Type, trigger2Slope, trigger2Value, analog2Trigger, decimatorclock, alwaysEn)
    trigger_digital.vhdl_instance = "trigger_digital"
    inst_trigger_digital = trigger_digital(decimatorclock, digitalTriggerReset, logicAnalyzer_dec, triggerPattern, triggerSamples, digiTrigger, decimatorclock, alwaysEn)
    dac_controller.vhdl_instance = "dac_controller"
    inst_dac_controller = dac_controller(clockFtdi_i, dacReset, dacVrefTopA, dacVrefTopB, dacVrefBotA, dacVrefBotB, dacStrobe, 
                                       serialOut_i, load_i, ldac_i, clkDacOut_i, dacBusy)
    digipot_controller.vhdl_instance = "digipot_controller"
    inst_digipot_controller = digipot_controller(clockFtdi_i, digipotReset, digipotValue, digipotStrobe, digipotBusy, sda, scl)
    
    buff.vhdl_instance = "buff"
    inst_buffer = buff(clock_i, bufferReset, bufferDataIn, bufferDataOut, bufferReady, bufferOutputInputReady, 
                        bufferAllowWriteOverlap, bufferDataDirection, decimatorclock, clockFtdi, alwaysEn)
    ft245sync.vhdl_instance = "ft245sync"
    inst_ft245sync = ft245sync(clockFtdi_i, ft245reset, rxf_i, txe_i, rd_i, wr_i, oe_i, siwu_i, adbus, ft245din, ft245dout, 
                                                   ft245rw, ft245busy, ft245dataWaitIn, ft245dataWaitOut, ft245strobe)
    return connectSignals, inst_decimator1, inst_decimator2, inst_controller, inst_trigger_analog1, inst_trigger_analog2, \
           inst_buffer, inst_ft245sync, inst_digipot_controller, inst_dac_controller, inst_trigger_digital, \
           inst_digital_decimator, inst_decimator_clock_divisor