Verilog – 无glitch时钟切换电路
https://blog.csdn.net/bleauchat/article/details/96180815
题目:用Verilog实现glitch free时钟切换电路。输入sel,clka,clkb,sel为1输出clka,sel为0输出clkb
第一种
纯组合逻辑
module clk_select1(
input clk1,
input clk2,
input rst_n,
input sel,
output clk_out
);
assign clk_out = sel?clk1:clk2;
endmodule
缺点:会有毛刺
第二种

在时钟的下降沿寄存选择信号(SELECT)可确保在任一时钟处于高电平时输出端不会发生变化,从而防止斩波输出时钟(意思是下降沿寄存,可以保证下降沿到来之前输出端保持不变,这样就不会斩断当前时钟了)
缺点:当sel信号出现再clk的下降沿,或者两个寄存器的下降沿重合的地方可能会产生亚稳态
代码:
module clk_select2(
input clk1,
input clk2,
input rst_n,
input sel,
output clk_out
);
reg ff1;
reg ff2;
always @(negedge clk1 or negedge rst_n) begin
if(!rst_n) ff1 <= 1'b0;
else begin
ff1 <= ~ff2


547

被折叠的 条评论
为什么被折叠?



