使用Altera的altclkctrl可以实现时钟的动态切换或者降低局部时钟网络的功耗。生成altclkctrl IP核的过程简单,但是对时钟输入有一定的限制。如果需要切换多个时钟,那么inclk0x和inclk1x必须是FPGA的管脚直接输入,inclk2x和inclk3x必须是锁相环的输出作为输入,还必须是同一个锁相环的不同输出,如c0或c1。
my_altclkctrl my_altclkctrl_inst (
.clkselect( sync_clk_src_sel_r1[1:0] ),
.inclk0x( mfio0 ),//fpga_pin
.inclk1x( si5338_clk),//fpga_pin
.inclk2x( sys_clk100m),//inclk2和inclk3必须是同一个锁相环的输出
.inclk3x( sys_clk50m),
.outclk( clk_buf)
);