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()
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()
def top_serdes_wrap(clockext, resetext, sero_p, sero_n, seri_p, seri_n, args=None): """ """ clkmgmt = ClockManagement(clockext, reset=resetext, output_frequencies=(125e6, 1e9)) clkmgmt.vendor = args.vendor # @todo: add external_reset_sync module
def top_serdes_wrap(clockext, resetext, sero_p, sero_n, seri_p, seri_n, args=None): """ """ clkmgmt = ClockManagement(clockext, reset=resetext, output_frequencies=(125e6, 1e9)) clkmgmt.vendor = args.vendor
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
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
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()