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
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)
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)
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)
.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',
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)