예제 #1
0
def main(cap=1e-12, res=600, n_array=47):
    ctrl = ExampleControl()

    # define ports
    m = MixedSignalModel('current_switch_array', dt=ctrl.dt)
    m.add_digital_input('ctrl', n_array)
    m.add_analog_input('v_in')
    m.add_analog_output('v_out', init=0)  # can change initial value if desired

    # find number of zeros
    m.immediate_assign(
        'n_on', n_array - sum_op([m.ctrl[k] for k in range(m.ctrl.width)]))

    # compute the unit current
    m.immediate_assign('i_unit', (m.v_in - m.v_out) / res)

    # compute the array current
    m.immediate_assign('i_array', m.n_on * m.i_unit)

    # define the voltage update on the cap
    m.next_cycle_assign(m.v_out,
                        m.v_out + m.i_array / (n_array * cap) * ctrl.dt)

    # write model
    ctrl.write_model(m)
예제 #2
0
파일: comparator.py 프로젝트: xlchan/msdsl
def main():
    # define ports
    m = MixedSignalModel('comparator')
    m.add_analog_input('in_p')
    m.add_analog_input('in_n')
    m.add_digital_output('out', init=0)
    m.add_digital_input('clk')

    # define behavior
    m.immediate_assign('out_async', m.in_p > m.in_n)
    m.next_cycle_assign(m.out, m.out_async, clk=m.clk)

    # write model
    m.compile_and_print(VerilogGenerator())
예제 #3
0
def main():
    ctrl = ExampleControl()

    # define ports
    m = MixedSignalModel('comparator', dt=ctrl.dt)
    m.add_analog_input('in_p')
    m.add_analog_input('in_n')
    m.add_digital_output('out', init=0)
    m.add_digital_input('clk')

    # define behavior
    m.immediate_assign('out_async', m.in_p > m.in_n)
    m.next_cycle_assign(m.out, m.out_async, clk=m.clk, rst="1'b0")

    # write model
    ctrl.write_model(m)