题解 | #时钟切换#
时钟切换
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的上升沿没有完全和需要的时钟上升沿对齐。解决的方法是用下降沿去采集,避免采样毛刺,此外需要保证输出时钟为低的时候进行时钟变化,因此需要接入负反馈,,代表着切换前时钟等待一阵子后,才会转换到切换后时钟。避免切换毛刺