数字二倍频电路

时间:2025-02-12 07:07:27

在脉冲频率不足100k(步进电机控制频率<<500k)的情况下还可以采用高频检测输入脉冲信号的上升沿和下降沿加延时5us实现倍频功能

module frequency_multiplier
(
	input          clk,
	 input          rst_n,
	 input          clk_in,
	output         clk_out,
	output wire pos_edge,
	output wire neg_edge,
	 output wire both_edge,
	output         ref_clk
);
assign  ref_clk = clk_in;

reg     clkin_r0, clkin_r1;                  // 状态寄存器
always @ (posedge clk or negedge rst_n)begin
	 if (!rst_n) begin
			clkin_r0 <= 1'b0;
   		 	clkin_r1 <= 1'b0;
	end
	 else begin
    		clkin_r0 <= clk_in;
    		clkin_r1 <= clkin_r0;
	end
end
wire    clkin_sign;
//wire    pos_edge,neg_edge,both_edge;

assign pos_edge  = (~clkin_r1)& ( clkin_r0);
assign neg_edge  =   clkin_r1 & (~clkin_r0);   
assign both_edge =   clkin_r1 ^   clkin_r0;  // 双边沿检测,或pos_edge|neg_edge
assign clkin_sign = ~both_edge;

reg [31:0] counter;
always @(posedge clk or negedge clkin_sign)
begin
	if (!clkin_sign)
   		 counter  <= 0;
	else if (counter >= 32'd1000)            //检测到沿后延时5us
 	   counter     <= 32'd1000;
	 else
  	  counter  <= counter + 1;
end

assign clk_out =(counter == 32'd1000)? 0 : 1;

endmodule