Hello,
I want to implement a clock distribution system for data converters, here is my setup:
- A source produces two free running clocks at 1 GHz (CLK) and 1 MHz (SCLK), they are generated together so they have know and fixed phase relation
- An HMC7044 is connected to the source
- An FPGA can control the HMC digital inputs
The goal is to have deterministic phase relations between a specific SCLK edge and the output clocks of the HMC7044.
My idea is to do the following:
1) Power up the HMC, CLK and SCLK generation is already stable
2) Turn on RFsync buffer on the HMC to synchronize the internal SYSREF timer with the SCLK signal
3) Disable RFsync buffer, from now on local SYSREF is synchronized with SCLK
4) The FPGA, also connected to SCLK, chooses a specific rising edge and drives the GPI pin to 1 and then to 0 to enable a reseed request
Q: Is it possible to do so?
At the moment I observe the following:
After step 2 and 3, the fpga chooses a rising edge every ms and I see that there is fixed phase alignment between HMC outputs and SCLK an the input at every reseed request
If I repeat steps 2 and 3, then there is again a fixed phase alignment but this is different from the previous value.
# glbl_cfg1_swrst[0:0] = 0x0 dut.write(0x0, 0x0) # glbl_cfg1_sleep[0:0] = 0x0 # glbl_cfg1_restart[1:1] = 0x0 # sysr_cfg1_pulsor_req[2:2] = 0x0 # pll1_cfg1_forceholdover[4:4] = 0x0 # glbl_cfg1_perf_pllvco[5:5] = 0x0 # dist_cfg1_perf_floor[6:6] = 0x0 # sysr_cfg1_reseed_req[7:7] = 0x0 dut.write(0x1, 0x0) # sysr_cfg1_rev[0:0] = 0x0 # sysr_cfg1_slipN_req[1:1] = 0x0 # pll2_cfg1_autotune_trig[2:2] = 0x0 dut.write(0x2, 0x0) # glbl_cfg1_ena_pll1[0:0] = 0x0 # glbl_cfg1_ena_pll2[1:1] = 0x0 # glbl_cfg1_ena_sysr[2:2] = 0x1 # glbl_cfg2_ena_vcos[4:3] = 0x0 # glbl_cfg1_ena_sysri[5:5] = 0x1 dut.write(0x3, 0x24) # glbl_cfg7_ena_clkgr[6:0] = 0x3 dut.write(0x4, 0x3) # glbl_cfg4_ena_rpath[3:0] = 0x3 # dist_cfg1_refbuf0_as_rfsync[4:4] = 0x1 # dist_cfg1_refbuf1_as_extvco[5:5] = 0x1 # pll2_cfg2_syncpin_modesel[7:6] = 0x1 dut.write(0x5, 0x73) # glbl_cfg1_clear_alarms[0:0] = 0x0 dut.write(0x6, 0x0) # glbl_reserved[0:0] = 0x0 dut.write(0x7, 0x0) # glbl_cfg1_dis_pll2_syncatlock[0:0] = 0x1 dut.write(0x9, 0x1) # glbl_cfg5_ibuf0_en[0:0] = 0x1 # glbl_cfg5_ibuf0_mode[4:1] = 0x1 dut.write(0xA, 0x3) # glbl_cfg5_ibuf1_en[0:0] = 0x1 # glbl_cfg5_ibuf1_mode[4:1] = 0xA dut.write(0xB, 0x15) # glbl_cfg5_ibuf2_en[0:0] = 0x0 # glbl_cfg5_ibuf2_mode[4:1] = 0x3 dut.write(0xC, 0x6) # glbl_cfg5_ibuf3_en[0:0] = 0x0 # glbl_cfg5_ibuf3_mode[4:1] = 0x3 dut.write(0xD, 0x6) # glbl_cfg5_ibufv_en[0:0] = 0x1 # glbl_cfg5_ibufv_mode[4:1] = 0x3 dut.write(0xE, 0x7) # pll1_cfg2_rprior1[1:0] = 0x0 # pll1_cfg2_rprior2[3:2] = 0x1 # pll1_cfg2_rprior3[5:4] = 0x2 # pll1_cfg2_rprior4[7:6] = 0x3 dut.write(0x14, 0xE4) # pll1_cfg3_los_valtime_sel[2:0] = 0x3 dut.write(0x15, 0x3) # pll1_cfg2_holdover_exitcrit[1:0] = 0x0 # pll1_cfg2_holdover_exitactn[3:2] = 0x3 dut.write(0x16, 0xC) # pll1_cfg7_hodac_offsetval[6:0] = 0x0 dut.write(0x17, 0x0) # pll1_cfg2_hoadc_bw_reduction[1:0] = 0x0 # pll1_cfg1_hodac_force_quickmode[2:2] = 0x1 # pll1_cfg1_hodac_dis_avg_track[3:3] = 0x0 dut.write(0x18, 0x4) # pll1_cfg1_los_uses_vcxodiv[0:0] = 0x0 # pll1_cfg1_los_bypass_lcmdiv[1:1] = 0x0 dut.write(0x19, 0x0) # pll1_cfg4_cpi[3:0] = 0x8 dut.write(0x1A, 0x8) # pll1_cfg1_pfd_invert[0:0] = 0x0 # pll1_cfg1_cppulldn[1:1] = 0x0 # pll1_cfg1_cppullup[2:2] = 0x0 # pll1_cfg1_cpendn[3:3] = 0x1 # pll1_cfg1_cpenup[4:4] = 0x1 dut.write(0x1B, 0x18) # pll1_cfg8_los_div_setpt_r0[7:0] = 0x4 dut.write(0x1C, 0x4) # pll1_cfg8_los_div_setpt_r1[7:0] = 0x1 dut.write(0x1D, 0x1) # pll1_cfg8_los_div_setpt_r2[7:0] = 0x4 dut.write(0x1E, 0x4) # pll1_cfg8_los_div_setpt_r3[7:0] = 0x1 dut.write(0x1F, 0x1) # pll1_cfg8_los_div_setpt_vcxo[7:0] = 0x4 dut.write(0x20, 0x4) # pll1_cfg16_refdivrat_lsb[7:0] = 0x4 dut.write(0x21, 0x4) # pll1_cfg16_refdivrat_msb[7:0] = 0x0 dut.write(0x22, 0x0) # pll1_cfg16_fbdivrat_lsb[7:0] = 0x10 dut.write(0x26, 0x10) # pll1_cfg16_fbdivrat_msb[7:0] = 0x0 dut.write(0x27, 0x0) # pll1_cfg5_lkdtimersetpt[4:0] = 0xF # pll1_cfg1_use_slip_for_lkdrst[5:5] = 0x0 dut.write(0x28, 0xF) # pll1_cfg1_automode[0:0] = 0x1 # pll1_cfg1_autorevertive[1:1] = 0x0 # pll1_cfg1_holdover_uses_dac[2:2] = 0x1 # pll1_cfg2_manclksel[4:3] = 0x0 # pll1_cfg1_byp_debouncer[5:5] = 0x0 dut.write(0x29, 0x5) # pll1_hoff_timer_setpoint[7:0] = 0x0 dut.write(0x2A, 0x0) # pll2_reserved[7:0] = 0x1 dut.write(0x31, 0x1) # pll2_cfg1_rpath_x2_bypass[0:0] = 0x1 dut.write(0x32, 0x1) # pll2_rdiv_cfg12_divratio_lsb[7:0] = 0x2 dut.write(0x33, 0x2) # pll2_rdiv_cfg12_divratio_msb[3:0] = 0x0 dut.write(0x34, 0x0) # pll2_vdiv_cfg16_divratio_lsb[7:0] = 0x20 dut.write(0x35, 0x20) # pll2_vdiv_cfg16_divratio_msb[7:0] = 0x0 dut.write(0x36, 0x0) # pll2_cfg4_cp_gain[3:0] = 0xF dut.write(0x37, 0xF) # pll2_pfd_cfg1_invert[0:0] = 0x0 # pll2_pfd_cfg1_force_dn[1:1] = 0x0 # pll2_pfd_cfg1_force_up[2:2] = 0x0 # pll2_pfd_cfg1_dn_en[3:3] = 0x1 # pll2_pfd_cfg1_up_en[4:4] = 0x1 dut.write(0x38, 0x18) # pll2_cfg1_oscout_path_en[0:0] = 0x0 # pll2_cfg2_oscout_divratio[2:1] = 0x0 dut.write(0x39, 0x0) # pll2_cfg1_obuf0_drvr_en[0:0] = 0x0 # pll2_cfg5_obuf0_drvr_res[2:1] = 0x0 # pll2_cfg5_obuf0_drvr_mode[5:4] = 0x0 dut.write(0x3A, 0x0) # pll2_cfg1_obuf1_drvr_en[0:0] = 0x0 # pll2_cfg5_obuf1_drvr_res[2:1] = 0x0 # pll2_cfg5_obuf1_drvr_mode[5:4] = 0x0 dut.write(0x3B, 0x0) # glbl_cfg5_gpi1_en[0:0] = 0x0 # glbl_cfg5_gpi1_sel[4:1] = 0x0 dut.write(0x46, 0x0) # glbl_cfg5_gpi2_en[0:0] = 0x0 # glbl_cfg5_gpi2_sel[4:1] = 0x0 dut.write(0x47, 0x0) # glbl_cfg5_gpi3_en[0:0] = 0x0 # glbl_cfg5_gpi3_sel[4:1] = 0x4 dut.write(0x48, 0x8) # glbl_cfg5_gpi4_en[0:0] = 0x1 # glbl_cfg5_gpi4_sel[4:1] = 0x9 dut.write(0x49, 0x13) # glbl_cfg8_gpo1_en[0:0] = 0x0 # glbl_cfg8_gpo1_mode[1:1] = 0x1 # glbl_cfg8_gpo1_sel[7:2] = 0xD dut.write(0x50, 0x36) # glbl_cfg8_gpo2_en[0:0] = 0x0 # glbl_cfg8_gpo2_mode[1:1] = 0x1 # glbl_cfg8_gpo2_sel[7:2] = 0xC dut.write(0x51, 0x32) # glbl_cfg8_gpo3_en[0:0] = 0x0 # glbl_cfg8_gpo3_mode[1:1] = 0x0 # glbl_cfg8_gpo3_sel[7:2] = 0x0 dut.write(0x52, 0x0) # glbl_cfg8_gpo4_en[0:0] = 0x0 # glbl_cfg8_gpo4_mode[1:1] = 0x0 # glbl_cfg8_gpo4_sel[7:2] = 0x0 dut.write(0x53, 0x0) # glbl_cfg2_sdio_en[0:0] = 0x1 # glbl_cfg2_sdio_mode[1:1] = 0x1 dut.write(0x54, 0x3) # sysr_cfg3_pulsor_mode[2:0] = 0x1 dut.write(0x5A, 0x1) # sysr_cfg1_synci_invpol[0:0] = 0x0 # sysr_cfg1_pll2_carryup_sel[1:1] = 0x0 # sysr_cfg1_ext_sync_retimemode[2:2] = 0x1 dut.write(0x5B, 0x4) # sysr_cfg16_divrat_lsb[7:0] = 0xFA dut.write(0x5C, 0xFA) # sysr_cfg16_divrat_msb[3:0] = 0x0 dut.write(0x5D, 0x0) # dist_cfg1_extvco_islowfreq_sel[0:0] = 0x0 # dist_cfg1_extvco_div2_sel[1:1] = 0x0 dut.write(0x64, 0x0) # clkgrpx_cfg1_alg_dly_lowpwr_sel[0:0] = 0x0 dut.write(0x65, 0x0) # alrm_cfg4_pll1_los4_allow[3:0] = 0x0 # alrm_cfg1_pll1_hold_allow[4:4] = 0x0 # alrm_cfg1_pll1_lock_allow[5:5] = 0x0 # alrm_cfg1_pll1_acq_allow[6:6] = 0x0 # alrm_cfg1_pll1_nearlock_allow[7:7] = 0x0 dut.write(0x70, 0x0) # alrm_cfg1_pll2_lock_allow[0:0] = 0x0 # alrm_cfg1_sysr_unsyncd_allow[1:1] = 0x0 # alrm_cfg1_clkgrpx_validph_allow[2:2] = 0x0 # alrm_cfg1_plls_both_locked_allow[3:3] = 0x0 # alrm_cfg1_sync_req_allow[4:4] = 0x1 dut.write(0x71, 0x10) # glbl_ro8_chipid_lob[7:0] = 0x1 dut.write(0x78, 0x1) # glbl_ro8_chipid_mid[7:0] = 0x52 dut.write(0x79, 0x52) # glbl_ro8_chipid_hib[7:0] = 0x4 dut.write(0x7A, 0x4) # alrm_ro1_alarm_masked_viaspi[0:0] = 0x1 dut.write(0x7B, 0x1) # alrm_ro4_pll1_los4_now[3:0] = 0x0 # alrm_ro1_pll1_hold_now[4:4] = 0x0 # alrm_ro1_pll1_lock_now[5:5] = 0x0 # alrm_ro1_pll1_acq_now[6:6] = 0x0 # alrm_ro1_pll1_nearlock_now[7:7] = 0x0 dut.write(0x7C, 0x0) # alrm_ro1_pll2_lock_now[0:0] = 0x0 # alrm_ro1_sysr_unsyncd_now[1:1] = 0x1 # alrm_ro1_clkgrpx_validph_now[2:2] = 0x0 # alrm_ro1_plls_both_locked_now[3:3] = 0x0 # alrm_ro1_sync_req_now[4:4] = 0x1 dut.write(0x7D, 0x12) # alrm_ro4_pll1_los4_latch[3:0] = 0x0 # alrm_ro1_pll1_hold_latch[4:4] = 0x0 # alrm_ro1_pll1_acq_latch[5:5] = 0x0 # alrm_ro1_pll2_acq_latch[6:6] = 0x0 dut.write(0x7E, 0x0) # pll1_ro3_fsm_state[2:0] = 0x0 # pll1_ro2_selected_clkidx[4:3] = 0x0 # pll1_ro2_bestclk[6:5] = 0x0 dut.write(0x82, 0x0) # pll1_ro7_dac_avg[6:0] = 0x40 dut.write(0x83, 0x40) # pll1_ro7_dac_current[6:0] = 0x3F # pll1_ro1_dac_compare[7:7] = 0x0 dut.write(0x84, 0x3F) # pll1_ro1_adc_outofrange[0:0] = 0x1 # pll1_ro1_adc_moving_quick[1:1] = 0x1 # pll1_ro1_lookslikelos_vcxo[2:2] = 0x0 # pll1_ro1_los_active_ref[3:3] = 0x0 dut.write(0x85, 0x3) # pll1_ro5_eng_fullstate[4:3] = 0x0 dut.write(0x86, 0x0) # pll2_ro8_tunestatus[7:0] = 0x10 dut.write(0x8C, 0x10) # pll2_ro8_vtune_error_lsb[7:0] = 0xFF dut.write(0x8D, 0xFF) # pll2_ro8_vtune_error_msb[5:0] = 0x1F # pll2_ro8_vtune_error_sign[6:6] = 0x0 # pll2_ro8_vtune_status[7:7] = 0x0 dut.write(0x8E, 0x1F) # pll2_ro4_syncfsm_state[3:0] = 0x0 # pll2_ro4_atunefsm_state[7:4] = 0x0 dut.write(0x8F, 0x0) # sysr_ro4_fsmstate[3:0] = 0x2 # grpx_ro1_outdivfsm_busy[4:4] = 0x0 dut.write(0x91, 0x2) # reg_96[7:0] = 0x0 dut.write(0x96, 0x0) # reg_97[7:0] = 0x0 dut.write(0x97, 0x0) # reg_98[7:0] = 0x0 dut.write(0x98, 0x0) # reg_99[7:0] = 0x0 dut.write(0x99, 0x0) # reg_9A[7:0] = 0x0 dut.write(0x9A, 0x0) # reg_9B[7:0] = 0xAA dut.write(0x9B, 0xAA) # reg_9C[7:0] = 0xAA dut.write(0x9C, 0xAA) # reg_9D[7:0] = 0xAA dut.write(0x9D, 0xAA) # reg_9E[7:0] = 0xAA dut.write(0x9E, 0xAA) # reg_9F[7:0] = 0x55 dut.write(0x9F, 0x55) # reg_A0[7:0] = 0x56 dut.write(0xA0, 0x56) # reg_A1[7:0] = 0x97 dut.write(0xA1, 0x97) # reg_A2[7:0] = 0x3 dut.write(0xA2, 0x3) # reg_A3[7:0] = 0x0 dut.write(0xA3, 0x0) # reg_A4[7:0] = 0x0 dut.write(0xA4, 0x0) # reg_A5[7:0] = 0x0 dut.write(0xA5, 0x0) # reg_A6[7:0] = 0x1C dut.write(0xA6, 0x1C) # reg_A7[7:0] = 0x0 dut.write(0xA7, 0x0) # reg_A8[7:0] = 0x22 dut.write(0xA8, 0x22) # reg_A9[7:0] = 0x0 dut.write(0xA9, 0x0) # reg_AB[7:0] = 0x0 dut.write(0xAB, 0x0) # reg_AC[7:0] = 0x20 dut.write(0xAC, 0x20) # reg_AD[7:0] = 0x0 dut.write(0xAD, 0x0) # reg_AE[7:0] = 0x8 dut.write(0xAE, 0x8) # reg_AF[7:0] = 0x50 dut.write(0xAF, 0x50) # reg_B0[7:0] = 0x9 dut.write(0xB0, 0x9) # reg_B1[7:0] = 0xD dut.write(0xB1, 0xD) # reg_B2[7:0] = 0x0 dut.write(0xB2, 0x0) # reg_B3[7:0] = 0x0 dut.write(0xB3, 0x0) # reg_B5[7:0] = 0x0 dut.write(0xB5, 0x0) # reg_B6[7:0] = 0x0 dut.write(0xB6, 0x0) # reg_B7[7:0] = 0x0 dut.write(0xB7, 0x0) # reg_B8[7:0] = 0x0 dut.write(0xB8, 0x0) # clkgrp1_div1_cfg1_en[0:0] = 0x1 # clkgrp1_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp1_div1_cfg2_startmode[3:2] = 0x0 # clkgrp1_div1_cfg1_rev[4:4] = 0x1 # clkgrp1_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp1_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp1_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0xC8, 0xF3) # clkgrp1_div1_cfg12_divrat_lsb[7:0] = 0x4 dut.write(0xC9, 0x4) # clkgrp1_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0xCA, 0x0) # clkgrp1_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0xCB, 0x0) # clkgrp1_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0xCC, 0x0) # clkgrp1_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0xCD, 0x0) # clkgrp1_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0xCE, 0x0) # clkgrp1_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp1_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0xCF, 0x0) # clkgrp1_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp1_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp1_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp1_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp1_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0xD0, 0x1) # clkgrp1_div2_cfg1_en[0:0] = 0x1 # clkgrp1_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp1_div2_cfg2_startmode[3:2] = 0x3 # clkgrp1_div2_cfg1_rev[4:4] = 0x1 # clkgrp1_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp1_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp1_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0xD2, 0xFD) # clkgrp1_div2_cfg12_divrat_lsb[7:0] = 0xFA dut.write(0xD3, 0xFA) # clkgrp1_div2_cfg12_divrat_msb[3:0] = 0x0 dut.write(0xD4, 0x0) # clkgrp1_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0xD5, 0x0) # clkgrp1_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0xD6, 0x0) # clkgrp1_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0xD7, 0x0) # clkgrp1_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0xD8, 0x0) # clkgrp1_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp1_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0xD9, 0x0) # clkgrp1_div2_cfg5_drvr_res[1:0] = 0x1 # clkgrp1_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp1_div2_cfg5_drvr_mode[4:3] = 0x0 # clkgrp1_div2_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp1_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0xDA, 0x1) # clkgrp2_div1_cfg1_en[0:0] = 0x0 # clkgrp2_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp2_div1_cfg2_startmode[3:2] = 0x3 # clkgrp2_div1_cfg1_rev[4:4] = 0x1 # clkgrp2_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp2_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp2_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0xDC, 0xFE) # clkgrp2_div1_cfg12_divrat_lsb[7:0] = 0x8 dut.write(0xDD, 0x8) # clkgrp2_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0xDE, 0x0) # clkgrp2_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0xDF, 0x0) # clkgrp2_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0xE0, 0x0) # clkgrp2_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0xE1, 0x0) # clkgrp2_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0xE2, 0x0) # clkgrp2_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp2_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0xE3, 0x0) # clkgrp2_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp2_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp2_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp2_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp2_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0xE4, 0x1) # clkgrp2_div2_cfg1_en[0:0] = 0x1 # clkgrp2_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp2_div2_cfg2_startmode[3:2] = 0x3 # clkgrp2_div2_cfg1_rev[4:4] = 0x1 # clkgrp2_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp2_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp2_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0xE6, 0xFD) # clkgrp2_div2_cfg12_divrat_lsb[7:0] = 0xFA dut.write(0xE7, 0xFA) # clkgrp2_div2_cfg12_divrat_msb[3:0] = 0x0 dut.write(0xE8, 0x0) # clkgrp2_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0xE9, 0x0) # clkgrp2_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0xEA, 0x0) # clkgrp2_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0xEB, 0x0) # clkgrp2_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0xEC, 0x0) # clkgrp2_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp2_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0xED, 0x0) # clkgrp2_div2_cfg5_drvr_res[1:0] = 0x1 # clkgrp2_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp2_div2_cfg5_drvr_mode[4:3] = 0x0 # clkgrp2_div2_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp2_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0xEE, 0x1) # clkgrp3_div1_cfg1_en[0:0] = 0x0 # clkgrp3_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp3_div1_cfg2_startmode[3:2] = 0x0 # clkgrp3_div1_cfg1_rev[4:4] = 0x1 # clkgrp3_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp3_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp3_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0xF0, 0xF2) # clkgrp3_div1_cfg12_divrat_lsb[7:0] = 0x2 dut.write(0xF1, 0x2) # clkgrp3_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0xF2, 0x0) # clkgrp3_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0xF3, 0x0) # clkgrp3_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0xF4, 0x0) # clkgrp3_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0xF5, 0x0) # clkgrp3_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0xF6, 0x0) # clkgrp3_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp3_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0xF7, 0x0) # clkgrp3_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp3_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp3_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp3_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp3_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0xF8, 0x1) # clkgrp3_div2_cfg1_en[0:0] = 0x0 # clkgrp3_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp3_div2_cfg2_startmode[3:2] = 0x3 # clkgrp3_div2_cfg1_rev[4:4] = 0x1 # clkgrp3_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp3_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp3_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0xFA, 0xFC) # clkgrp3_div2_cfg12_divrat_lsb[7:0] = 0x0 dut.write(0xFB, 0x0) # clkgrp3_div2_cfg12_divrat_msb[3:0] = 0x1 dut.write(0xFC, 0x1) # clkgrp3_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0xFD, 0x0) # clkgrp3_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0xFE, 0x0) # clkgrp3_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0xFF, 0x0) # clkgrp3_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x100, 0x0) # clkgrp3_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp3_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x101, 0x0) # clkgrp3_div2_cfg5_drvr_res[1:0] = 0x0 # clkgrp3_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp3_div2_cfg5_drvr_mode[4:3] = 0x2 # clkgrp3_div2_cfg_outbuf_dyn[5:5] = 0x1 # clkgrp3_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0x102, 0x30) # clkgrp4_div1_cfg1_en[0:0] = 0x0 # clkgrp4_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp4_div1_cfg2_startmode[3:2] = 0x0 # clkgrp4_div1_cfg1_rev[4:4] = 0x1 # clkgrp4_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp4_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp4_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0x104, 0xF2) # clkgrp4_div1_cfg12_divrat_lsb[7:0] = 0x2 dut.write(0x105, 0x2) # clkgrp4_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0x106, 0x0) # clkgrp4_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0x107, 0x0) # clkgrp4_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x108, 0x0) # clkgrp4_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x109, 0x0) # clkgrp4_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x10A, 0x0) # clkgrp4_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp4_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x10B, 0x0) # clkgrp4_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp4_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp4_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp4_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp4_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0x10C, 0x1) # clkgrp4_div2_cfg1_en[0:0] = 0x0 # clkgrp4_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp4_div2_cfg2_startmode[3:2] = 0x3 # clkgrp4_div2_cfg1_rev[4:4] = 0x1 # clkgrp4_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp4_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp4_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0x10E, 0xFC) # clkgrp4_div2_cfg12_divrat_lsb[7:0] = 0x0 dut.write(0x10F, 0x0) # clkgrp4_div2_cfg12_divrat_msb[3:0] = 0x1 dut.write(0x110, 0x1) # clkgrp4_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0x111, 0x0) # clkgrp4_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x112, 0x0) # clkgrp4_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x113, 0x0) # clkgrp4_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x114, 0x0) # clkgrp4_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp4_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x115, 0x0) # clkgrp4_div2_cfg5_drvr_res[1:0] = 0x0 # clkgrp4_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp4_div2_cfg5_drvr_mode[4:3] = 0x2 # clkgrp4_div2_cfg_outbuf_dyn[5:5] = 0x1 # clkgrp4_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0x116, 0x30) # clkgrp5_div1_cfg1_en[0:0] = 0x0 # clkgrp5_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp5_div1_cfg2_startmode[3:2] = 0x0 # clkgrp5_div1_cfg1_rev[4:4] = 0x1 # clkgrp5_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp5_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp5_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0x118, 0xF2) # clkgrp5_div1_cfg12_divrat_lsb[7:0] = 0x2 dut.write(0x119, 0x2) # clkgrp5_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0x11A, 0x0) # clkgrp5_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0x11B, 0x0) # clkgrp5_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x11C, 0x0) # clkgrp5_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x11D, 0x0) # clkgrp5_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x11E, 0x0) # clkgrp5_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp5_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x11F, 0x0) # clkgrp5_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp5_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp5_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp5_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp5_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0x120, 0x1) # clkgrp5_div2_cfg1_en[0:0] = 0x0 # clkgrp5_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp5_div2_cfg2_startmode[3:2] = 0x3 # clkgrp5_div2_cfg1_rev[4:4] = 0x1 # clkgrp5_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp5_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp5_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0x122, 0xFC) # clkgrp5_div2_cfg12_divrat_lsb[7:0] = 0x0 dut.write(0x123, 0x0) # clkgrp5_div2_cfg12_divrat_msb[3:0] = 0x1 dut.write(0x124, 0x1) # clkgrp5_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0x125, 0x0) # clkgrp5_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x126, 0x0) # clkgrp5_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x127, 0x0) # clkgrp5_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x128, 0x0) # clkgrp5_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp5_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x129, 0x0) # clkgrp5_div2_cfg5_drvr_res[1:0] = 0x0 # clkgrp5_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp5_div2_cfg5_drvr_mode[4:3] = 0x2 # clkgrp5_div2_cfg_outbuf_dyn[5:5] = 0x1 # clkgrp5_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0x12A, 0x30) # clkgrp6_div1_cfg1_en[0:0] = 0x0 # clkgrp6_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp6_div1_cfg2_startmode[3:2] = 0x0 # clkgrp6_div1_cfg1_rev[4:4] = 0x1 # clkgrp6_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp6_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp6_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0x12C, 0xF2) # clkgrp6_div1_cfg12_divrat_lsb[7:0] = 0x2 dut.write(0x12D, 0x2) # clkgrp6_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0x12E, 0x0) # clkgrp6_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0x12F, 0x0) # clkgrp6_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x130, 0x0) # clkgrp6_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x131, 0x0) # clkgrp6_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x132, 0x0) # clkgrp6_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp6_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x133, 0x0) # clkgrp6_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp6_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp6_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp6_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp6_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0x134, 0x1) # clkgrp6_div2_cfg1_en[0:0] = 0x0 # clkgrp6_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp6_div2_cfg2_startmode[3:2] = 0x3 # clkgrp6_div2_cfg1_rev[4:4] = 0x1 # clkgrp6_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp6_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp6_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0x136, 0xFC) # clkgrp6_div2_cfg12_divrat_lsb[7:0] = 0x0 dut.write(0x137, 0x0) # clkgrp6_div2_cfg12_divrat_msb[3:0] = 0x1 dut.write(0x138, 0x1) # clkgrp6_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0x139, 0x0) # clkgrp6_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x13A, 0x0) # clkgrp6_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x13B, 0x0) # clkgrp6_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x13C, 0x0) # clkgrp6_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp6_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x13D, 0x0) # clkgrp6_div2_cfg5_drvr_res[1:0] = 0x0 # clkgrp6_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp6_div2_cfg5_drvr_mode[4:3] = 0x2 # clkgrp6_div2_cfg_outbuf_dyn[5:5] = 0x1 # clkgrp6_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0x13E, 0x30) # clkgrp7_div1_cfg1_en[0:0] = 0x0 # clkgrp7_div1_cfg1_phdelta_mslip[1:1] = 0x1 # clkgrp7_div1_cfg2_startmode[3:2] = 0x0 # clkgrp7_div1_cfg1_rev[4:4] = 0x1 # clkgrp7_div1_cfg1_slipmask[5:5] = 0x1 # clkgrp7_div1_cfg1_reseedmask[6:6] = 0x1 # clkgrp7_div1_cfg1_hi_perf[7:7] = 0x1 dut.write(0x140, 0xF2) # clkgrp7_div1_cfg12_divrat_lsb[7:0] = 0x10 dut.write(0x141, 0x10) # clkgrp7_div1_cfg12_divrat_msb[3:0] = 0x0 dut.write(0x142, 0x0) # clkgrp7_div1_cfg5_fine_delay[4:0] = 0x0 dut.write(0x143, 0x0) # clkgrp7_div1_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x144, 0x0) # clkgrp7_div1_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x145, 0x0) # clkgrp7_div1_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x146, 0x0) # clkgrp7_div1_cfg2_sel_outmux[1:0] = 0x0 # clkgrp7_div1_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x147, 0x0) # clkgrp7_div1_cfg5_drvr_res[1:0] = 0x1 # clkgrp7_div1_cfg5_drvr_spare[2:2] = 0x0 # clkgrp7_div1_cfg5_drvr_mode[4:3] = 0x0 # clkgrp7_div1_cfg_outbuf_dyn[5:5] = 0x0 # clkgrp7_div1_cfg2_mutesel[7:6] = 0x0 dut.write(0x148, 0x1) # clkgrp7_div2_cfg1_en[0:0] = 0x0 # clkgrp7_div2_cfg1_phdelta_mslip[1:1] = 0x0 # clkgrp7_div2_cfg2_startmode[3:2] = 0x3 # clkgrp7_div2_cfg1_rev[4:4] = 0x1 # clkgrp7_div2_cfg1_slipmask[5:5] = 0x1 # clkgrp7_div2_cfg1_reseedmask[6:6] = 0x1 # clkgrp7_div2_cfg1_hi_perf[7:7] = 0x1 dut.write(0x14A, 0xFC) # clkgrp7_div2_cfg12_divrat_lsb[7:0] = 0x0 dut.write(0x14B, 0x0) # clkgrp7_div2_cfg12_divrat_msb[3:0] = 0x1 dut.write(0x14C, 0x1) # clkgrp7_div2_cfg5_fine_delay[4:0] = 0x0 dut.write(0x14D, 0x0) # clkgrp7_div2_cfg5_sel_coarse_delay[4:0] = 0x0 dut.write(0x14E, 0x0) # clkgrp7_div2_cfg12_mslip_lsb[7:0] = 0x0 dut.write(0x14F, 0x0) # clkgrp7_div2_cfg12_mslip_msb[3:0] = 0x0 dut.write(0x150, 0x0) # clkgrp7_div2_cfg2_sel_outmux[1:0] = 0x0 # clkgrp7_div2_cfg1_drvr_sel_testclk[2:2] = 0x0 dut.write(0x151, 0x0) # clkgrp7_div2_cfg5_drvr_res[1:0] = 0x0 # clkgrp7_div2_cfg5_drvr_spare[2:2] = 0x0 # clkgrp7_div2_cfg5_drvr_mode[4:3] = 0x2 # clkgrp7_div2_cfg_outbuf_dyn[5:5] = 0x1 # clkgrp7_div2_cfg2_mutesel[7:6] = 0x0 dut.write(0x152, 0x30)