无毛刺时钟切换
门控时钟能够有效降低动态功耗,低功耗设计方法之一,在ASIC中使用较多,在FPGA使用较少(会影响时序分析)
核心思想 与门/与非门实现的门控时钟只能在时钟低电平处切换,也就是下降沿处切换;对于或门/或非门,高电平切换,也就是上升沿。
1.相关时钟之间
只需要在时钟源的选择路径加上一个下降沿有效的触发器(时钟输出是与门门控)用来接收另外一个时钟的选择信号的取反信号
2不相关时钟之间
在相关时钟无毛刺切换的基础上多加寄存器进行信号打两拍处理,降低亚稳态对信号的影响
时钟无毛刺切换代码
module clk_switch(
//sys
input clk1 ,
input clk2 ,
input rst_n ,
//input
input sel ,
//output
output clk_out
);
//=========================================
//================define===================
//=========================================
wire sel_1;
wire sel_2;
reg [1:0] dff1_r;
reg [1:0] dff2_r;
reg dff1_neg_out;
reg dff2_neg_out;
wire clk1_out,clk2_out;
//=========================================
//================main code================
//=========================================
assign sel_1 = sel & ~dff1_neg_out;
assign sel_2 = ~sel & ~dff2_neg_out;
always@(posedge clk1 or negedge rst_n)begin
if(!rst_n)
dff1_r <= 'd0;
else
dff1_r <= {dff1_r[1],sel_1};
end
always@(posedge clk2 or negedge rst_n)begin
if(!rst_n)
dff2_r <= 'd0;
else
dff2_r <= {dff2_r[1],sel_2};
end
always@(negedge clk1 or negedge rst_n)begin
if(!rst_n)
dff1_neg_out <= 'd0;
else
dff1_neg_out <= dff1_r[1];
end
always@(negedge clk2 or negedge rst_n)begin
if(!rst_n)
dff2_neg_out <= 'd0;
else
dff2_neg_out <= dff2_r[1];
end
assign clk1_out = dff1_neg_out & clk1;
assign clk2_out = dff2_neg_out & clk2;
assign clk_out = clk1_out | clk2_out;
endmodule
标签:sel,dff1,准备,秋招,input,时钟,reg,out From: https://www.cnblogs.com/VicentZJ/p/17533483.html