FPGA实现边沿检测电路(上升沿、下降沿)

原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/112187021

1.什么是边沿检测

边沿检测用于检测信号的上升沿或下降沿,通常用于使能信号的捕捉等场景。

2、采用1级触发器的边沿检测电路设计(以下降沿为例)

由此我们可以推导出边沿检测信号产生的一般方法:

将需要检测的信号寄存一拍,同步到系统时钟域下,得到信号 in_d1

将需要检测的信号反向,得到信号 ~in

将信号 in_d1 反向,得到信号 ~in_d1

通过组合逻辑电路可以得到下降沿信号 in_neg:assign in_neg = ~in && in_d1

同样通过组合逻辑电路可以得到上升沿信号 in_pos:assign in_pos = in && ~in_d1

双边沿检测就是将上两条加(或运算)起来就可以了,化简后有:双边沿信号 in_both = in ^ ind1

//使用1级寄存器的下降沿检测电路
module detect_1
(
	input		sys_clk,		//时钟(设定为 50MHz)
	input		sys_rst_n,		//复位信号(n 表示低电平有效)
	input		in,				//需要进行下降沿检测的输入信号
	
	output		in_neg			//输出的下降沿指示信号
 
);		
//reg  定义		
reg		in_d1;					//寄存一拍的信号
 
assign in_neg = ~in && in_d1;	//组合逻辑得到下降沿
//上升沿: assign in_pos = in && ~in_d1;
//双边沿: assign in_pos = in ^ in_d1;
 
//寄存模块,将输入信号打一拍
always@(posedge sys_clk or negedge sys_rst_n)begin
	if(!sys_rst_n)
		in_d1 <= 1'b0;			//复位清零	
	else 
		in_d1 <= in;			//寄存一拍	
end
endmodule

3、采用2级触发器的边沿检测电路(以下降沿为例)

由此我们可以推导出边沿检测信号产生的一般方法:

将需要检测的信号分别寄存1拍、2拍,同步到系统时钟域下,得到信号 in_d1、in_d2

将in_d1信号反向,得到信号 ~in_d1

将in_d2信号反向,得到信号 ~in_d2

通过组合逻辑电路可以得到下降沿信号 in_neg:assign in_neg = ~in_d1 && in_d2

同样通过组合逻辑电路可以得到上升沿信号 in_pos:assign in_pos = in_d1 && ~in_d2

双边沿检测就是将上两条加(或运算)起来就可以了,化简后有:双边沿信号 in_both = in_d1 ^ in_d2

//使用1级寄存器的下降沿检测电路
module detect_2
(
	input		sys_clk,		//时钟(设定为 50MHz)
	input		sys_rst_n,		//复位信号(n 表示低电平有效)
	input		in,				//需要进行下降沿检测的输入信号
	
	output		in_neg			//输出的下降沿指示信号
 
);		
//reg  定义		
reg		in_d1;					//寄存1拍的信号
reg		in_d2;					//寄存2拍的信号	
 
assign in_neg = ~in_d1 && in_d2;//组合逻辑得到下降沿
//上升沿: assign in_pos = in && ~in_d1;
//双边沿: assign in_pos = in ^ in_d1;
 
//寄存模块,将输入信号打1拍、打2拍
always@(posedge sys_clk or negedge sys_rst_n)begin
	if(!sys_rst_n)begin
		in_d1 <= 1'b0;			//复位清零
		in_d2 <= 1'b0;
	end
	else begin
		in_d1 <= in;			//寄存1拍
		in_d2 <= in_d1;			//寄存2拍
	end
end
 
endmodule

原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/112187021

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务