Esempio n. 1
0
def zybo_device_prim(clock, led, reset=None):
    """      
    """

    print("Zybo external clock frequency {:.3f} MHz".format(clock.frequency /
                                                            1e6))

    clkmgmt = ClockManagement(clock,
                              reset,
                              output_frequencies=(100e6, 125e6, 500e6),
                              vendor='xilinx')

    pll_inst = device_clock_mgmt(clkmgmt)
    maxcnt0 = int(clock.frequency)
    maxcnt1 = int(clkmgmt.clocks[0].frequency)
    maxcnt2 = int(clkmgmt.clocks[1].frequency)

    cnt0, cnt1, cnt2 = [
        Signal(intbv(0, min=0, max=mx)) for mx in (maxcnt0, maxcnt1, maxcnt2)
    ]
    led0, led1, led2 = [Signal(bool(0)) for _ in range(3)]

    # clock1, clock2, clock3 = clkmgmt.clocks
    clock1 = clkmgmt.clocksout(0)
    clock2 = clkmgmt.clocksout(1)
    clock3 = clkmgmt.clocksout(2)

    @always(clock.posedge)
    def beh_toggle0():
        clkmgmt.enable.next = True
        if cnt0 >= maxcnt0 - 1:
            led0.next = not led0
            cnt0.next = 0
        else:
            cnt0.next = cnt0 + 1

    @always(clock1.posedge)
    def beh_toggle1():
        if cnt1 >= maxcnt1 - 1:
            led1.next = not led1
            cnt1.next = 0
        else:
            cnt1.next = cnt1 + 1

    @always(clock2.posedge)
    def beh_toggle2():
        if cnt2 >= maxcnt2 - 1:
            led2.next = not led2
            cnt2.next = 0
        else:
            cnt2.next = cnt2 + 1

    @always_comb
    def beh_assign():
        led.next = concat(clkmgmt.locked, led2, led1, led0)

    return instances()
Esempio n. 2
0
def zybo_device_prim(clock, led, reset=None):
    """      
    """

    print("Zybo external clock frequency {:.3f} MHz".format(
        clock.frequency/1e6))

    clkmgmt = ClockManagement(
        clock, reset,
        output_frequencies=(100e6, 125e6, 500e6),
        vendor='xilinx'
    )

    pll_inst = device_clock_mgmt(clkmgmt)
    maxcnt0 = int(clock.frequency)
    maxcnt1 = int(clkmgmt.clocks[0].frequency)
    maxcnt2 = int(clkmgmt.clocks[1].frequency)

    cnt0, cnt1, cnt2 = [Signal(intbv(0, min=0, max=mx)) 
                        for mx in (maxcnt0, maxcnt1, maxcnt2)]
    led0, led1, led2 = [Signal(bool(0)) for _ in range(3)]

    # clock1, clock2, clock3 = clkmgmt.clocks
    clock1 = clkmgmt.clocksout(0)
    clock2 = clkmgmt.clocksout(1)
    clock3 = clkmgmt.clocksout(2)

    @always(clock.posedge)
    def beh_toggle0():
        clkmgmt.enable.next = True
        if cnt0 >= maxcnt0-1:
            led0.next = not led0
            cnt0.next = 0
        else:
            cnt0.next = cnt0 + 1

    @always(clock1.posedge)
    def beh_toggle1():
        if cnt1 >= maxcnt1-1:
            led1.next = not led1
            cnt1.next = 0
        else:
            cnt1.next = cnt1 + 1            

    @always(clock2.posedge)
    def beh_toggle2():
        if cnt2 >= maxcnt2-1:
            led2.next = not led2
            cnt2.next = 0
        else:
            cnt2.next = cnt2 + 1

    @always_comb
    def beh_assign():
        led.next = concat(clkmgmt.locked, led2, led1, led0)

    return instances()
Esempio n. 3
0
def de0nano_soc_device_prims(clock, reset, led):

    clkmgmt = ClockManagement(clock,
                              reset,
                              output_frequencies=(100e6, 200e6),
                              vendor='altera')

    pll_inst = device_clock_mgmt(clkmgmt)
    maxcnt0 = int(clock.frequency)
    maxcnt1 = int(clkmgmt.clocks[0].frequency)
    maxcnt2 = int(clkmgmt.clocks[1].frequency)

    cnt0, cnt1, cnt2 = [
        Signal(intbv(0, min=0, max=mx)) for mx in (maxcnt0, maxcnt1, maxcnt2)
    ]
    led0, led1, led2 = [Signal(bool(0)) for _ in range(3)]

    clock1, clock2 = clkmgmt.clocks

    @always(clock.posedge)
    def beh_toggle0():
        clkmgmt.enable.next = True
        if cnt0 >= maxcnt0 - 1:
            led0.next = not led0
            cnt0.next = 0
        else:
            cnt0.next = cnt0 + 1

    @always(clock1.posedge)
    def beh_toggle1():
        if cnt1 >= maxcnt1 - 1:
            led1.next = not led1
            cnt1.next = 0
        else:
            cnt1.next = cnt1 + 1

    @always(clock2.posedge)
    def beh_toggle2():
        if cnt2 >= maxcnt2 - 1:
            led2.next = not led2
            cnt2.next = 0
        else:
            cnt2.next = cnt2 + 1

    @always_comb
    def beh_assign():
        led.next = concat(False, led2, led1, led0)

    return instances()
def cmoda7_device_prim(clock, led, reset=None):

    print("External clock frequency {:.3f} MHz".format(clock.frequency / 1e6))

    clkmgmt = ClockManagement(clock,
                              reset,
                              output_frequencies=(120e6, ),
                              vendor='xilinx')

    pll_inst = device_clock_mgmt(clkmgmt)

    clock1 = clkmgmt.clocks[0]

    print("Derived clock frequency {:.3f} MHz".format(
        clkmgmt.clocks[0].frequency / 1e6))

    maxcnt0 = int(clock.frequency)
    maxcnt1 = int(clock1.frequency)

    cnt0, cnt1 = [
        Signal(intbv(0, min=0, max=mx)) for mx in (
            maxcnt0,
            maxcnt1,
        )
    ]
    led0, led1 = [Signal(bool(0)) for _ in range(2)]

    @always(clock.posedge)
    def beh_toggle0():
        clkmgmt.enable.next = True
        if cnt0 >= maxcnt0 - 1:
            led0.next = not led0
            cnt0.next = 0
        else:
            cnt0.next = cnt0 + 1

    @always(clock1.posedge)
    def beh_toggle1():
        if cnt1 >= maxcnt1 - 1:
            led1.next = not led1
            cnt1.next = 0
        else:
            cnt1.next = cnt1 + 1

    @always_comb
    def beh_assign():
        led.next = concat(led1, led0)

    return instances()
Esempio n. 5
0
def cmoda7_device_prim(clock, led, reset=None):

    print("External clock frequency {:.3f} MHz".format(
        clock.frequency/1e6))

    clkmgmt = ClockManagement(
        clock, reset,
        output_frequencies=(120e6,),
        vendor='xilinx'
    )

    pll_inst = device_clock_mgmt(clkmgmt)

    clock1 = clkmgmt.clocks[0]

    print("Derived clock frequency {:.3f} MHz".format(
        clkmgmt.clocks[0].frequency / 1e6))

    maxcnt0 = int(clock.frequency)
    maxcnt1 = int(clock1.frequency)

    cnt0, cnt1 = [Signal(intbv(0, min=0, max=mx))
                        for mx in (maxcnt0, maxcnt1,)]
    led0, led1  = [Signal(bool(0)) for _ in range(2)]

    @always(clock.posedge)
    def beh_toggle0():
        clkmgmt.enable.next = True
        if cnt0 >= maxcnt0 - 1:
            led0.next = not led0
            cnt0.next = 0
        else:
            cnt0.next = cnt0 + 1

    @always(clock1.posedge)
    def beh_toggle1():
        if cnt1 >= maxcnt1 - 1:
            led1.next = not led1
            cnt1.next = 0
        else:
            cnt1.next = cnt1 + 1            

    @always_comb
    def beh_assign():
        led.next = concat(led1, led0)

    return instances()
Esempio n. 6
0
def de0nano_soc_device_prims(clock, reset, led):
    
    clkmgmt = ClockManagement(clock, reset,
                              output_frequencies=(100e6, 200e6),
                              vendor='altera')

    pll_inst = device_clock_mgmt(clkmgmt)
    maxcnt0 = int(clock.frequency)
    maxcnt1 = int(clkmgmt.clocks[0].frequency)
    maxcnt2 = int(clkmgmt.clocks[1].frequency)

    cnt0, cnt1, cnt2 = [Signal(intbv(0, min=0, max=mx)) 
                        for mx in (maxcnt0, maxcnt1, maxcnt2)]
    led0, led1, led2 = [Signal(bool(0)) for _ in range(3)]

    clock1, clock2 = clkmgmt.clocks

    @always(clock.posedge)
    def beh_toggle0():
        clkmgmt.enable.next = True
        if cnt0 >= maxcnt0-1:
            led0.next = not led0
            cnt0.next = 0
        else:
            cnt0.next = cnt0 + 1

    @always(clock1.posedge)
    def beh_toggle1():
        if cnt1 >= maxcnt1-1:
            led1.next = not led1
            cnt1.next = 0
        else:
            cnt1.next = cnt1 + 1            

    @always(clock2.posedge)
    def beh_toggle2():
        if cnt2 >= maxcnt2-1:
            led2.next = not led2
            cnt2.next = 0
        else:
            cnt2.next = cnt2 + 1

    @always_comb
    def beh_assign():
        led.next = concat(False, led2, led1, led0)

    return instances()
def top_clock_mgmt_wrap(clockext, resetext, dripple, status, args):
    # note: the model will have errors for many frequencies the test
    # will only work for rational periods (inverse of the freq).
    clkmgmt = ClockManagement(clockext,
                              reset=resetext,
                              output_frequencies=(
                                  125e6,
                                  200e6,
                              ))
    clkmgmt.vendor = args.vendor

    # @todo: add external_reset_sync module
    # rst_inst = external_reset_sync(clockext, resetext, reset)

    # create the pll instance
    pll_inst = device_clock_mgmt(clkmgmt)

    clockcsr = Signal(bool(0))
    clockdat = Signal(bool(0))
    dcnt = Signal(intbv(0, min=0, max=int(clkmgmt.clocks[0].frequency / 1e6)))
    dmax = dcnt.max

    @always_comb
    def beh_clock_assign():
        clockcsr.next = clkmgmt.clocksout[0]
        clockdat.next = clkmgmt.clocksout[1]

    @always(clockext.posedge)
    def beh_assign():
        clkmgmt.enable.next = True

    @always_seq(clockcsr.posedge, reset=resetext)
    def beh_cnt():
        if dcnt == dmax - 1:
            dcnt.next = 0
            dripple.next = not dripple
        else:
            dcnt.next = dcnt + 1

    @always_seq(clockdat.posedge, reset=resetext)
    def beh_led_drv():
        status.next[0] = clkmgmt.locked

    return pll_inst, beh_assign, beh_clock_assign, beh_cnt, beh_led_drv
Esempio n. 8
0
def top_clock_mgmt_wrap(clockext, resetext, dripple, status, args):
    # note: the model will have errors for many frequencies the test
    # will only work for rational periods (inverse of the freq).
    clkmgmt = ClockManagement(clockext, reset=resetext,
                              output_frequencies=(125e6, 200e6,))
    clkmgmt.vendor = args.vendor

    # @todo: add external_reset_sync module
    # rst_inst = external_reset_sync(clockext, resetext, reset)

    # create the pll instance
    pll_inst = device_clock_mgmt(clkmgmt)

    clockcsr = Signal(bool(0))
    clockdat = Signal(bool(0))
    dcnt = Signal(intbv(0, min=0, max=int(clkmgmt.clocks[0].frequency/1e6)))
    dmax = dcnt.max

    @always_comb
    def beh_clock_assign():
        clockcsr.next = clkmgmt.clocksout[0]
        clockdat.next = clkmgmt.clocksout[1]

    @always(clockext.posedge)
    def beh_assign():
        clkmgmt.enable.next = True

    @always_seq(clockcsr.posedge, reset=resetext)
    def beh_cnt():
        if dcnt == dmax-1:
            dcnt.next = 0
            dripple.next = not dripple
        else:
            dcnt.next = dcnt + 1

    @always_seq(clockdat.posedge, reset=resetext)
    def beh_led_drv():
        status.next[0] = clkmgmt.locked

    return pll_inst, beh_assign, beh_clock_assign, beh_cnt, beh_led_drv