题解 | #时钟切换#
时钟切换
https://www.nowcoder.com/practice/1de5e9bf749244cb8e5908626cc36d36
`timescale 1ns/1ns module huawei6( input wire clk0 , input wire clk1 , input wire rst , input wire sel , output reg clk_out ); //*************code***********// reg r1; reg r2; always @(negedge clk0 or negedge rst)begin if(!rst) r1<=0; else r1<=~r2&~sel; end always @(negedge clk1 or negedge rst)begin if(!rst) r2<=0; else r2<=~r1&sel; end always @ (*) begin clk_out <= (r2 & clk1) | (r1 & clk0); end //*************code***********// endmodule
时钟切换电路,如果直接用sel与时钟相与,会出现毛刺,原因是sel的上升沿没有完全和需要的时钟上升沿对齐。解决的方法是用下降沿去采集,避免采样毛刺,此外需要保证输出时钟为低的时候进行时钟变化,因此需要接入负反馈,,代表着切换前时钟等待一阵子后,才会转换到切换后时钟。避免切换毛刺