示例#1
0
def mkdig(port):
    dig= util.make_dig_props(enums.RangeType.MED,\
                                        glb.CTX.get(glb.GLProp.DIGITAL_INTERVAL,
                                                "lut","*","*",None),
                                        glb.CTX.get(glb.GLProp.DIGITAL_QUANTIZE,
                                                "lut","*","*",None)
    )
    dig.set_continuous(0,glb.CTX.get(glb.GLProp.MAX_FREQ, \
                                        "lut","*","*",None))
    dig.set_coverage(glb.CTX.get(glb.GLProp.DIGITAL_COVERAGE,
                                                "lut","*","*",port))
    return dig
示例#2
0
def scale_model(integ):
    comp_modes = get_comp_modes()
    scale_modes = list(get_scale_modes())
    for comp_mode in comp_modes:
        standard, nonstandard = gutil.partition(is_standard, scale_modes)
        extended, _ = gutil.partition(is_extended, scale_modes)
        integ.set_scale_modes(comp_mode, standard,
                              glb.HCDCSubset.all_subsets())
        integ.set_scale_modes(comp_mode, nonstandard,
                              [glb.HCDCSubset.UNRESTRICTED])
        integ.add_subsets(comp_mode, extended, [glb.HCDCSubset.EXTENDED])
        for scale_mode in scale_modes:
            get_prop = lambda p: glb.CTX.get(p, integ.name, comp_mode,
                                             scale_mode, None)
            inrng, outrng = scale_mode
            analog_in = util.make_ana_props(inrng, \
                                            get_prop(glb.GLProp.CURRENT_INTERVAL))
            analog_in.set_bandwidth(0, get_prop(glb.GLProp.MAX_FREQ), units.hz)

            analog_out = util.make_ana_props(outrng, \
                                             get_prop(glb.GLProp.CURRENT_INTERVAL))
            dig_props = util.make_dig_props(enums.RangeType.MED,
                                            get_prop(glb.GLProp.DIGITAL_INTERVAL), \
                                            get_prop(glb.GLProp.DIGITAL_QUANTIZE))
            dig_props.set_constant()
            integ.set_props(comp_mode, scale_mode, ['in'], analog_in)
            integ.set_props(comp_mode, scale_mode, ["ic"], dig_props)
            integ.set_props(comp_mode,scale_mode,["out"],\
                            analog_out,
                            handle=":z[0]")
            integ.set_props(comp_mode,scale_mode,["out"],\
                            analog_out,
                            handle=":z")
            integ.set_props(comp_mode,
                            scale_mode, ["out"],
                            analog_out,
                            handle=":z'")
            integ.set_props(comp_mode, scale_mode, ["out"], analog_out)

            scf_inout = outrng.coeff() / inrng.coeff()
            # alteration: initial condition, is not scaled
            scf_ic = outrng.coeff() * 2.0
            integ.set_coeff(comp_mode,
                            scale_mode,
                            "out",
                            scf_inout,
                            handle=':z\'')
            integ.set_coeff(comp_mode, scale_mode, "out", scf_ic, ':z[0]')
            integ.set_coeff(comp_mode, scale_mode, "out", 1.0, handle=':z')
            integ.set_coeff(comp_mode, scale_mode, "out", 1.0)
示例#3
0
def adc_scale_model(adc):
    modes = adc_get_modes()
    std, nonstd = gutil.partition(adc_is_standard, modes)
    adc.set_scale_modes("*", std, glb.HCDCSubset.all_subsets())
    adc.set_scale_modes("*",nonstd,[glb.HCDCSubset.UNRESTRICTED, \
                                    glb.HCDCSubset.EXTENDED])
    for mode in modes:
        get_prop = lambda p: glb.CTX.get(p, adc.name, '*', mode, None)

        coeff = (1.0 / mode.coeff()) * get_prop(glb.GLProp.COEFF)
        analog_props = util.make_ana_props(
            mode, get_prop(glb.GLProp.CURRENT_INTERVAL))
        #analog_props.set_bandwidth(0,20,units.khz)

        digital_props = util.make_dig_props(
            enums.RangeType.MED, get_prop(glb.GLProp.DIGITAL_INTERVAL),
            get_prop(glb.GLProp.DIGITAL_QUANTIZE))
        digital_props.set_resolution(get_prop(glb.GLProp.DIGITAL_RESOLUTION))
        digital_props.set_coverage(get_prop(glb.GLProp.DIGITAL_COVERAGE))
        digital_props.set_continuous(0, get_prop(glb.GLProp.MAX_FREQ))
        adc.set_props("*", mode, ["in"], analog_props)
        adc.set_props("*", mode, ["out"], digital_props)
        adc.set_coeff("*", mode, 'out', coeff)
示例#4
0
def dac_scale_model(dac):
    modes = dac_get_modes()
    std, nonstd = gutil.partition(dac_is_standard, modes)
    dac.set_scale_modes("*", std, glb.HCDCSubset.all_subsets())
    dac.set_scale_modes("*",nonstd,[glb.HCDCSubset.UNRESTRICTED, \
                                    glb.HCDCSubset.EXTENDED])
    for mode in modes:
        get_prop = lambda p: glb.CTX.get(p, dac.name, '*', mode, None)

        sign, rng = mode
        # ERRATA: dac does scale up.
        coeff = sign.coeff() * rng.coeff() * get_prop(glb.GLProp.COEFF)
        digital_props = util.make_dig_props(
            enums.RangeType.MED, get_prop(glb.GLProp.DIGITAL_INTERVAL),
            get_prop(glb.GLProp.DIGITAL_QUANTIZE))
        ana_props = util.make_ana_props(rng,
                                        get_prop(glb.GLProp.CURRENT_INTERVAL))
        digital_props.set_continuous(0, get_prop(glb.GLProp.MAX_FREQ))
        digital_props.set_resolution(get_prop(glb.GLProp.DIGITAL_RESOLUTION))
        digital_props.set_coverage(get_prop(glb.GLProp.DIGITAL_COVERAGE))
        dac.set_coeff("*", mode, 'out', coeff)
        dac.set_props("*", mode, ["in"], digital_props)
        dac.set_props("*", mode, ["out"], ana_props)
示例#5
0
                  .set_op("*","out",ops.Var("in")) \
                  .set_props("*","*",["in"],props_in) \
                  .set_props("*","*",["out"], props_out) \
                  .set_coeff("*","*","out",coeff) \
                  .check()


# DUE DAC -> VTOI

coeff = glb.CTX.get(glb.GLProp.COEFF,"ext_chip_in",
                    "*","*","out")

props_in = util.make_dig_props(enums.RangeType.MED, \
                               glb.CTX.get( glb.GLProp.DIGITAL_INTERVAL, \
                                        'ext_chip_in', \
                                        "*","*",'in'), \
                               glb.CTX.get(glb.GLProp.DIGITAL_QUANTIZE, \
                                       'ext_chip_in', \
                                       "*","*","in"))
props_in.set_resolution(glb.CTX.get(glb.GLProp.DIGITAL_RESOLUTION,
                                 "ext_chip_in",
                                 "*","*",None))
props_in.set_coverage(glb.CTX.get(glb.GLProp.DIGITAL_COVERAGE, \
                                  "ext_chip_in", \
                                  "*","*","in"))
# sample rate is 10 us
props_in.set_clocked(glb.CTX.get(glb.GLProp.DIGITAL_SAMPLE, \
                             "ext_chip_in",
                             "*","*",None),
                     glb.CTX.get(glb.GLProp.INBUF_SIZE,
                             'ext_chip_in',
示例#6
0
def scale_model(mult):
    vga_modes, mul_modes = get_modes()
    std, nonstd = gutil.partition(is_standard_mul, mul_modes)
    ext, _ = gutil.partition(is_extended_mul, mul_modes)
    mult.set_scale_modes("mul", std, glb.HCDCSubset.all_subsets())
    mult.set_scale_modes("mul", nonstd, [glb.HCDCSubset.UNRESTRICTED])
    mult.add_subsets("mul", ext, [glb.HCDCSubset.EXTENDED])

    std, nonstd = gutil.partition(is_standard_vga, vga_modes)
    ext, _ = gutil.partition(is_extended_vga, vga_modes)
    mult.set_scale_modes("vga", std, glb.HCDCSubset.all_subsets())
    mult.set_scale_modes("vga", nonstd, [glb.HCDCSubset.UNRESTRICTED])
    mult.add_subsets("vga", ext, [glb.HCDCSubset.EXTENDED])

    for mode in mul_modes:
        in0rng, in1rng, outrng = mode
        get_prop = lambda p: glb.CTX.get(p, mult.name, 'mul', mode, None)
        # ERRATA: virtual scale of 0.5
        scf = 0.5 * outrng.coeff() / (in0rng.coeff() * in1rng.coeff())
        dig_props = util.make_dig_props(enums.RangeType.MED, \
                                        get_prop(glb.GLProp.DIGITAL_INTERVAL),
                                        get_prop(glb.GLProp.DIGITAL_QUANTIZE))
        dig_props.set_constant()
        dig_props.set_resolution(get_prop(glb.GLProp.DIGITAL_RESOLUTION))
        mult.set_props(
            "mul", mode, ["in0"],
            util.make_ana_props(in0rng, get_prop(glb.GLProp.CURRENT_INTERVAL)))
        mult.set_props(
            "mul", mode, ["in1"],
            util.make_ana_props(in1rng, get_prop(glb.GLProp.CURRENT_INTERVAL)))
        mult.set_props("mul", mode, ["coeff"], dig_props)
        mult.set_props(
            "mul", mode, ["out"],
            util.make_ana_props(outrng, get_prop(glb.GLProp.CURRENT_INTERVAL)))
        mult.set_coeff("mul", mode, 'out', scf)

    for mode in vga_modes:
        in0rng, outrng = mode
        # ERRATA: virtual scale of 0.5, but coefficient is scaled by two
        scf = outrng.coeff() / in0rng.coeff()
        get_prop = lambda p: glb.CTX.get(p, mult.name, 'vga', mode, None)

        dig_props = util.make_dig_props(enums.RangeType.MED,\
                                        get_prop(glb.GLProp.DIGITAL_INTERVAL), \
                                        get_prop(glb.GLProp.DIGITAL_QUANTIZE))
        dig_props.set_constant()
        dig_props.set_resolution(get_prop(glb.GLProp.DIGITAL_RESOLUTION))
        mult.set_props("vga",mode,["in0"],
                      util.make_ana_props(in0rng, \
                                          get_prop(glb.GLProp.CURRENT_INTERVAL)
                      ))
        mult.set_props("vga",mode,["in1"],
                      util.make_ana_props(enums.RangeType.MED, \
                                          get_prop(glb.GLProp.CURRENT_INTERVAL)
                      ))
        mult.set_props("vga", mode, ["coeff"], dig_props)
        mult.set_props("vga",mode,["out"],
                      util.make_ana_props(outrng, \
                                          get_prop(glb.GLProp.CURRENT_INTERVAL)
                      ))
        mult.set_coeff("vga", mode, 'out', scf)