【FPGA功能模块】同步信号边沿检测@sync_sig_edge_detect

1、边沿检测

1.1 目的

检测信号的跳变,即上升沿(0→1)或下降沿(1→0)。

1.2 应用

常用于检测1bit信号的电平跳变,例如光耦、按键、微动开关等器件在正常工作时会产生由0到1或者由1到0的跳变,检测到边沿的跳变后就能知道这些器件在什么时候被触发,方便进行其它的逻辑判断。

1.3 检测方法

设置两个寄存器A和B,分别寄存当前状态和后一状态,若当前状态和后一状态不同,则表示信号有跳变。具体判断逻辑如下:
(1)若A为High,而B为Low,则检测到上升沿;
(2)若A为Low,而B为High,则检测到下降沿;
(3)若A≠B,则检测到双边沿。
在这里插入图片描述

2、Verilog代码

2.1 功能描述

用于检测与系统时钟同步的信号的上升沿和下降沿

2.2 源代码

//==========================================================
//	作者:DingXY的硬件笔记本
//	邮箱:1324830818@qq.com
//	日期:2025/08/13
//	功能描述:用于检测与系统时钟同步的信号的上升沿和下降沿
//==========================================================

module sync_sig_edge_detect
#(
parameter	INITIAL_VALUE = 1'b1 //待检测的同步信号的初始值
)(
input		clk			,//系统时钟
input		rst_n		,//复位信号(低电平有效)
input		sync_sig	,//待检测的同步信号

output wire	sync_sig_pos,//同步信号的上升沿
output wire	sync_sig_neg //同步信号的下降沿
);

//----------------------------------------------------------
//	同步信号的上升沿和下降沿
//----------------------------------------------------------
reg	sync_sig_temp ;//待检测的同步信号寄存1拍

always @(posedge clk or negedge rst_n) begin
	if(rst_n == 1'b0)
		sync_sig_temp <= INITIAL_VALUE ;
	else
		sync_sig_temp <= sync_sig ;
end

assign sync_sig_pos	= ( sync_sig) & (~sync_sig_temp) ;
assign sync_sig_neg	= (~sync_sig) & ( sync_sig_temp) ;

endmodule

2.3 TestBench仿真代码

//定义时间刻度
`timescale 1ns/1ns

module sync_sig_edge_detect_tb();
//-------------------------------------------------------------------
//	信号定义
//-------------------------------------------------------------------
reg 	clk			;//系统时钟
reg 	rst_n		;//复位信号,低电平有效
reg		sync_sig	;//待检测的同步信号

wire	sync_sig_pos;//同步信号的上升沿
wire	sync_sig_neg;//同步信号的下降沿

//-----------------------------------------------------------
//	定义主时钟,周期20ns,频率50MHz
//-----------------------------------------------------------
always #10 clk = ~ clk ;

//-----------------------------------------------------------
//	设计仿真时序
//-----------------------------------------------------------
initial begin
	clk <= 1'b0 ;
	rst_n <= 1'b0 ;
	sync_sig <= 1'b1 ;
//系统开始工作
	#50		rst_n <= 1'b1 ;
//设计待检测信号
	#100	sync_sig <= 1'b0 ;
	#200	sync_sig <= 1'b1 ;
	#140	sync_sig <= 1'b0 ;
	#180	sync_sig <= 1'b1 ;
//结束仿真
	#100	$finish ;
end

//-----------------------------------------------------------
//	例化sync_sig_edge_detect模块
//-----------------------------------------------------------
sync_sig_edge_detect
#(
.INITIAL_VALUE	(1'b1			) //待检测的同步信号的初始值
)
sync_sig_edge_detect_inst0
(
.clk			(clk			),//系统时钟
.rst_n			(rst_n			),//复位信号(低电平有效)
.sync_sig		(sync_sig		),//待检测的同步信号

.sync_sig_pos	(sync_sig_pos	),//同步信号的上升沿
.sync_sig_neg	(sync_sig_neg	) //同步信号的下降沿
);

endmodule  

2.4 仿真结果

在这里插入图片描述

3、更多内容请关注微信公众号:DingXY的硬件笔记本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值