Exemplo n.º 1
0
def adc_calib_obj(spec):
    base_expr = 'abs((a-1.0))+abs(modelError)'
    base_expr += " + abs((b - round(b,{quantize})))"
    expr = base_expr.format(quantize=1.0 / 128)
    new_spec = spec.copy()
    new_spec.objective = parser.parse_expr(expr)
    return new_spec
Exemplo n.º 2
0
def dac_calib_obj(spec,out_scale):
  base_expr = '{deviate}*abs((a-1.0))+{gainOut}*abs(modelError)+abs(b)'
  expr = base_expr.format(gainOut=1.0/out_scale, \
                          deviate=0.2, \
                          quantize=1.0/128)
  new_spec = spec.copy()
  new_spec.objective = parser.parse_expr(expr)
  return new_spec
Exemplo n.º 3
0
def mul_assign_calib_obj(spec,in0,in1,out):
  base_expr =  "{out}*abs(modelError)+{in0}*abs(u)+{in1}*abs(v)+{out}*abs(w)"
  expr = base_expr.format(out=1.0/out, \
                          in0=1.0/in0, \
                          in1=1.0/in1)
  new_spec = spec.copy()
  new_spec.objective = parser.parse_expr(expr)
  return new_spec
Exemplo n.º 4
0
def mkmodel(blk,terms):
  variables = list(map(lambda i: "c%d" % i, range(1,len(terms)+1))) \
              + ['c0']
  expr = ['c0']
  for coeff,term in zip(variables,terms):
    expr.append("%s*%s" % (coeff,term))
  expr_text = "+".join(expr)
  expr_ast = parser.parse_expr(expr_text)
  return PhysicalModelSpec.make(blk,expr_ast)
Exemplo n.º 5
0
    def __init__(self):
        rulelib.Rule.__init__(self, "flip")
        self.virt.add_input('a',blocklib.BlockSignalType.ANALOG,  \
                            unifylib.UnifyConstraint.NONE)

        self.virt.set_output(blocklib.BlockSignalType.ANALOG, \
                             unifylib.UnifyConstraint.NONE)
        e = parser.parse_expr('-a')
        self.virt.add_expr("*", e)
Exemplo n.º 6
0
def vga_assign_calib_obj(spec,in0,out):
  base_expr =  "{out}*abs(modelError) + {out}*abs(v) + {in0}*abs(u) + {deviate}*abs((a-1.0))"
  #base_expr += " + abs((b - round(b,{quantize})))"
  expr = base_expr.format(out=1.0/out, \
                          in0=1.0/in0, \
                          deviate=0.005, \
                          quantize=1.0/128)
  new_spec = spec.copy()
  new_spec.objective = parser.parse_expr(expr)
  return new_spec
Exemplo n.º 7
0
def dac_calib_obj(spec,out_scale):
  subobjs = [
    ("abs((a-1.0))", 1, 0.02), \
    ("abs((b))", 1, 0.01*out_scale), \
    ("abs(modelError)", 1, 0.001*(out_scale)), \
    ("abs(noise)", 1, 0.001*out_scale)
  ]
  new_spec = spec.copy()
  new_spec.objective = MultiObjective()
  for expr,prio,eps in subobjs:
     new_spec.objective.add(parser.parse_expr(expr), \
                                priority=prio,epsilon=eps)
  return new_spec
Exemplo n.º 8
0
def integ_calib_obj(spec, in_scale, out_scale):
    # u : this has high error... don't fit this
    exprs = [("abs((a-1.0))", 2, 0.02), ("abs((b-1.0))", 2, 0.01),
             ("abs(modelError)", 2, 0.001), ("abs(v)", 2, 0.001),
             ("abs(c)", 2, 0.005), ("abs(noise)", 2, 0.0001)]
    new_spec = spec.copy()
    new_spec.objective = MultiObjective()
    for expr, priority, epsilon in exprs:
        new_spec.objective.add(parser.parse_expr(expr), \
                               priority=priority, \
                               epsilon=epsilon)

    return new_spec
Exemplo n.º 9
0
def fan_calib_obj(spec, idx, out):
    subobjs = [ \
                ("abs(modelError)",2,0.0001*out), \
                ("abs(b{idx})",2,0.0001*out), \
               ("abs((1.0-a{idx}))",2,0.01), \
                ("abs(noise)",2,0.00001*out)]

    new_spec = spec.copy()
    new_spec.objective = MultiObjective()
    for subobj, prio, eps in subobjs:
        expr = subobj.format(idx=idx)
        new_spec.objective.add(parser.parse_expr(expr), prio, eps)

    return new_spec
Exemplo n.º 10
0
def adc_calib_obj(spec):
    subobj = [
      ("abs((a-1.0))", 1, 0.05), \
      ("abs(modelError)", 1, 0.01), \
      ("abs(noise)", 1, 0.01), \
      ("abs(b)", 1, 0.01)
    ]
    new_spec = spec.copy()
    new_spec.objective = MultiObjective()
    for expr, priority, eps in subobj:
        new_spec.objective.add(parser.parse_expr(expr),
                  priority=priority, \
                  epsilon=eps)

    return new_spec
Exemplo n.º 11
0
def vga_assign_calib_obj(spec,in0_scale,out_scale):
  #("abs((u))", 1, 0.001*in0_scale), \
  subobjs = [
    ("abs((a-1.0))", 1, 0.02), \
    ("abs((b))", 1, 0.005), \
    ("abs((v))", 1, 0.001*out_scale), \
    ("abs(modelError)", 1, 0.001*out_scale), \
    ("abs(noise)", 1, 0.001*out_scale)
  ]
  new_spec = spec.copy()
  new_spec.objective = MultiObjective()
  for expr,prio,eps in subobjs:
     new_spec.objective.add(parser.parse_expr(expr), \
                                priority=prio,epsilon=eps)
  return new_spec
Exemplo n.º 12
0
import hwlib.hcdc.llenums as enums
from hwlib.block import *
import ops.opparse as parser


cin= Block('cin',BlockType.ROUTE, \
            [enums.NoModeType])
cin.ll_name = "chip_input"
cin.modes.add_all([['*']])
cin.inputs.add(BlockInput('x', BlockSignalType.ANALOG, \
                          ll_identifier=enums.PortType.IN0))
cin.outputs.add(BlockOutput('z', BlockSignalType.ANALOG, \
                            ll_identifier=enums.PortType.OUT0))

cin.outputs['z'].relation.bind(['_'], \
                               parser.parse_expr('x'))
cin.inputs['x'] \
    .interval.bind(['*'],interval.Interval(-20,20))
cin.outputs['z'] \
    .interval.bind(['*'],interval.Interval(-20,20))



cout= Block('cout',BlockType.ROUTE, \
            [enums.NoModeType])
cout.ll_name = "chip_output"

cout.modes.add_all([['*']])
cout.inputs.add(BlockInput('x', BlockSignalType.ANALOG, \
                          ll_identifier=enums.PortType.IN0))
cout.outputs.add(BlockOutput('z', BlockSignalType.ANALOG, \
Exemplo n.º 13
0
import hwlib.hcdc.llenums as enums
from hwlib.block import *
import ops.opparse as parser

ext_out = Block('extout',BlockType.COMPUTE, \
            [enums.NoModeType])
ext_out.ll_name = "chip_output"
ext_out.modes.add_all([["*"]])
ext_out.inputs.add(BlockInput('x', BlockSignalType.ANALOG, \
                              ll_identifier=enums.PortType.IN0))
ext_out.outputs.add(BlockOutput('z', BlockSignalType.ANALOG, \
                                ll_identifier=enums.PortType.OUT0, \
                                extern=True))

factor = 1.2 / 2.0
NOISE = 0.01

ext_out.outputs['z'].relation.bind(["*"], \
                               parser.parse_expr('emit((%s*x))' % factor))

ext_out.inputs['x'] \
       .interval.bind(["*"],interval.Interval(-2,2))
ext_out.outputs['z'] \
       .interval.bind(["*"],interval.Interval(-2*factor,2*factor))
ext_out.outputs['z'] \
     .noise.bind(['*'],NOISE)
Exemplo n.º 14
0
                ("abs(noise)",2,0.00001*out)]

    new_spec = spec.copy()
    new_spec.objective = MultiObjective()
    for subobj, prio, eps in subobjs:
        expr = subobj.format(idx=idx)
        new_spec.objective.add(parser.parse_expr(expr), prio, eps)

    return new_spec


for scale in ['m', 'h']:
    for idx, port in enumerate([p_out0, p_out1, p_out2]):
        pat = ['_', '_', '_', scale]
        pat[idx] = '+'
        fan.outputs[port.name].relation.bind(pat, parser.parse_expr('x'))
        spec = DeltaSpec(parser.parse_expr('a{idx}*x+b{idx}'.format(idx=idx)))
        #spec.param('a{idx}'.format(idx=idx),DeltaParamType.CORRECTABLE,ideal=1.0)
        spec.param('a{idx}'.format(idx=idx), DeltaParamType.GENERAL, ideal=1.0)
        spec.param('b{idx}'.format(idx=idx), DeltaParamType.GENERAL, ideal=0.0)
        new_spec = fan_calib_obj(spec, idx, 1.0 if scale == 'm' else 10.0)
        fan.outputs[port.name].deltas.bind(pat, new_spec)

        pat[idx] = '-'
        fan.outputs[port.name].relation.bind(pat, parser.parse_expr('-x'))
        spec = DeltaSpec(parser.parse_expr('-a{idx}*x+b{idx}'.format(idx=idx)))
        #spec.param('a{idx}'.format(idx=idx),DeltaParamType.CORRECTABLE,ideal=1.0)
        spec.param('a{idx}'.format(idx=idx), DeltaParamType.GENERAL, ideal=1.0)
        spec.param('b{idx}'.format(idx=idx), DeltaParamType.GENERAL, ideal=0.0)
        new_spec = fan_calib_obj(spec, idx, 1.0 if scale == 'm' else 10.0)
        fan.outputs[port.name].deltas.bind(pat, new_spec)
Exemplo n.º 15
0
import hwlib.hcdc.llenums as enums
from hwlib.block import *
import ops.opparse as parser

adc = Block('adc',BlockType.COMPUTE, \
            [enums.RangeType])
adc.modes.add_all([['m'], ['h']])
LOW_NOISE = 0.01
HIGH_NOISE = 0.1
adc.inputs.add(BlockInput('x', BlockSignalType.ANALOG, \
                          ll_identifier=enums.PortType.IN0))
adc.outputs.add(BlockOutput('z', BlockSignalType.DIGITAL, \
                            ll_identifier=enums.PortType.OUT0))

adc.outputs['z'].relation.bind(['m'], \
                               parser.parse_expr('0.5*x'))

adc.outputs['z'].relation.bind(['h'], \
                               parser.parse_expr('0.05*x'))
adc.inputs['x'] \
     .noise.bind(['m'],LOW_NOISE)
adc.inputs['x'] \
     .noise.bind(['h'],HIGH_NOISE)

MAX_FREQ = 40000.0
adc.outputs['z'] \
  .freq_limit.bind(['_'], MAX_FREQ)



Exemplo n.º 16
0
dac = Block('dac',BlockType.COMPUTE, \
            [HLDACSourceType,enums.RangeType])
dac.modes.add_all([
  ['const','m'],
  ['const','h'],
  ['dyn','m'],
  ['dyn','h']

])
dac.inputs.add(BlockInput('x', BlockSignalType.DIGITAL, \
                          ll_identifier=enums.PortType.IN0))
dac.outputs.add(BlockOutput('z', BlockSignalType.ANALOG, \
                            ll_identifier=enums.PortType.OUT0))

dac.outputs['z'].relation.bind(['dyn','m'], \
                               parser.parse_expr('2.0*x'))
dac.outputs['z'].relation.bind(['dyn','h'], \
                               parser.parse_expr('20.0*x'))
dac.outputs['z'].relation.bind(['const','m'], \
                               parser.parse_expr('2.0*c'))
dac.outputs['z'].relation.bind(['const','h'], \
                               parser.parse_expr('20.0*c'))

dac.outputs['z'] \
    .interval.bind(['_','h'],interval.Interval(-20,20))
dac.outputs['z'] \
    .interval.bind(['_','m'],interval.Interval(-2,2))

LOW_NOISE = 0.01
HIGH_NOISE = 0.1
dac.outputs['z'] \
Exemplo n.º 17
0
  .freq_limit.bind(['_','_','_'], MAX_FREQ)

integ.data.add(BlockData('z0', BlockDataType.CONST))

DEL = 1.0 / 128
DIGITAL_RANGE_LOWER = 128
DIGITAL_RANGE_UPPER = 127
DIGITAL_QUANTIZE = 256
integ.data['z0'] \
    .interval.bind(['_','_','_'],interval.Interval(-DEL*DIGITAL_RANGE_LOWER,DEL*DIGITAL_RANGE_UPPER))
integ.data['z0'] \
    .quantize.bind(['_','_','_'],Quantize(DIGITAL_QUANTIZE,QuantizeType.LINEAR))


integ.outputs['z'].relation \
                 .bind(['m','m','+'],parser.parse_expr('integ(x,(2.0*z0))'))
integ.outputs['z'].relation \
                 .bind(['h','h','+'],parser.parse_expr('integ(x,(20.0*z0))'))
integ.outputs['z'].relation \
                 .bind(['m','h','+'],parser.parse_expr('integ((10.0*x),(20.0*z0))'))
integ.outputs['z'].relation \
                 .bind(['h','m','+'],parser.parse_expr('integ((0.1*x),(2.0*z0))'))

integ.outputs['z'].relation \
                 .bind(['m','m','-'],parser.parse_expr('-integ(x,(2.0*z0))'))

integ.outputs['z'].relation \
                 .bind(['h','h','-'],parser.parse_expr('-integ(x,(20.0*z0))'))


integ.outputs['z'].relation \
Exemplo n.º 18
0
import hwlib.hcdc.llenums as enums
from hwlib.block import *
import ops.opparse as parser

ext_in = Block('extin',BlockType.COMPUTE, \
            [enums.NoModeType])

ext_in.modes.add_all([["*"]])
ext_in.inputs.add(BlockInput('x', BlockSignalType.ANALOG, \
                              ll_identifier=enums.PortType.IN0, \
                              extern=True))
ext_in.outputs.add(BlockOutput('z', BlockSignalType.ANALOG, \
                                ll_identifier=enums.PortType.OUT0))

factor = 2.0
NOISE = 0.01
ext_in.outputs['z'].relation.bind(["*"], \
                               parser.parse_expr('%s*extvar(x)' % factor))

ext_in.inputs['x'] \
       .interval.bind(["*"],interval.Interval(-2*factor,2*factor))
ext_in.outputs['z'] \
     .noise.bind(['*'],NOISE)

ext_in.outputs['z'] \
       .interval.bind(["*"],interval.Interval(-2,2))
Exemplo n.º 19
0
mult.outputs['z'] \
  .freq_limit.bind(['h','_','_'], MAX_FREQ)


mult.data.add(BlockData('c',BlockDataType.CONST))
DLT = 1/128.0
DIGITAL_RANGE_LOWER = 128
DIGITAL_RANGE_UPPER = 127
DIGITAL_QUANTIZE = 256
mult.data['c'] \
    .interval.bind(['_','_','_'],interval.Interval(-DIGITAL_RANGE_LOWER*DLT,DIGITAL_RANGE_UPPER*DLT))
mult.data['c'] \
    .quantize.bind(['_','_','_'],Quantize(DIGITAL_QUANTIZE,QuantizeType.LINEAR))

mult.outputs['z'].relation \
                 .bind(['x','m','m'],parser.parse_expr('c*x'))
mult.outputs['z'].relation \
                 .bind(['x','m','h'],parser.parse_expr('10.0*c*x'))
mult.outputs['z'].relation \
                 .bind(['x','h','m'],parser.parse_expr('0.1*c*x'))
mult.outputs['z'].relation \
                 .bind(['x','h','h'],parser.parse_expr('c*x'))
mult.outputs['z'].relation \
                 .bind(['m','m','m'],parser.parse_expr('0.5*x*y'))
mult.outputs['z'].relation \
                 .bind(['h','m','h'],parser.parse_expr('0.5*x*y'))
mult.outputs['z'].relation \
                 .bind(['m','h','h'],parser.parse_expr('0.5*x*y'))
mult.outputs['z'].relation \
                 .bind(['m','m','h'],parser.parse_expr('5.0*x*y'))
mult.outputs['z'].relation \
Exemplo n.º 20
0
from hwlib.block import *
import ops.opparse as parser

lut = Block('lut',BlockType.COMPUTE, \
            [enums.NoModeType])

lut.modes.add_all([['*']])
lut.inputs.add(BlockInput('x', BlockSignalType.DIGITAL, \
                          ll_identifier=enums.PortType.NOPORT))
lut.outputs.add(BlockOutput('z', BlockSignalType.DIGITAL, \
                            ll_identifier=enums.PortType.NOPORT))

lut.data.add(BlockData('e', BlockDataType.EXPR, \
                       inputs=['y']))

func_impl = parser.parse_expr('e')
lut.outputs['z'].relation.bind(['_'], \
                               parser.parse_expr('f(x)',{
                                 'f':(['y'],func_impl)
                               }))

lut.inputs['x'] \
    .interval.bind(['*'],interval.Interval(-1,0.9921875))
lut.outputs['z'] \
    .interval.bind(['*'],interval.Interval(-1,0.9921875))
lut.inputs['x'] \
    .quantize.bind(['*'],Quantize(256,QuantizeType.LINEAR,scale=1.0))
lut.outputs['z'] \
    .quantize.bind(['*'],Quantize(256,QuantizeType.LINEAR,scale=1.0))

lut.state.add(BlockState('source', BlockStateType.CONNECTION, \